# Pagination (/docs/pagination)



{/*
  AUTO-GENERATED. The intro prose is hand-written (edit it in
  packages/social-api/src/docs/generate-pagination.ts, not on disk; the whole
  file is overwritten on every `pnpm -F @repo/social-api generate:docs` run).
  The per-platform coverage tables at the bottom are rebuilt from the registry.
  Source: packages/social-api/src/docs/generate-pagination.ts
  */}

Pagination [#pagination]

Every list endpoint on every platform paginates the same way. Learn it once and it works on all 123 paginatable endpoints: TikTok, Instagram, YouTube, Reddit, LinkedIn, Naver, all of them.

The one rule [#the-one-rule]

**Read `pagination.next_cursor` from the response, send it back as the `cursor` query parameter, and stop when `pagination.has_more` is `false`.**

That is the entire contract. You never construct a cursor, decode a token, or look up a platform's native pagination param. The API hands you an opaque token and takes it straight back.

The response block [#the-response-block]

Every list response carries a top-level `pagination` block:

```json
{
  "success": true,
  "platform": "tiktok",
  "endpoint": "/v1/tiktok/profile/videos",
  "data": {
    "items": [ /* … this page of results … */ ],
    "total": 1247
  },
  "credits_used": 1,
  "credits_remaining": 98,
  "request_id": "req-abc123",
  "cached": false,
  "pagination": {
    "next_cursor": "sc.eyJ2IjoyLCJjIjoiNzM4…",
    "has_more": true,
    "page_size": 30
  }
}
```

| Field                    | Meaning                                                                                     |
| ------------------------ | ------------------------------------------------------------------------------------------- |
| `pagination.next_cursor` | Opaque token for the next page. Send it back as `cursor`. `null` at the end of the list.    |
| `pagination.has_more`    | `true` while more pages exist, `false` on the last page. &#x2A;*This is your stop signal.** |
| `pagination.page_size`   | How many items came back in `data.items` on this page.                                      |

The token is a single `sc.` string that works identically for cursor-, page-, and offset-style upstreams, so your loop is byte-for-byte the same everywhere. (`data.total`, when present, is the upstream's own result count, useful for a progress bar, but **never** use it to decide when to stop; `has_more` is the only always-correct signal.)

A worked round-trip [#a-worked-round-trip]

**Request page 1** (no cursor):

```bash
curl "https://www.socialcrawl.dev/v1/tiktok/profile/videos?handle=mrbeast" \
  -H "x-api-key: YOUR_API_KEY"
```

The response comes back with `"pagination": { "next_cursor": "sc.eyJ2Ijoy…", "has_more": true, "page_size": 30 }`.

**Request page 2** (pass that `next_cursor` back as `cursor`):

```bash
curl "https://www.socialcrawl.dev/v1/tiktok/profile/videos?handle=mrbeast&cursor=sc.eyJ2Ijoy…" \
  -H "x-api-key: YOUR_API_KEY"
```

Keep going until a response returns `"has_more": false` (and `"next_cursor": null`). Swap `tiktok/profile/videos` for **any** list endpoint in the table below and this is unchanged.

The loop [#the-loop]

Identical for every list endpoint on every platform:

```ts
async function* paginate(path: string, params: Record<string, string>) {
  let cursor: string | null = null;
  do {
    const url = new URL(`https://www.socialcrawl.dev/v1/${path}`);
    for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);
    if (cursor) url.searchParams.set("cursor", cursor); // <-- always "cursor"

    const res = await fetch(url, {
      headers: { "x-api-key": process.env.SOCIALCRAWL_KEY! },
    });
    const json = await res.json();

    for (const item of json.data.items) yield item;

    cursor = json.pagination.next_cursor; // <-- send back verbatim next round
  } while (cursor); // <-- pagination.has_more === false ends the loop
}

// Usage: same call shape for TikTok, Instagram, YouTube, Reddit, …
for await (const video of paginate("tiktok/profile/videos", { handle: "mrbeast" })) {
  // … handle each item
}
```

Two things to get right:

1. **Send `next_cursor` back as the EXACT string you received, under the key `cursor`.** Don't decode, trim, or re-encode it; it's an opaque token.
2. **Stop when `has_more` is `false`** (equivalently, when `next_cursor` is `null`). Don't infer the end from an empty page or from `total`.

Recipe: drain a full account safely [#recipe-drain-a-full-account-safely]

The real-world loop is "pull every post/comment/follower an account has" without burning credits or tripping limits. Walk pages until `has_more` is `false`, and keep three things in mind:

```ts
// Drain every video for a handle, then stop.
async function drain(path: string, params: Record<string, string>) {
  const all: unknown[] = [];
  let cursor: string | null = null;
  let pages = 0;

  do {
    const url = new URL(`https://www.socialcrawl.dev/v1/${path}`);
    for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);
    if (cursor) url.searchParams.set("cursor", cursor);

    const res = await fetch(url, {
      headers: { "x-api-key": process.env.SOCIALCRAWL_KEY! },
    });

    // Respect backpressure: on 429 (CONCURRENCY_LIMIT) or 503 back off and retry
    // the SAME cursor; never advance past a page you didn't successfully read.
    if (res.status === 429 || res.status === 503) {
      const wait = Number(res.headers.get("retry-after") ?? "2") * 1000;
      await new Promise((r) => setTimeout(r, wait));
      continue;
    }

    const json = await res.json();
    all.push(...json.data.items);
    cursor = json.pagination.next_cursor;
    pages += 1;
  } while (cursor);

  return { items: all, pages };
}
```

* **Concurrency.** You can drain many accounts in parallel, but a single API key allows **at most 50 concurrent requests**. Exceed it and you get a `429 CONCURRENCY_LIMIT` (0 credits charged). Cap your worker pool well under 50; within one account, pages are inherently sequential (each needs the previous `next_cursor`).
* **Credit budget.** Each page is a normal billed request: one page of a 1-credit endpoint costs 1 credit, so draining a 50-page feed costs about 50 credits. Multiply pages by the endpoint's per-call cost (see [Endpoint pricing](/docs/endpoint-pricing)) before you loop, and cap `pages` if you only need the most recent N results. Cache hits on re-runs cost 0 credits.
* **Bounded depth.** Page- and offset-style endpoints (Naver, LinkedIn, the app stores) have a finite maximum depth; `has_more` flips to `false` when you reach it. Cursor-style feeds end when the upstream runs out of items.

Sending the wrong param is a 400, not a silent bug [#sending-the-wrong-param-is-a-400-not-a-silent-bug]

You never need a platform's native pagination param name: always send `cursor`. If you do send a foreign cursor param (say you copy `max_id` off an Instagram response onto a TikTok endpoint), you get a `400 INVALID_REQUEST` with a `did_you_mean: "cursor"` hint and **zero credits charged**, instead of silently receiving page 1 again.

Stale or malformed cursors [#stale-or-malformed-cursors]

If you pass a cursor the upstream rejects (expired, hand-edited, copied across endpoints), you'll get a `502 UPSTREAM_ERROR` or `400 INVALID_PARAMETER` envelope. **Credits are refunded** on upstream errors (see [Credits → When are credits refunded?](/docs/credits#when-are-credits-refunded)). Start over with no cursor.

Page size [#page-size]

Most endpoints let the upstream decide: you'll typically get 10 to 30 items per page (`pagination.page_size` tells you exactly). Where a page-size control exists (see the **Page size** column below), pass a universal `limit` and the API maps it to the upstream's native name (Naver `display`, GitHub `per_page`, and so on), capped at that endpoint's maximum. A `—` in that column means no page-size control: to get fewer items, slice client-side; to get more, paginate another page.

Every paginatable endpoint [#every-paginatable-endpoint]

123 endpoints paginate today (83 cursor-based, 29 page-based, 11 offset-based). &#x2A;*Every one of them takes the universal `cursor` input and returns the same `pagination` block (`next_cursor` / `has_more` / `page_size`): no per-platform special cases.** The `Style` and `Page size` columns are informational only; you always send `cursor`.

Apple App Store [#apple-app-store]

| Endpoint                                                                                             | Path                                    | Send back as | Style  | Page size |
| ---------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------ | ------ | --------- |
| [Search the Apple App Store listings database (paginated)](/platforms/app_store/app-listings-search) | `GET /v1/app_store/app-listings-search` | `cursor`     | cursor | `limit`   |

Content Analysis [#content-analysis]

| Endpoint                                                                                           | Path                              | Send back as | Style  | Page size |
| -------------------------------------------------------------------------------------------------- | --------------------------------- | ------------ | ------ | --------- |
| [Search web citations of a keyword with per-mention sentiment](/platforms/content_analysis/search) | `GET /v1/content_analysis/search` | `cursor`     | cursor | `limit`   |

Facebook [#facebook]

| Endpoint                                                                                                                               | Path                                     | Send back as | Style  | Page size |
| -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------ | ------ | --------- |
| [List Facebook Ad Library company ads](/platforms/facebook/adlibrary-company-ads)                                                      | `GET /v1/facebook/adlibrary/company/ads` | `cursor`     | cursor | —         |
| [Search Facebook Ad Library](/platforms/facebook/adlibrary-search-ads)                                                                 | `GET /v1/facebook/adlibrary/search/ads`  | `cursor`     | cursor | —         |
| [List Facebook events for a city](/platforms/facebook/events)                                                                          | `GET /v1/facebook/events`                | `cursor`     | cursor | —         |
| [Search Facebook events by keyword](/platforms/facebook/events-search)                                                                 | `GET /v1/facebook/events/search`         | `cursor`     | cursor | —         |
| [Search Facebook Marketplace listings](/platforms/facebook/marketplace-search)                                                         | `GET /v1/facebook/marketplace/search`    | `cursor`     | cursor | `count`   |
| [List replies to a Facebook post comment](/platforms/facebook/post-comment-replies)                                                    | `GET /v1/facebook/post/comment/replies`  | `cursor`     | cursor | —         |
| [List Facebook post comments](/platforms/facebook/post-comments)                                                                       | `GET /v1/facebook/post/comments`         | `cursor`     | cursor | —         |
| [List a Facebook page's events](/platforms/facebook/profile-events)                                                                    | `GET /v1/facebook/profile/events`        | `cursor`     | cursor | —         |
| [Facebook profile, recent posts, and computed analytics in one call.](/platforms/facebook/profile-full)                                | `GET /v1/facebook/profile/full`          | `cursor`     | cursor | —         |
| [List Facebook profile photos](/platforms/facebook/profile-photos)                                                                     | `GET /v1/facebook/profile/photos`        | `cursor`     | cursor | —         |
| [List Facebook page posts](/platforms/facebook/profile-posts)                                                                          | `GET /v1/facebook/profile/posts`         | `cursor`     | cursor | —         |
| [List Facebook profile reels](/platforms/facebook/profile-reels)                                                                       | `GET /v1/facebook/profile/reels`         | `cursor`     | cursor | —         |
| [Facebook profile reels with exact views, likes, comments, and shares merged in, in one call.](/platforms/facebook/profile-reels-full) | `GET /v1/facebook/profile/reels/full`    | `cursor`     | cursor | `limit`   |

GitHub [#github]

| Endpoint                                                                     | Path                            | Send back as | Style | Page size  |
| ---------------------------------------------------------------------------- | ------------------------------- | ------------ | ----- | ---------- |
| [Get comments on an issue or pull request](/platforms/github/issue-comments) | `GET /v1/github/issue/comments` | `cursor`     | page  | `per_page` |
| [List a GitHub user's repositories](/platforms/github/profile-repos)         | `GET /v1/github/profile/repos`  | `cursor`     | page  | `per_page` |
| [List a repository's issues (and PRs)](/platforms/github/repo-issues)        | `GET /v1/github/repo/issues`    | `cursor`     | page  | `per_page` |
| [List a repository's releases](/platforms/github/repo-releases)              | `GET /v1/github/repo/releases`  | `cursor`     | page  | `per_page` |
| [Search GitHub issues and pull requests](/platforms/github/search)           | `GET /v1/github/search`         | `cursor`     | page  | `per_page` |

Google [#google]

| Endpoint                                                    | Path                         | Send back as | Style  | Page size |
| ----------------------------------------------------------- | ---------------------------- | ------------ | ------ | --------- |
| [List Google ads by company](/platforms/google/company-ads) | `GET /v1/google/company/ads` | `cursor`     | cursor | —         |
| [Google web search](/platforms/google/search)               | `GET /v1/google/search`      | `cursor`     | page   | —         |

Google Play [#google-play]

| Endpoint                                                                                           | Path                                      | Send back as | Style  | Page size |
| -------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------------ | ------ | --------- |
| [Search the Google Play listings database (paginated)](/platforms/google_play/app-listings-search) | `GET /v1/google_play/app-listings-search` | `cursor`     | cursor | `limit`   |

Hacker News [#hacker-news]

| Endpoint                                           | Path                        | Send back as | Style | Page size |
| -------------------------------------------------- | --------------------------- | ------------ | ----- | --------- |
| [Search Hacker News](/platforms/hackernews/search) | `GET /v1/hackernews/search` | `cursor`     | page  | —         |

Instagram [#instagram]

| Endpoint                                                                                                                                        | Path                                   | Send back as | Style  | Page size |
| ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------ | ------ | --------- |
| [List Instagram reels using an audio track](/platforms/instagram/audio-reels)                                                                   | `GET /v1/instagram/audio/reels`        | `cursor`     | cursor | —         |
| [List Instagram followers](/platforms/instagram/followers)                                                                                      | `GET /v1/instagram/followers`          | `cursor`     | cursor | —         |
| [List Instagram following](/platforms/instagram/following)                                                                                      | `GET /v1/instagram/following`          | `cursor`     | cursor | —         |
| [List recent posts at an Instagram location](/platforms/instagram/location-posts)                                                               | `GET /v1/instagram/location/posts`     | `cursor`     | cursor | —         |
| [List Instagram post comments](/platforms/instagram/post-comments)                                                                              | `GET /v1/instagram/post/comments`      | `cursor`     | cursor | —         |
| [Instagram profile, recent posts, and computed analytics in one call.](/platforms/instagram/profile-full)                                       | `GET /v1/instagram/profile/full`       | `cursor`     | cursor | —         |
| [List Instagram user posts](/platforms/instagram/profile-posts)                                                                                 | `GET /v1/instagram/profile/posts`      | `cursor`     | cursor | —         |
| [Instagram posts with views, likes, comments, and per-post share counts where available, in one call.](/platforms/instagram/profile-posts-full) | `GET /v1/instagram/profile/posts/full` | `cursor`     | cursor | `limit`   |
| [List Instagram user reels](/platforms/instagram/profile-reels)                                                                                 | `GET /v1/instagram/profile/reels`      | `cursor`     | cursor | —         |
| [Instagram reels with views, likes, comments, and per-reel share counts where available, in one call.](/platforms/instagram/profile-reels-full) | `GET /v1/instagram/profile/reels/full` | `cursor`     | cursor | `limit`   |
| [Search Instagram posts by hashtag](/platforms/instagram/search-hashtag)                                                                        | `GET /v1/instagram/search/hashtag`     | `cursor`     | cursor | —         |
| [Search Instagram music](/platforms/instagram/search-music)                                                                                     | `GET /v1/instagram/search/music`       | `cursor`     | cursor | —         |
| [Search Instagram profiles by keyword](/platforms/instagram/search-profiles)                                                                    | `GET /v1/instagram/search/profiles`    | `cursor`     | cursor | —         |
| [Search Instagram reels](/platforms/instagram/search-reels)                                                                                     | `GET /v1/instagram/search/reels`       | `cursor`     | page   | —         |
| [List posts an Instagram user is tagged in](/platforms/instagram/tagged)                                                                        | `GET /v1/instagram/tagged`             | `cursor`     | cursor | —         |

Kwai [#kwai]

| Endpoint                                               | Path                      | Send back as | Style  | Page size |
| ------------------------------------------------------ | ------------------------- | ------------ | ------ | --------- |
| [List a Kwai user's posts](/platforms/kwai/user-posts) | `GET /v1/kwai/user/posts` | `cursor`     | cursor | `count`   |

LinkedIn [#linkedin]

| Endpoint                                                                                                        | Path                                           | Send back as | Style  | Page size |
| --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------ | ------ | --------- |
| [Search LinkedIn ads](/platforms/linkedin/ads-search)                                                           | `GET /v1/linkedin/ads/search`                  | `cursor`     | cursor | —         |
| [List a company's job postings](/platforms/linkedin/company-jobs)                                               | `GET /v1/linkedin/company/jobs`                | `cursor`     | page   | —         |
| [List people at a LinkedIn company](/platforms/linkedin/company-people)                                         | `GET /v1/linkedin/company/people`              | `cursor`     | page   | —         |
| [List LinkedIn company posts](/platforms/linkedin/company-posts)                                                | `GET /v1/linkedin/company/posts`               | `cursor`     | page   | —         |
| [List posts in a LinkedIn group](/platforms/linkedin/group-posts)                                               | `GET /v1/linkedin/group/posts`                 | `cursor`     | page   | —         |
| [Get LinkedIn post comments](/platforms/linkedin/post-comments)                                                 | `GET /v1/linkedin/post/comments`               | `cursor`     | page   | —         |
| [List replies to a LinkedIn comment](/platforms/linkedin/post-comments-replies)                                 | `GET /v1/linkedin/post/comments/replies`       | `cursor`     | cursor | —         |
| [List reactors on a LinkedIn post](/platforms/linkedin/post-reactions)                                          | `GET /v1/linkedin/post/reactions`              | `cursor`     | page   | —         |
| [List reposts of a LinkedIn post](/platforms/linkedin/post-reposts)                                             | `GET /v1/linkedin/post/reposts`                | `cursor`     | cursor | —         |
| [List a member's licenses and certifications](/platforms/linkedin/profile-certifications)                       | `GET /v1/linkedin/profile/certifications`      | `cursor`     | page   | —         |
| [List a member's comments](/platforms/linkedin/profile-comments)                                                | `GET /v1/linkedin/profile/comments`            | `cursor`     | cursor | —         |
| [List a member's education history](/platforms/linkedin/profile-educations)                                     | `GET /v1/linkedin/profile/educations`          | `cursor`     | page   | —         |
| [List a member's work experiences](/platforms/linkedin/profile-experiences)                                     | `GET /v1/linkedin/profile/experiences`         | `cursor`     | page   | —         |
| [LinkedIn company profile, recent posts, and computed analytics in one call.](/platforms/linkedin/profile-full) | `GET /v1/linkedin/profile/full`                | `cursor`     | cursor | —         |
| [List a member's honors and awards](/platforms/linkedin/profile-honors)                                         | `GET /v1/linkedin/profile/honors`              | `cursor`     | page   | —         |
| [List a member's image posts](/platforms/linkedin/profile-images)                                               | `GET /v1/linkedin/profile/images`              | `cursor`     | cursor | —         |
| [List companies a member follows](/platforms/linkedin/profile-interests-companies)                              | `GET /v1/linkedin/profile/interests/companies` | `cursor`     | page   | —         |
| [List groups a member follows](/platforms/linkedin/profile-interests-groups)                                    | `GET /v1/linkedin/profile/interests/groups`    | `cursor`     | page   | —         |
| [List a LinkedIn member's posts](/platforms/linkedin/profile-posts)                                             | `GET /v1/linkedin/profile/posts`               | `cursor`     | cursor | —         |
| [List a member's publications](/platforms/linkedin/profile-publications)                                        | `GET /v1/linkedin/profile/publications`        | `cursor`     | page   | —         |
| [List posts a LinkedIn member reacted to](/platforms/linkedin/profile-reactions)                                | `GET /v1/linkedin/profile/reactions`           | `cursor`     | cursor | —         |
| [List recommendations for a member](/platforms/linkedin/profile-recommendations)                                | `GET /v1/linkedin/profile/recommendations`     | `cursor`     | page   | —         |
| [List a member's skills](/platforms/linkedin/profile-skills)                                                    | `GET /v1/linkedin/profile/skills`              | `cursor`     | page   | —         |
| [List a member's video posts](/platforms/linkedin/profile-videos)                                               | `GET /v1/linkedin/profile/videos`              | `cursor`     | cursor | —         |
| [List a member's volunteer experiences](/platforms/linkedin/profile-volunteers)                                 | `GET /v1/linkedin/profile/volunteers`          | `cursor`     | page   | —         |
| [Search LinkedIn jobs](/platforms/linkedin/search-jobs)                                                         | `GET /v1/linkedin/search/jobs`                 | `cursor`     | page   | —         |
| [Search LinkedIn people](/platforms/linkedin/search-people)                                                     | `GET /v1/linkedin/search/people`               | `cursor`     | page   | —         |
| [Search public LinkedIn posts by keyword](/platforms/linkedin/search-posts)                                     | `GET /v1/linkedin/search/posts`                | `cursor`     | page   | —         |
| [Search LinkedIn schools](/platforms/linkedin/search-schools)                                                   | `GET /v1/linkedin/search/schools`              | `cursor`     | page   | —         |

Naver [#naver]

| Endpoint                                                                                            | Path                               | Send back as | Style  | Page size |
| --------------------------------------------------------------------------------------------------- | ---------------------------------- | ------------ | ------ | --------- |
| [Search Naver Blog](/platforms/naver/blog-search)                                                   | `GET /v1/naver/blog/search`        | `cursor`     | offset | `display` |
| [Search Naver Book](/platforms/naver/book-search)                                                   | `GET /v1/naver/book/search`        | `cursor`     | offset | `display` |
| [One query across the Korean internet (6 Naver corpora) + optional digest.](/platforms/naver/brief) | `GET /v1/naver/brief`              | `cursor`     | cursor | `display` |
| [Search Naver Cafe articles](/platforms/naver/cafearticle-search)                                   | `GET /v1/naver/cafearticle/search` | `cursor`     | offset | `display` |
| [Search Naver Academic Documents (전문자료)](/platforms/naver/doc-search)                               | `GET /v1/naver/doc/search`         | `cursor`     | offset | `display` |
| [Search Naver Encyclopedia](/platforms/naver/encyc-search)                                          | `GET /v1/naver/encyc/search`       | `cursor`     | offset | `display` |
| [Search Naver Image](/platforms/naver/image-search)                                                 | `GET /v1/naver/image/search`       | `cursor`     | offset | `display` |
| [Search Naver KnowledgeiN (지식iN)](/platforms/naver/kin-search)                                      | `GET /v1/naver/kin/search`         | `cursor`     | offset | `display` |
| [Search Naver Local (장소 검색)](/platforms/naver/local-search)                                         | `GET /v1/naver/local/search`       | `cursor`     | offset | `display` |
| [Search Naver News](/platforms/naver/news-search)                                                   | `GET /v1/naver/news/search`        | `cursor`     | offset | `display` |
| [Search Naver Shopping](/platforms/naver/shop-search)                                               | `GET /v1/naver/shop/search`        | `cursor`     | offset | `display` |
| [Search Naver Web (웹문서)](/platforms/naver/webkr-search)                                             | `GET /v1/naver/webkr/search`       | `cursor`     | offset | `display` |

Pinterest [#pinterest]

| Endpoint                                             | Path                       | Send back as | Style  | Page size |
| ---------------------------------------------------- | -------------------------- | ------------ | ------ | --------- |
| [Search Pinterest pins](/platforms/pinterest/search) | `GET /v1/pinterest/search` | `cursor`     | cursor | —         |

Prism [#prism]

| Endpoint                                                                                                                                            | Path                              | Send back as | Style  | Page size |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------------ | ------ | --------- |
| [Every comment on a post, replies nested, server-paginated to completion.](/platforms/prism/comments)                                               | `GET /v1/prism/comments`          | `cursor`     | cursor | `limit`   |
| [A Truth Social handle's pulse — profile, recent posts, per-post detail drill, and the news echo, in one call.](/platforms/prism/truthsocial-pulse) | `GET /v1/prism/truthsocial-pulse` | `cursor`     | cursor | —         |
| [One person's public posts across X, Threads, Bluesky, and Truth Social, time-merged.](/platforms/prism/voice)                                      | `GET /v1/prism/voice`             | `cursor`     | cursor | —         |

Reddit [#reddit]

| Endpoint                                                                                                                                          | Path                              | Send back as | Style  | Page size |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------------ | ------ | --------- |
| [Reddit VoC sweep: one keyword → threads across all of Reddit with subreddit attribution and top comments inline.](/platforms/reddit/omni-search) | `GET /v1/reddit/omni-search`      | `cursor`     | cursor | —         |
| [List Reddit post comments](/platforms/reddit/post-comments)                                                                                      | `GET /v1/reddit/post/comments`    | `cursor`     | cursor | —         |
| [Search Reddit posts](/platforms/reddit/search)                                                                                                   | `GET /v1/reddit/search`           | `cursor`     | cursor | —         |
| [List Reddit subreddit posts](/platforms/reddit/subreddit)                                                                                        | `GET /v1/reddit/subreddit`        | `cursor`     | cursor | —         |
| [Search within a subreddit](/platforms/reddit/subreddit-search)                                                                                   | `GET /v1/reddit/subreddit/search` | `cursor`     | cursor | —         |

Rumble [#rumble]

| Endpoint                                                             | Path                            | Send back as | Style  | Page size |
| -------------------------------------------------------------------- | ------------------------------- | ------------ | ------ | --------- |
| [List videos for a Rumble channel](/platforms/rumble/channel-videos) | `GET /v1/rumble/channel/videos` | `cursor`     | cursor | —         |
| [Search Rumble videos](/platforms/rumble/search)                     | `GET /v1/rumble/search`         | `cursor`     | cursor | —         |

Spotify [#spotify]

| Endpoint                                                                 | Path                               | Send back as | Style  | Page size |
| ------------------------------------------------------------------------ | ---------------------------------- | ------------ | ------ | --------- |
| [List a Spotify podcast's episodes](/platforms/spotify/podcast-episodes) | `GET /v1/spotify/podcast/episodes` | `cursor`     | cursor | —         |

TikTok [#tiktok]

| Endpoint                                                                                            | Path                                   | Send back as | Style  | Page size |
| --------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------ | ------ | --------- |
| [List TikTok post comments](/platforms/tiktok/post-comments)                                        | `GET /v1/tiktok/post/comments`         | `cursor`     | cursor | —         |
| [TikTok profile, recent posts, and computed analytics in one call.](/platforms/tiktok/profile-full) | `GET /v1/tiktok/profile/full`          | `cursor`     | cursor | —         |
| [List TikTok user videos](/platforms/tiktok/profile-videos)                                         | `GET /v1/tiktok/profile/videos`        | `cursor`     | cursor | —         |
| [Search TikTok videos by keyword](/platforms/tiktok/search)                                         | `GET /v1/tiktok/search`                | `cursor`     | cursor | —         |
| [Search TikTok by hashtag](/platforms/tiktok/search-hashtag)                                        | `GET /v1/tiktok/search/hashtag`        | `cursor`     | cursor | —         |
| [TikTok top search results](/platforms/tiktok/search-top)                                           | `GET /v1/tiktok/search/top`            | `cursor`     | cursor | —         |
| [Search TikTok users](/platforms/tiktok/search-users)                                               | `GET /v1/tiktok/search/users`          | `cursor`     | cursor | —         |
| [List TikTok videos using a song](/platforms/tiktok/song-videos)                                    | `GET /v1/tiktok/song/videos`           | `cursor`     | cursor | —         |
| [List TikTok user followers](/platforms/tiktok/user-followers)                                      | `GET /v1/tiktok/user/followers`        | `cursor`     | cursor | —         |
| [List TikTok comment replies](/platforms/tiktok/video-comment-replies)                              | `GET /v1/tiktok/video/comment/replies` | `cursor`     | cursor | —         |

TikTok Shop [#tiktok-shop]

| Endpoint                                                                  | Path                               | Send back as | Style  | Page size |
| ------------------------------------------------------------------------- | ---------------------------------- | ------------ | ------ | --------- |
| [Search TikTok Shop products](/platforms/tiktokshop/search)               | `GET /v1/tiktokshop/search`        | `cursor`     | page   | —         |
| [List TikTok user showcase products](/platforms/tiktokshop/user-showcase) | `GET /v1/tiktokshop/user/showcase` | `cursor`     | cursor | —         |

Truth Social [#truth-social]

| Endpoint                                                          | Path                             | Send back as | Style  | Page size |
| ----------------------------------------------------------------- | -------------------------------- | ------------ | ------ | --------- |
| [List Truth Social user posts](/platforms/truthsocial/user-posts) | `GET /v1/truthsocial/user/posts` | `cursor`     | cursor | —         |

Twitter/X [#twitterx]

| Endpoint                                                                                                  | Path                           | Send back as | Style  | Page size |
| --------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------ | ------ | --------- |
| [X (Twitter) profile, recent posts, and computed analytics in one call.](/platforms/twitter/profile-full) | `GET /v1/twitter/profile/full` | `cursor`     | cursor | —         |

Web Scraping [#web-scraping]

| Endpoint                                     | Path                   | Send back as | Style  | Page size |
| -------------------------------------------- | ---------------------- | ------------ | ------ | --------- |
| [List async web jobs](/platforms/web/jobs)   | `GET /v1/web/jobs`     | `cursor`     | cursor | `limit`   |
| [List web monitors](/platforms/web/monitors) | `GET /v1/web/monitors` | `cursor`     | cursor | `limit`   |

YouTube [#youtube]

| Endpoint                                                                                              | Path                                      | Send back as | Style  | Page size |
| ----------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------------ | ------ | --------- |
| [List a YouTube channel's community posts](/platforms/youtube/channel-community-posts)                | `GET /v1/youtube/channel/community-posts` | `cursor`     | cursor | —         |
| [List a YouTube channel's live streams](/platforms/youtube/channel-lives)                             | `GET /v1/youtube/channel/lives`           | `cursor`     | cursor | —         |
| [List a YouTube channel's playlists](/platforms/youtube/channel-playlists)                            | `GET /v1/youtube/channel/playlists`       | `cursor`     | cursor | —         |
| [List YouTube channel shorts](/platforms/youtube/channel-shorts)                                      | `GET /v1/youtube/channel/shorts`          | `cursor`     | cursor | —         |
| [List YouTube channel videos](/platforms/youtube/channel-videos)                                      | `GET /v1/youtube/channel/videos`          | `cursor`     | cursor | —         |
| [Get YouTube playlist](/platforms/youtube/playlist)                                                   | `GET /v1/youtube/playlist`                | `cursor`     | cursor | —         |
| [List the videos in a YouTube playlist](/platforms/youtube/playlist-items)                            | `GET /v1/youtube/playlist/items`          | `cursor`     | cursor | —         |
| [YouTube profile, recent posts, and computed analytics in one call.](/platforms/youtube/profile-full) | `GET /v1/youtube/profile/full`            | `cursor`     | cursor | —         |
| [Search YouTube](/platforms/youtube/search)                                                           | `GET /v1/youtube/search`                  | `cursor`     | cursor | —         |
| [Advanced YouTube video search](/platforms/youtube/search-advanced)                                   | `GET /v1/youtube/search/advanced`         | `cursor`     | cursor | —         |
| [Search YouTube by hashtag](/platforms/youtube/search-hashtag)                                        | `GET /v1/youtube/search/hashtag`          | `cursor`     | cursor | —         |
| [List YouTube comment replies](/platforms/youtube/video-comment-replies)                              | `GET /v1/youtube/video/comment/replies`   | `cursor`     | cursor | —         |
| [List YouTube video comments](/platforms/youtube/video-comments)                                      | `GET /v1/youtube/video/comments`          | `cursor`     | cursor | —         |
| [Get trending YouTube videos](/platforms/youtube/videos-trending)                                     | `GET /v1/youtube/videos/trending`         | `cursor`     | cursor | —         |

See also [#see-also]

* [Response schema → List endpoints](/docs/response-schema#list-endpoints) — the envelope shape in one sentence.
* [Quickstart](/docs/quickstart) — your first request in under a minute.
* [Endpoint pricing](/docs/endpoint-pricing) — every endpoint and what each call costs.
* [Error handling](/docs/errors) — refund rules for stale-cursor errors, and the concurrency limit.
