Endpoint reference

API

Endpoint reference

The planned /v1 REST endpoints for posts, profiles, comments, campaigns and trends, built on Sonder's own data model.

Versioned under /v1, JSON over HTTPS, cursor paging (cursor in, next out). The shapes follow the data Sonder already keeps for its own dashboards and MCP server.

Posts

GET/v1/posts/searchPlanned

Public posts matching q on the platforms you list, between since and until. Takes kind (keyword, hashtag, sound, account, tagged, subreddit) where the platform supports it, sort and cursor.

GET/v1/posts/{id}Planned

One post with its latest stats. Also takes a post URL: /v1/posts/lookup?url=….

GET/v1/posts/{id}/commentsPlanned

The post's public comments and replies, most liked first, paged with cursor.

GET/v1/posts/{id}/transcriptPlanned

What is said in the video, where the platform has transcripts.

GET /v1/posts/search (planned): one resultjson
{
  "posts": [
    {
      "id": "9dda86b0e89c04f35bcbf8e8528fd7d0",
      "platform": "tiktok",
      "externalId": "7695058711135423766",
      "url": "https://www.tiktok.com/@reversecomponents/video/7695058711135423766",
      "creator": {
        "handle": "reversecomponents",
        "name": "Reverse Components",
        "followers": 27100
      },
      "caption": "RED BULL RAMPAGE 2026 is on! 🔥🔥🔥 Clips from the last practice runs of Szymon Godziek ⚔️",
      "hashtags": [],
      "postedAt": "2026-10-10T15:17:59Z",
      "durationSec": 40,
      "views": 30900,
      "viewsEstimated": false,
      "likes": 5936,
      "comments": 7,
      "shares": 114,
      "transcriptExcerpt": null,
      "onscreenText": null,
      "asOf": "2026-11-02T23:04:08Z"
    }
  ],
  "next": "…"
}

Profiles

GET/v1/profiles/{platform}/{handle}Planned

A public account: name, followers and, where shown, bio and verified status.

GET/v1/profiles/{platform}/{handle}/postsPlanned

The account's recent public posts with their stats.

GET /v1/profiles/tiktok/reversecomponents (planned)json
{
  "platform": "tiktok",
  "handle": "reversecomponents",
  "name": "Reverse Components",
  "followers": 27100,
  "bio": "…",
  "asOf": "2026-11-02T23:04:08Z"
}

Comments

GET /v1/posts/{id}/comments (planned)json
{
  "postId": "9dda86b0e89c04f35bcbf8e8528fd7d0",
  "comments": [
    {
      "id": "…",
      "author": "reversecomponents",
      "text": "damn something went wrong here 🤔",
      "likes": 1,
      "createdAt": "2026-10-11T16:42:07Z",
      "parentId": null,
      "sentiment": null
    }
  ],
  "next": null
}

Campaigns

GET/v1/campaignsPlanned

Your campaigns with their headline totals.

POST/v1/campaignsPlanned

Start tracking a launch: a name, a description of what counts, a start date, platforms and your own accounts.

GET/v1/campaigns/{id}Planned

A campaign's totals: views, earned and owned views, posts, creators, engagements, by platform.

GET/v1/campaigns/{id}/postsPlanned

The campaign's posts with ownership, status and sentiment, filterable by each.

GET/v1/campaigns/{id}/creatorsPlanned

The accounts that posted about the campaign, most viewed first.

GET /v1/campaigns/{id} (planned shape; totals elided)json
{
  "id": "red-bull-rampage-2026",
  "name": "Red Bull Rampage 2026",
  "status": "active",
  "lastRefreshedAt": "2026-11-02T23:04:08Z",
  "ownedAccounts": [
    {
      "platform": "instagram",
      "handle": "redbull"
    },
    {
      "platform": "instagram",
      "handle": "redbullbike"
    },
    {
      "platform": "facebook",
      "handle": "RedBullBike"
    },
    "…"
  ],
  "totals": {
    "views": "…",
    "earnedViews": "…",
    "ownedViews": "…",
    "posts": "…",
    "pending": "…",
    "creators": "…"
  }
}
GET/v1/trendsPlanned

Formats spreading on TikTok, Instagram Reels and YouTube Shorts, with their stage and example posts.

Fields

The post shape, campaign fields and per-platform meanings are in Concepts and on each platform page.

Endpoint reference · Sonder APIs