# Pagination (/docs/pagination) One rule for every list endpoint. Send the next_cursor value back as cursor and stop when has_more is false. Identical on every paginated endpoint, every platform. Every list endpoint on every platform paginates the same way. Learn it once and it works on all 214 paginatable endpoints: TikTok, Instagram, YouTube, Reddit, LinkedIn, Naver, all of them. ## 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 Every list response carries a top-level `pagination` block: ```json title="Response" { "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. **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 **Request page 1** (no cursor): ```bash title="cURL" 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 title="cURL" 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 Identical for every list endpoint on every platform: ```ts title="TypeScript" async function* paginate(path: string, params: Record) { 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 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 title="TypeScript" // Drain every video for a handle, then stop. async function drain(path: string, params: Record) { 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.md)) 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. ## Incremental sync A poller that checks a creator every day only needs the posts published since its last run. Eight creator post lists take two parameters that end the walk where your last poll stopped, so you pay for the pages with new posts and no more: | Platform | Endpoint | | -------- | -------- | | Facebook | `GET /v1/facebook/profile/posts` | | Instagram | `GET /v1/instagram/profile/posts`, `GET /v1/instagram/profile/reels` | | Threads | `GET /v1/threads/user/posts` | | TikTok | `GET /v1/tiktok/profile/videos` | | Twitter/X | `GET /v1/twitter/user/tweets` | | YouTube | `GET /v1/youtube/channel/shorts`, `GET /v1/youtube/channel/videos` | | Parameter | Send | What happens | | --------- | ---- | ------------ | | `stop_at_id` | The `post.id` or `post.url` of the newest post you already hold | The page stops just before that post. That post and every post after it are left off, `next_cursor` is not returned, and `pagination.stopped_at` is `known_id`. If the post is not on this page, the page comes back in full with its cursor, so keep walking. | | `since` | A date (`YYYY-MM-DD`, read as midnight UTC) or an ISO 8601 timestamp | Posts published before it are left off, and the page that reaches one ends the walk with `pagination.stopped_at` set to `since`. A post with no date is kept. | ```bash title="cURL" curl "https://www.socialcrawl.dev/v1/instagram/profile/posts?handle=nasa&stop_at_id=3990495229280545049" \ -H "x-api-key: YOUR_API_KEY" ``` When you send either parameter, the `pagination` block carries one more field: ```json title="Response" "pagination": { "next_cursor": null, "has_more": false, "page_size": 5, "stopped_at": "known_id" } ``` | `stopped_at` | Meaning | | ------------ | ------- | | `known_id` | The walk reached the post you named in `stop_at_id`. | | `since` | The walk reached a post published before `since`. | | `end` | The list ran out before either boundary. | | `null` | This page did not reach a boundary. Send `next_cursor` back as `cursor` and keep walking. | `stopped_at` is absent when you sent neither parameter, and a call without them is unchanged. The one rule still holds: stop when `has_more` is `false`. ### A daily poll Send the same `stop_at_id` (or `since`) on every page of the walk, then keep the newest post you received for the next run: ```ts title="TypeScript" // Fetch only the posts published since the last poll. async function pollNewPosts( path: string, params: Record, newestHeldId: string | null, ) { const fresh: any[] = []; 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); // First run: bound the walk by date. Every later run: by the newest post held. if (newestHeldId) url.searchParams.set("stop_at_id", newestHeldId); else url.searchParams.set("since", "2026-09-01"); if (cursor) url.searchParams.set("cursor", cursor); const res = await fetch(url, { headers: { "x-api-key": process.env.SOCIALCRAWL_KEY! }, }); const json = await res.json(); fresh.push(...json.data.items); cursor = json.pagination.next_cursor; // null once the walk has stopped } while (cursor); // Pinned posts sit out of date order, so never keep one as the newest. const newest = fresh.find((row) => row.post.flags?.pinned !== true); return { fresh, newestHeldId: newest?.post.id ?? newestHeldId }; } // savedId is the newestHeldId you stored after the previous run, or null. const result = await pollNewPosts("tiktok/profile/videos", { handle: "mrbeast" }, savedId); ``` Three details decide whether a poll is correct and cheap: - **Pinned posts never end the walk.** A profile opens with the posts its owner pinned, and those can be years old. A pinned post never counts as the boundary. If it is older than `since`, or it is the post you named in `stop_at_id`, it is left off the page and the walk goes on. - **The price does not change.** Each page costs what a page of that endpoint costs, 1 credit on all eight. A daily poll that finds your newest post on page 1 pays for page 1 and stops there. A `since` that is not a date, or a `stop_at_id` longer than 512 characters, is a `400 INVALID_REQUEST` and costs nothing. - **YouTube needs newest first.** A stop only means something on a list in date order, so either parameter sets `sort=latest` on `channel/videos` and `sort=newest` on `channel/shorts` when you leave `sort` out, and `sort=popular` with either is a `400`. YouTube list dates are estimated from labels such as "4 months ago", so use `stop_at_id` there for an exact stop. ## Date window on every list Every list whose rows carry a date takes `since` and `until`: posts, comments, replies, reviews and news articles, on every platform. The window is applied to each page before it is returned, so every dated row you receive is inside it. | Parameter | Send | What happens | | --------- | ---- | ------------ | | `since` | A date (`YYYY-MM-DD`, read as midnight UTC) or an ISO 8601 timestamp | Rows published before it are left off the page. | | `until` | A date (`YYYY-MM-DD`, the whole UTC day is included) or an ISO 8601 timestamp | Rows published after it are left off the page. | ```bash title="cURL" curl "https://www.socialcrawl.dev/v1/youtube/video/comments?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ&since=2025-10-07" \ -H "x-api-key: YOUR_API_KEY" ``` How far a walk goes depends on whether the list is in date order: - **Lists in date order stop at `since`.** On these lists `since` sets the newest-first sort when you leave it out, and the page that reaches an older row ends the walk with `pagination.stopped_at` set to `since`, exactly like [Incremental sync](#incremental-sync). Another sort value with `since` is a `400`. They are the creator feeds above and `app_store/app-reviews` (`sort_by=most_recent`), `google_play/app-reviews` (`sort_by=newest`), `instagram/post/comments` (`sort=recent`), `linkedin/company/posts` (`sort_by=recent`), `linkedin/post/comments` (`sort_order=recent`), `naver/news/search` (`sort=date`), `reddit/profile/posts` (`sort=new`), `reddit/search` (`sort=new`), `reddit/search/comments` (`sort=new`), `reddit/subreddit` (`sort=new`), `tiktok/post/comments` (`sort=recent`), `tripadvisor/reviews` (`sort_by=most_recent`), `trustpilot/reviews` (`sort=recency`), `twitter/search/tweets` (`sort=latest`), `youtube/video/comments` (`order=newest`). - **Every other list filters each page and keeps its cursor.** Comments in relevance order, keyword search and most reviews are not in date order, so an old row on page 1 says nothing about page 2. Keep following `next_cursor`; a page can come back with no rows and a cursor when every row on it was outside the window. - **The price does not change.** Each page costs what a page of that endpoint costs, whether or not rows were left off. A row with no date is kept. A `since` or `until` that is not a date, or a `since` later than `until`, is a `400 INVALID_REQUEST` and costs nothing. - **Other spellings are read as the window.** `published_after`, `start_date`, `from_date` and `date_from` are applied as `since`, and `published_before`, `end_date`, `to_date` and `date_to` as `until`, on any list that does not take them under its own name. A named window (`publish_time` or `date_posted` set to `yesterday`, `this-week`, `this-month`, `last-3-months` or `last-6-months`) and a day count (`max_age_days=730`) become a `since` that far back. A list that has its own date filter keeps it: `youtube/search/advanced` still takes `published_after`, and Threads search still takes `start_date`. - **A list whose rows carry no date refuses a date.** Profile lists, product lists and suggestions return `400 INVALID_REQUEST` with `error.details.reason` set to `unsupported_date_filter`, before any credit is charged, so a date key is never silently ignored. ## 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 If you pass a cursor the upstream rejects (expired, hand-edited, copied across endpoints), you'll get a `502 UPSTREAM_ERROR` or `400 INVALID_REQUEST` envelope. **Credits are refunded** on upstream errors (see [Credits → When are credits refunded?](/docs/credits.md#when-are-credits-refunded)). Start over with no cursor. ## Three kinds of `limit` `limit` means one of three different things depending on the endpoint, and the difference changes both how many requests you make and what you pay. The **`limit` behaviour** column in the tables below tells you which one you have. **Page size**: caps a single upstream page. You still paginate yourself: one request returns one page, and you send `cursor` back for the next. The API maps `limit` to the upstream's native name (Naver `display`, GitHub `per_page`, and so on), capped at that endpoint's maximum. This is the common case. **Collect-until-N**: the endpoint paginates *for you*. It walks upstream pages server-side until it has `limit` unique items (or the source runs dry), de-duplicates as it goes, and returns them in a single response. You are billed per page or window actually consumed, and the unused budget is refunded. This is how you get more than one window's worth of results in one call. These endpoints collect until N: | Endpoint | Max `limit` | What one call costs | | -------- | ----------- | ------------------- | | `GET /v1/facebook/profile/reels/full` | 50 | `limit` (1-50) walks upstream pages server-side until that many reels are collected, billing per page of 10 consumed (5 credits each, 5-25 total). It is not a page size. | | `GET /v1/instagram/profile/posts/full` | 50 | `limit` (1-50) walks upstream pages server-side until that many items are collected, billing per page of ~12 consumed (5 credits each, 5-25 total). It is not a page size. | | `GET /v1/instagram/profile/reels/full` | 50 | `limit` (1-50) walks upstream pages server-side until that many items are collected, billing per page of ~12 consumed (5 credits each, 5-25 total). It is not a page size. | | `GET /v1/threads/search` | 100 | `limit` (1-100) walks successive result windows server-side, de-duplicating posts as it goes, and bills 1 credit per window consumed with the unused window budget refunded. It is not a page size. | **Row cap**: on a lane that can fill its own rows with `include`, `limit` takes the top N rows of the page the search returned and caps the extra credits the join can spend with them, so `limit=5&include=…` holds the page price plus 5. It is applied after the page arrives and does not change the page the upstream served, so the cursor still advances past the whole page: rows beyond N are not returned by the next page either. Use it to buy a cheaper join, not to walk a list in smaller steps. An `n/a` in the column means no `limit` control at all: to get fewer items, slice client-side; to get more, paginate another page. > Two things that are **not** `limit`: `/v1/prism/comments` takes both `max` and `limit`: `max` bounds how many pages it scans (and is what you pay for), while `limit` only caps how many of the scanned comments come back, so it never changes the price. And `pagination.page_size` in the response is a *report* of what arrived, not a control. ## Every paginatable endpoint 214 endpoints paginate today (127 cursor-based, 69 page-based, 18 offset-based). **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` column is informational only; you always send `cursor`. ### AliExpress | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get similar AliExpress products](/platforms/aliexpress/product-similar) | `GET /v1/aliexpress/product/similar` | `cursor` | page | n/a | | [Get AliExpress product reviews](/platforms/aliexpress/reviews) | `GET /v1/aliexpress/reviews` | `cursor` | page | n/a | | [Search AliExpress products](/platforms/aliexpress/search) | `GET /v1/aliexpress/search` | `cursor` | page | n/a | | [List hot AliExpress products](/platforms/aliexpress/search-hot) | `GET /v1/aliexpress/search/hot` | `cursor` | page | n/a | | [List AliExpress products in a featured promotion](/platforms/aliexpress/search-promo) | `GET /v1/aliexpress/search/promo` | `cursor` | page | n/a | ### Amazon | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get Amazon Best Sellers in a category](/platforms/amazon/best-sellers) | `GET /v1/amazon/best-sellers` | `cursor` | page | n/a | | [Search Amazon products by keyword](/platforms/amazon/product-search) | `GET /v1/amazon/product-search` | `cursor` | page | n/a | ### Apple App Store | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search the Apple App Store listings database (paginated)](/platforms/app_store/app-listings-search) | `GET /v1/app_store/app-listings-search` | `cursor` | cursor | page size (`limit`) | ### Content Analysis | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search web citations of a keyword with per-mention sentiment](/platforms/content_analysis/search) | `GET /v1/content_analysis/search` | `cursor` | cursor | page size (`limit`) | ### Douyin | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get replies to a Douyin comment](/platforms/douyin/comment-replies) | `GET /v1/douyin/comment/replies` | `cursor` | cursor | page size (`limit`) | | [Search Douyin creators](/platforms/douyin/search-users) | `GET /v1/douyin/search/users` | `cursor` | cursor | page size (`limit`) | ### eBay | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search eBay listings](/platforms/ebay/search) | `GET /v1/ebay/search` | `cursor` | page | n/a | ### Economy | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search US federal contract awards](/platforms/economy/government-contracts) | `GET /v1/economy/government-contracts` | `cursor` | page | page size (`limit`) | ### Etsy | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List products in an Etsy shop](/platforms/etsy/shop-products) | `GET /v1/etsy/shop/products` | `cursor` | page | page size (`limit`) | ### Facebook | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List Facebook Ad Library company ads](/platforms/facebook/adlibrary-company-ads) | `GET /v1/facebook/adlibrary/company/ads` | `cursor` | cursor | n/a | | [Search Facebook Ad Library](/platforms/facebook/adlibrary-search-ads) | `GET /v1/facebook/adlibrary/search/ads` | `cursor` | cursor | n/a | | [List Facebook events for a city](/platforms/facebook/events) | `GET /v1/facebook/events` | `cursor` | cursor | n/a | | [Search Facebook events by keyword](/platforms/facebook/events-search) | `GET /v1/facebook/events/search` | `cursor` | cursor | n/a | | [List Facebook group posts](/platforms/facebook/group-posts) | `GET /v1/facebook/group/posts` | `cursor` | cursor | n/a | | [Search Facebook Marketplace listings](/platforms/facebook/marketplace-search) | `GET /v1/facebook/marketplace/search` | `cursor` | cursor | page size (`count`) | | [List replies to a Facebook post comment](/platforms/facebook/post-comment-replies) | `GET /v1/facebook/post/comment/replies` | `cursor` | cursor | n/a | | [List Facebook post comments](/platforms/facebook/post-comments) | `GET /v1/facebook/post/comments` | `cursor` | cursor | n/a | | [List a Facebook page's events](/platforms/facebook/profile-events) | `GET /v1/facebook/profile/events` | `cursor` | cursor | n/a | | [Facebook profile, recent posts, and computed analytics in one call.](/platforms/facebook/profile-full) | `GET /v1/facebook/profile/full` | `cursor` | cursor | n/a | | [List Facebook profile photos](/platforms/facebook/profile-photos) | `GET /v1/facebook/profile/photos` | `cursor` | cursor | n/a | | [List Facebook page posts](/platforms/facebook/profile-posts) | `GET /v1/facebook/profile/posts` | `cursor` | cursor | n/a | | [List Facebook profile reels](/platforms/facebook/profile-reels) | `GET /v1/facebook/profile/reels` | `cursor` | cursor | n/a | | [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 | collect-until-N (max 50) | | [Search Facebook groups by keyword](/platforms/facebook/search-groups) | `GET /v1/facebook/search/groups` | `cursor` | page | n/a | | [Search Facebook pages by keyword](/platforms/facebook/search-pages) | `GET /v1/facebook/search/pages` | `cursor` | cursor | n/a | | [Search Facebook people by keyword](/platforms/facebook/search-people) | `GET /v1/facebook/search/people` | `cursor` | cursor | n/a | | [Search Facebook posts by keyword](/platforms/facebook/search-posts) | `GET /v1/facebook/search/posts` | `cursor` | cursor | n/a | | [Search Facebook videos by keyword](/platforms/facebook/search-videos) | `GET /v1/facebook/search/videos` | `cursor` | cursor | n/a | ### G2 | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List products in a G2 category](/platforms/g2/category) | `GET /v1/g2/category` | `cursor` | page | n/a | | [List G2 product URLs](/platforms/g2/product-index) | `GET /v1/g2/product-index` | `cursor` | page | n/a | | [Get G2 reviews for a product](/platforms/g2/reviews) | `GET /v1/g2/reviews` | `cursor` | page | n/a | | [List products for a G2 seller](/platforms/g2/seller-products) | `GET /v1/g2/seller/products` | `cursor` | page | n/a | ### GitHub | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get comments on an issue or pull request](/platforms/github/issue-comments) | `GET /v1/github/issue/comments` | `cursor` | page | page size (`per_page`) | | [List a GitHub user's repositories](/platforms/github/profile-repos) | `GET /v1/github/profile/repos` | `cursor` | page | page size (`per_page`) | | [List a repository's issues (and PRs)](/platforms/github/repo-issues) | `GET /v1/github/repo/issues` | `cursor` | page | page size (`per_page`) | | [List a repository's releases](/platforms/github/repo-releases) | `GET /v1/github/repo/releases` | `cursor` | page | page size (`per_page`) | | [Search GitHub issues and pull requests](/platforms/github/search) | `GET /v1/github/search` | `cursor` | page | page size (`per_page`) | ### Google | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List Google ads by company](/platforms/google/company-ads) | `GET /v1/google/company/ads` | `cursor` | cursor | n/a | | [Google web search](/platforms/google/search) | `GET /v1/google/search` | `cursor` | page | n/a | ### Google Play | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search the Google Play listings database (paginated)](/platforms/google_play/app-listings-search) | `GET /v1/google_play/app-listings-search` | `cursor` | cursor | page size (`limit`) | ### Gumtree | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search Gumtree UK listings](/platforms/gumtree/search) | `GET /v1/gumtree/search` | `cursor` | page | n/a | | [List a Gumtree seller's active ads](/platforms/gumtree/seller-listings) | `GET /v1/gumtree/seller/listings` | `cursor` | page | n/a | ### H&M | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search H&M products by keyword](/platforms/hm/search) | `GET /v1/hm/search` | `cursor` | page | page size (`limit`) | ### Hacker News | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search Hacker News](/platforms/hackernews/search) | `GET /v1/hackernews/search` | `cursor` | page | n/a | ### Home Depot | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search Home Depot products by keyword](/platforms/home_depot/search) | `GET /v1/home_depot/search` | `cursor` | page | n/a | ### Instagram | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List Instagram reels using an audio track](/platforms/instagram/audio-reels) | `GET /v1/instagram/audio/reels` | `cursor` | cursor | n/a | | [List Instagram followers](/platforms/instagram/followers) | `GET /v1/instagram/followers` | `cursor` | cursor | n/a | | [List Instagram following](/platforms/instagram/following) | `GET /v1/instagram/following` | `cursor` | cursor | n/a | | [List recent posts at an Instagram location](/platforms/instagram/location-posts) | `GET /v1/instagram/location/posts` | `cursor` | cursor | n/a | | [List replies under an Instagram comment](/platforms/instagram/post-comment-replies) | `GET /v1/instagram/post/comment/replies` | `cursor` | cursor | n/a | | [List Instagram post comments](/platforms/instagram/post-comments) | `GET /v1/instagram/post/comments` | `cursor` | cursor | n/a | | [Instagram profile, recent posts, and computed analytics in one call.](/platforms/instagram/profile-full) | `GET /v1/instagram/profile/full` | `cursor` | cursor | n/a | | [List Instagram user posts](/platforms/instagram/profile-posts) | `GET /v1/instagram/profile/posts` | `cursor` | cursor | n/a | | [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 | collect-until-N (max 50) | | [List Instagram user reels](/platforms/instagram/profile-reels) | `GET /v1/instagram/profile/reels` | `cursor` | cursor | n/a | | [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 | collect-until-N (max 50) | | [Search Instagram posts by hashtag](/platforms/instagram/search-hashtag) | `GET /v1/instagram/search/hashtag` | `cursor` | cursor | n/a | | [Search Instagram music](/platforms/instagram/search-music) | `GET /v1/instagram/search/music` | `cursor` | cursor | n/a | | [Search popular Instagram posts](/platforms/instagram/search-popular) | `GET /v1/instagram/search/popular` | `cursor` | cursor | row cap (`limit`, top N of the page) | | [Search Instagram profiles by keyword](/platforms/instagram/search-profiles) | `GET /v1/instagram/search/profiles` | `cursor` | cursor | row cap (`limit`, top N of the page) | | [Search Instagram reels](/platforms/instagram/search-reels) | `GET /v1/instagram/search/reels` | `cursor` | page | n/a | | [List posts an Instagram user is tagged in](/platforms/instagram/tagged) | `GET /v1/instagram/tagged` | `cursor` | cursor | n/a | ### Jobs | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search Bing job listings](/platforms/jobs/bing-search) | `GET /v1/jobs/bing/search` | `cursor` | cursor | n/a | | [Search Indeed job listings](/platforms/jobs/indeed-search) | `GET /v1/jobs/indeed/search` | `cursor` | cursor | n/a | | [Search LinkedIn job listings](/platforms/jobs/linkedin-search) | `GET /v1/jobs/linkedin/search` | `cursor` | cursor | n/a | | [Search Xing job listings](/platforms/jobs/xing-search) | `GET /v1/jobs/xing/search` | `cursor` | cursor | n/a | ### Klarna | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Browse Klarna products in a category](/platforms/klarna/category) | `GET /v1/klarna/category` | `cursor` | offset | n/a | | [Get Klarna user reviews for a product](/platforms/klarna/reviews) | `GET /v1/klarna/reviews` | `cursor` | cursor | page size (`limit`) | | [Get Klarna professional reviews for a product](/platforms/klarna/reviews-pro) | `GET /v1/klarna/reviews/pro` | `cursor` | cursor | page size (`limit`) | | [List products from a Klarna store](/platforms/klarna/store-products) | `GET /v1/klarna/store/products` | `cursor` | offset | n/a | | [List Klarna shopping stores](/platforms/klarna/stores) | `GET /v1/klarna/stores` | `cursor` | offset | n/a | ### Kohl's | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get Kohl's product questions and answers](/platforms/kohls/questions) | `GET /v1/kohls/questions` | `cursor` | page | page size (`limit`) | | [Get Kohl's product reviews](/platforms/kohls/reviews) | `GET /v1/kohls/reviews` | `cursor` | page | page size (`limit`) | | [Search Kohl's products by keyword](/platforms/kohls/search) | `GET /v1/kohls/search` | `cursor` | page | page size (`limit`) | ### Kwai | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List a Kwai user's posts](/platforms/kwai/user-posts) | `GET /v1/kwai/user/posts` | `cursor` | cursor | page size (`count`) | ### LinkedIn | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search LinkedIn ads](/platforms/linkedin/ads-search) | `GET /v1/linkedin/ads/search` | `cursor` | cursor | n/a | | [List comments on a LinkedIn Pulse article](/platforms/linkedin/article-comments) | `GET /v1/linkedin/article/comments` | `cursor` | page | n/a | | [List reactors on a LinkedIn Pulse article](/platforms/linkedin/article-reactions) | `GET /v1/linkedin/article/reactions` | `cursor` | page | n/a | | [List a company's job postings](/platforms/linkedin/company-jobs) | `GET /v1/linkedin/company/jobs` | `cursor` | page | n/a | | [List people at a LinkedIn company](/platforms/linkedin/company-people) | `GET /v1/linkedin/company/people` | `cursor` | page | row cap (`limit`, top N of the page) | | [List LinkedIn company posts](/platforms/linkedin/company-posts) | `GET /v1/linkedin/company/posts` | `cursor` | page | n/a | | [List posts in a LinkedIn group](/platforms/linkedin/group-posts) | `GET /v1/linkedin/group/posts` | `cursor` | page | n/a | | [Get LinkedIn post comments](/platforms/linkedin/post-comments) | `GET /v1/linkedin/post/comments` | `cursor` | page | n/a | | [List replies to a LinkedIn comment](/platforms/linkedin/post-comments-replies) | `GET /v1/linkedin/post/comments/replies` | `cursor` | cursor | n/a | | [List reactors on a LinkedIn post](/platforms/linkedin/post-reactions) | `GET /v1/linkedin/post/reactions` | `cursor` | page | row cap (`limit`, top N of the page) | | [List reposts of a LinkedIn post](/platforms/linkedin/post-reposts) | `GET /v1/linkedin/post/reposts` | `cursor` | cursor | n/a | | [List Pulse articles a LinkedIn member published](/platforms/linkedin/profile-articles) | `GET /v1/linkedin/profile/articles` | `cursor` | page | n/a | | [List a member's licenses and certifications](/platforms/linkedin/profile-certifications) | `GET /v1/linkedin/profile/certifications` | `cursor` | page | n/a | | [List a member's education history](/platforms/linkedin/profile-educations) | `GET /v1/linkedin/profile/educations` | `cursor` | page | n/a | | [List a member's work experiences](/platforms/linkedin/profile-experiences) | `GET /v1/linkedin/profile/experiences` | `cursor` | page | n/a | | [LinkedIn company profile, recent posts, and computed analytics in one call. Company pages only; a member's profile is `/v1/linkedin/profile/all`.](/platforms/linkedin/profile-full) | `GET /v1/linkedin/profile/full` | `cursor` | cursor | n/a | | [List a member's honors and awards](/platforms/linkedin/profile-honors) | `GET /v1/linkedin/profile/honors` | `cursor` | page | n/a | | [List companies a member follows](/platforms/linkedin/profile-interests-companies) | `GET /v1/linkedin/profile/interests/companies` | `cursor` | page | n/a | | [List groups a member follows](/platforms/linkedin/profile-interests-groups) | `GET /v1/linkedin/profile/interests/groups` | `cursor` | page | n/a | | [List newsletters a LinkedIn member follows](/platforms/linkedin/profile-interests-newsletters) | `GET /v1/linkedin/profile/interests/newsletters` | `cursor` | page | n/a | | [List schools a LinkedIn member follows](/platforms/linkedin/profile-interests-schools) | `GET /v1/linkedin/profile/interests/schools` | `cursor` | page | n/a | | [Walk a LinkedIn member's COMPLETE post history, 100 posts a page, with exact publish times and share counts the other lanes cannot return. Metered: 5 credits per post returned, so try the cheaper /v1/linkedin/profile/posts first](/platforms/linkedin/profile-posts-archive) | `GET /v1/linkedin/profile/posts/archive` | `cursor` | cursor | page size (`limit`) | | [List a member's publications](/platforms/linkedin/profile-publications) | `GET /v1/linkedin/profile/publications` | `cursor` | page | n/a | | [List recommendations for a member](/platforms/linkedin/profile-recommendations) | `GET /v1/linkedin/profile/recommendations` | `cursor` | page | n/a | | [List a member's skills](/platforms/linkedin/profile-skills) | `GET /v1/linkedin/profile/skills` | `cursor` | page | n/a | | [List a member's volunteer experiences](/platforms/linkedin/profile-volunteers) | `GET /v1/linkedin/profile/volunteers` | `cursor` | page | n/a | | [Search LinkedIn company pages](/platforms/linkedin/search-companies) | `GET /v1/linkedin/search/companies` | `cursor` | page | n/a | | [Search LinkedIn jobs](/platforms/linkedin/search-jobs) | `GET /v1/linkedin/search/jobs` | `cursor` | page | n/a | | [Search LinkedIn people](/platforms/linkedin/search-people) | `GET /v1/linkedin/search/people` | `cursor` | page | row cap (`limit`, top N of the page) | | [Search public LinkedIn posts by keyword](/platforms/linkedin/search-posts) | `GET /v1/linkedin/search/posts` | `cursor` | page | page size (`limit`) | | [Search LinkedIn schools](/platforms/linkedin/search-schools) | `GET /v1/linkedin/search/schools` | `cursor` | page | n/a | ### Naver | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search Naver Blog](/platforms/naver/blog-search) | `GET /v1/naver/blog/search` | `cursor` | offset | page size (`display`) | | [One query across the Korean internet (5 Naver corpora) + optional digest.](/platforms/naver/brief) | `GET /v1/naver/brief` | `cursor` | cursor | page size (`display`) | | [Search Naver Cafe articles](/platforms/naver/cafearticle-search) | `GET /v1/naver/cafearticle/search` | `cursor` | offset | page size (`display`) | | [Search Naver Encyclopedia](/platforms/naver/encyc-search) | `GET /v1/naver/encyc/search` | `cursor` | offset | page size (`display`) | | [Search Naver Image](/platforms/naver/image-search) | `GET /v1/naver/image/search` | `cursor` | offset | page size (`display`) | | [Search Naver KnowledgeiN (지식iN)](/platforms/naver/kin-search) | `GET /v1/naver/kin/search` | `cursor` | offset | page size (`display`) | | [Search Naver News](/platforms/naver/news-search) | `GET /v1/naver/news/search` | `cursor` | offset | page size (`display`) | | [Search Naver Web (웹문서)](/platforms/naver/webkr-search) | `GET /v1/naver/webkr/search` | `cursor` | offset | page size (`display`) | ### Pinterest | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get Pinterest board](/platforms/pinterest/board) | `GET /v1/pinterest/board` | `cursor` | cursor | row cap (`limit`, top N of the page) | | [Search Pinterest pins](/platforms/pinterest/search) | `GET /v1/pinterest/search` | `cursor` | cursor | row cap (`limit`, top N of the page) | ### Prism | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Every comment on a post, replies nested, server-paginated to completion.](/platforms/prism/comments) | `GET /v1/prism/comments` | `cursor` | cursor | page size (`limit`) | | [List the API key's background jobs, newest first.](/platforms/prism/jobs) | `GET /v1/prism/jobs` | `cursor` | cursor | n/a | | Status and results of one background job. | `GET /v1/prism/jobs/{job_id}` | `cursor` | cursor | n/a | | [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 | n/a | | [One person's public posts across X, Threads, Bluesky, and Truth Social, time-merged.](/platforms/prism/voice) | `GET /v1/prism/voice` | `cursor` | cursor | n/a | ### Reddit | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [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 | n/a | | [List Reddit post comments](/platforms/reddit/post-comments) | `GET /v1/reddit/post/comments` | `cursor` | cursor | n/a | | [List a Reddit user's posts](/platforms/reddit/profile-posts) | `GET /v1/reddit/profile/posts` | `cursor` | cursor | n/a | | [Search Reddit posts](/platforms/reddit/search) | `GET /v1/reddit/search` | `cursor` | cursor | n/a | | [Search Reddit comments](/platforms/reddit/search-comments) | `GET /v1/reddit/search/comments` | `cursor` | cursor | n/a | | [Search Reddit image and video posts](/platforms/reddit/search-media) | `GET /v1/reddit/search/media` | `cursor` | cursor | n/a | | [List Reddit subreddit posts](/platforms/reddit/subreddit) | `GET /v1/reddit/subreddit` | `cursor` | cursor | n/a | | [Search within a subreddit](/platforms/reddit/subreddit-search) | `GET /v1/reddit/subreddit/search` | `cursor` | cursor | n/a | | [Find subreddits by topic](/platforms/reddit/subreddits-search) | `GET /v1/reddit/subreddits/search` | `cursor` | cursor | row cap (`limit`, top N of the page) | ### Rumble | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List videos for a Rumble channel](/platforms/rumble/channel-videos) | `GET /v1/rumble/channel/videos` | `cursor` | cursor | n/a | | [Search Rumble videos](/platforms/rumble/search) | `GET /v1/rumble/search` | `cursor` | cursor | n/a | ### Sephora | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List Sephora products for a brand](/platforms/sephora/brand-products) | `GET /v1/sephora/brand/products` | `cursor` | page | n/a | | [Browse Sephora products in a category](/platforms/sephora/category) | `GET /v1/sephora/category` | `cursor` | page | n/a | | [Get Sephora product reviews](/platforms/sephora/reviews) | `GET /v1/sephora/reviews` | `cursor` | page | page size (`limit`) | | [Search Sephora products by keyword](/platforms/sephora/search) | `GET /v1/sephora/search` | `cursor` | page | n/a | ### Snapchat | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List comments on a Snapchat Spotlight](/platforms/snapchat/spotlight-comments) | `GET /v1/snapchat/spotlight/comments` | `cursor` | cursor | n/a | ### Spotify | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List a Spotify podcast's episodes](/platforms/spotify/podcast-episodes) | `GET /v1/spotify/podcast/episodes` | `cursor` | cursor | n/a | ### Target | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Browse Target products in a category](/platforms/target/category) | `GET /v1/target/category` | `cursor` | page | n/a | | [Get Target product reviews](/platforms/target/reviews) | `GET /v1/target/reviews` | `cursor` | page | n/a | ### Telegram | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List Telegram channel posts](/platforms/telegram/profile-posts) | `GET /v1/telegram/profile/posts` | `cursor` | cursor | n/a | ### Threads | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search Threads posts](/platforms/threads/search) | `GET /v1/threads/search` | `cursor` | cursor | collect-until-N (max 100) | ### TikTok | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Search the TikTok Ad Library](/platforms/tiktok/adlibrary-search) | `GET /v1/tiktok/adlibrary/search` | `cursor` | cursor | row cap (`limit`, top N of the page) | | [List videos in a TikTok collection](/platforms/tiktok/collection-videos) | `GET /v1/tiktok/collection/videos` | `cursor` | cursor | n/a | | [List TikTok videos made with an effect](/platforms/tiktok/effect-videos) | `GET /v1/tiktok/effect/videos` | `cursor` | cursor | n/a | | [List TikTok videos tagged at a place](/platforms/tiktok/location-posts) | `GET /v1/tiktok/location/posts` | `cursor` | cursor | n/a | | [List videos in a TikTok playlist](/platforms/tiktok/playlist-videos) | `GET /v1/tiktok/playlist/videos` | `cursor` | cursor | n/a | | [List TikTok post comments](/platforms/tiktok/post-comments) | `GET /v1/tiktok/post/comments` | `cursor` | cursor | n/a | | [TikTok profile, recent posts, and computed analytics in one call.](/platforms/tiktok/profile-full) | `GET /v1/tiktok/profile/full` | `cursor` | cursor | n/a | | [List TikTok user videos](/platforms/tiktok/profile-videos) | `GET /v1/tiktok/profile/videos` | `cursor` | cursor | n/a | | [Search TikTok videos by keyword](/platforms/tiktok/search) | `GET /v1/tiktok/search` | `cursor` | cursor | page size (`limit`) | | [Search TikTok by hashtag](/platforms/tiktok/search-hashtag) | `GET /v1/tiktok/search/hashtag` | `cursor` | cursor | n/a | | [Search TikTok sounds](/platforms/tiktok/search-music) | `GET /v1/tiktok/search/music` | `cursor` | cursor | n/a | | [TikTok top search results](/platforms/tiktok/search-top) | `GET /v1/tiktok/search/top` | `cursor` | cursor | n/a | | [Search TikTok users](/platforms/tiktok/search-users) | `GET /v1/tiktok/search/users` | `cursor` | cursor | row cap (`limit`, top N of the page) | | [List TikTok videos using a song](/platforms/tiktok/song-videos) | `GET /v1/tiktok/song/videos` | `cursor` | cursor | n/a | | [List TikTok user followers](/platforms/tiktok/user-followers) | `GET /v1/tiktok/user/followers` | `cursor` | cursor | n/a | | [List TikTok user following](/platforms/tiktok/user-following) | `GET /v1/tiktok/user/following` | `cursor` | cursor | n/a | | [List the videos a TikTok account has liked](/platforms/tiktok/user-liked) | `GET /v1/tiktok/user/liked` | `cursor` | cursor | n/a | | [List TikTok comment replies](/platforms/tiktok/video-comment-replies) | `GET /v1/tiktok/video/comment/replies` | `cursor` | cursor | n/a | ### TikTok Shop | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List TikTok Shop product reviews](/platforms/tiktokshop/product-reviews) | `GET /v1/tiktokshop/product/reviews` | `cursor` | page | n/a | | [List TikTok Shop products](/platforms/tiktokshop/products) | `GET /v1/tiktokshop/products` | `cursor` | cursor | n/a | | [Search TikTok Shop products](/platforms/tiktokshop/search) | `GET /v1/tiktokshop/search` | `cursor` | page | n/a | | [List TikTok user showcase products](/platforms/tiktokshop/user-showcase) | `GET /v1/tiktokshop/user/showcase` | `cursor` | cursor | n/a | ### Truth Social | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List Truth Social user posts](/platforms/truthsocial/user-posts) | `GET /v1/truthsocial/user/posts` | `cursor` | cursor | n/a | ### Twitter/X | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [X (Twitter) profile, recent posts, and computed analytics in one call.](/platforms/twitter/profile-full) | `GET /v1/twitter/profile/full` | `cursor` | cursor | n/a | | [Search Twitter tweets](/platforms/twitter/search-tweets) | `GET /v1/twitter/search/tweets` | `cursor` | cursor | n/a | | [Search Twitter users](/platforms/twitter/search-users) | `GET /v1/twitter/search/users` | `cursor` | cursor | n/a | | [List Twitter tweet replies](/platforms/twitter/tweet-replies) | `GET /v1/twitter/tweet/replies` | `cursor` | cursor | n/a | | [List Twitter tweet retweeters](/platforms/twitter/tweet-retweeters) | `GET /v1/twitter/tweet/retweeters` | `cursor` | cursor | n/a | | [List Twitter user followers](/platforms/twitter/user-followers) | `GET /v1/twitter/user/followers` | `cursor` | cursor | n/a | | [List Twitter user following](/platforms/twitter/user-following) | `GET /v1/twitter/user/following` | `cursor` | cursor | n/a | | [List Twitter user media tweets](/platforms/twitter/user-media) | `GET /v1/twitter/user/media` | `cursor` | cursor | n/a | | [List Twitter user tweets](/platforms/twitter/user-tweets) | `GET /v1/twitter/user/tweets` | `cursor` | cursor | n/a | ### US Congress Trades | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List members of Congress who have disclosed trades](/platforms/us_congress_trades/members) | `GET /v1/us_congress_trades/members` | `cursor` | offset | page size (`limit`) | | [List trades for one politician](/platforms/us_congress_trades/politician-trades) | `GET /v1/us_congress_trades/politician/trades` | `cursor` | offset | page size (`limit`) | | [List trades from a state's congressional delegation](/platforms/us_congress_trades/state-trades) | `GET /v1/us_congress_trades/state/trades` | `cursor` | offset | page size (`limit`) | | [Politicians ranked by late STOCK Act filings](/platforms/us_congress_trades/stats-reporting-gaps) | `GET /v1/us_congress_trades/stats/reporting-gaps` | `cursor` | offset | page size (`limit`) | | [List congressional trades for a ticker](/platforms/us_congress_trades/ticker-trades) | `GET /v1/us_congress_trades/ticker/trades` | `cursor` | offset | page size (`limit`) | | [Search US Congress stock trades](/platforms/us_congress_trades/trades) | `GET /v1/us_congress_trades/trades` | `cursor` | offset | page size (`limit`) | | [Latest US Congress trades (48 hours)](/platforms/us_congress_trades/trades-latest) | `GET /v1/us_congress_trades/trades/latest` | `cursor` | offset | page size (`limit`) | | [Recent US Congress trades (7 days)](/platforms/us_congress_trades/trades-recent) | `GET /v1/us_congress_trades/trades/recent` | `cursor` | offset | page size (`limit`) | ### Walmart | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Browse Walmart products in a category](/platforms/walmart/category) | `GET /v1/walmart/category` | `cursor` | page | page size (`limit`) | | [Get Walmart product reviews](/platforms/walmart/reviews) | `GET /v1/walmart/reviews` | `cursor` | page | page size (`limit`) | | [Search Walmart products by keyword](/platforms/walmart/search) | `GET /v1/walmart/search` | `cursor` | page | n/a | ### Wayfair | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get Wayfair product reviews](/platforms/wayfair/reviews) | `GET /v1/wayfair/reviews` | `cursor` | page | n/a | | [Search Wayfair products](/platforms/wayfair/search) | `GET /v1/wayfair/search` | `cursor` | page | n/a | ### Web Scraping | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List async web jobs](/platforms/web/jobs) | `GET /v1/web/jobs` | `cursor` | cursor | page size (`limit`) | | [List web monitors](/platforms/web/monitors) | `GET /v1/web/monitors` | `cursor` | cursor | page size (`limit`) | ### Xiaohongshu | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get Xiaohongshu note comments](/platforms/xiaohongshu/post-comments) | `GET /v1/xiaohongshu/post/comments` | `cursor` | cursor | page size (`limit`) | | [List a Xiaohongshu creator's notes](/platforms/xiaohongshu/profile-posts) | `GET /v1/xiaohongshu/profile/posts` | `cursor` | cursor | page size (`limit`) | | [Search Xiaohongshu notes](/platforms/xiaohongshu/search) | `GET /v1/xiaohongshu/search` | `cursor` | cursor | page size (`limit`) | ### Yelp | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [Get Yelp reviews for a business](/platforms/yelp/business-reviews) | `GET /v1/yelp/business/reviews` | `cursor` | cursor | n/a | | [Search Yelp businesses](/platforms/yelp/search) | `GET /v1/yelp/search` | `cursor` | cursor | n/a | | [Search Yelp businesses with full cards](/platforms/yelp/search-full) | `GET /v1/yelp/search/full` | `cursor` | cursor | n/a | ### YouTube | Endpoint | Path | Send back as | Style | `limit` behaviour | | -------- | ---- | ------------ | ----- | ----------------- | | [List a YouTube channel's community posts](/platforms/youtube/channel-community-posts) | `GET /v1/youtube/channel/community-posts` | `cursor` | cursor | n/a | | [List a YouTube channel's live streams](/platforms/youtube/channel-lives) | `GET /v1/youtube/channel/lives` | `cursor` | cursor | n/a | | [List a YouTube channel's playlists](/platforms/youtube/channel-playlists) | `GET /v1/youtube/channel/playlists` | `cursor` | cursor | n/a | | [List YouTube channel shorts](/platforms/youtube/channel-shorts) | `GET /v1/youtube/channel/shorts` | `cursor` | cursor | n/a | | [List YouTube channel videos](/platforms/youtube/channel-videos) | `GET /v1/youtube/channel/videos` | `cursor` | cursor | n/a | | [Get YouTube playlist](/platforms/youtube/playlist) | `GET /v1/youtube/playlist` | `cursor` | cursor | n/a | | [List the videos in a YouTube playlist](/platforms/youtube/playlist-items) | `GET /v1/youtube/playlist/items` | `cursor` | cursor | n/a | | [YouTube profile, recent posts, and computed analytics in one call.](/platforms/youtube/profile-full) | `GET /v1/youtube/profile/full` | `cursor` | cursor | n/a | | [Search YouTube](/platforms/youtube/search) | `GET /v1/youtube/search` | `cursor` | cursor | n/a | | [Advanced YouTube video search](/platforms/youtube/search-advanced) | `GET /v1/youtube/search/advanced` | `cursor` | cursor | n/a | | [Search YouTube by hashtag](/platforms/youtube/search-hashtag) | `GET /v1/youtube/search/hashtag` | `cursor` | cursor | n/a | | [List YouTube comment replies](/platforms/youtube/video-comment-replies) | `GET /v1/youtube/video/comment/replies` | `cursor` | cursor | n/a | | [List YouTube video comments](/platforms/youtube/video-comments) | `GET /v1/youtube/video/comments` | `cursor` | cursor | n/a | | [Get trending YouTube videos](/platforms/youtube/videos-trending) | `GET /v1/youtube/videos/trending` | `cursor` | cursor | n/a | ## See also - [Response schema → List endpoints](/docs/response-schema.md#list-endpoints): the envelope shape in one sentence. - [Quickstart](/docs/quickstart.md): your first request in under a minute. - [Endpoint pricing](/docs/endpoint-pricing.md): every endpoint and what each call costs. - [Error handling](/docs/errors.md): refund rules for stale-cursor errors, and the concurrency limit.