List endpoints return their items a page at a time, and every one of them pages the same way, so you write the loop once.
The response
A successful list response has three keys: data, an array of items in the resource's
shared schema; page, which says whether more items exist and how to get them; and meta, as on
every response:
{
"data": [
"…"
],
"page": {
"has_more": true,
"next_cursor": "…",
"next_cursor_expires_at": "…",
"end_reason": "…"
},
"meta": {
"request_id": "…",
"platform": "…",
"source": "…",
"is_cached": true,
"credits_charged": 0,
"latency_ms": 0,
"fetched_at": "…",
"input": {},
"credits_remaining": 0,
"client_request_id": "…",
"warnings": []
}
}{
"data": [
{
"approximate_fields": [
"metrics.view_count",
"metrics.like_count",
"metrics.share_count"
],
"author": {
"avatar_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=07918010&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
"display_name": "Khabane lame",
"id": "127905465618821121",
"is_verified": true,
"url": "https://www.tiktok.com/@khaby.lame",
"username": "khaby.lame"
},
"coauthors": [],
"duration_ms": 9000,
"hashtags": [
"learnfromkhaby",
"comedy"
],
"id": "7697307919943060767",
"is_nsfw": null,
"is_pinned": null,
"is_sponsored": null,
"language": "en",
"media": [
{
"alt_text": null,
"duration_ms": 9000,
"expires_at": null,
"height": 1280,
"thumbnail_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oQbHQmFfa5VY3NlkEGDAQT00RzqAqBOETlEafj~tplv-tiktokx-origin.image?dr=9636&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"type": "video",
"url": null,
"width": 720
}
],
"mentions": [],
"metrics": {
"comment_count": 7503,
"like_count": 305900,
"quote_count": null,
"repost_count": null,
"save_count": 16282,
"share_count": 32600,
"view_count": 4600000
},
"platform": "tiktok",
"platform_specific": {
"tiktok": {
"author_follower_count": null,
"author_sec_uid": "MS4wLjABAAAAwAg0rSzO65WQfz4RzQgGv2Xdv108BgPXhRrrmNVIHQZ9PO8-flwwRtEppYTS0OjA",
"board": null,
"country_code": null,
"is_ad": false,
"is_ai_generated": true,
"location": null,
"music": {
"author_name": "Khabane lame",
"cover_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=07918010&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
"duration_ms": 9000,
"id": "7697308007327730462",
"is_original": true,
"play_url": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-v-27dcd7-tx2/oEEIAbfkyMVIeCnAjGGKYI9gqpqTImLAAfYo09/?a=1988&bti=ODszNWYuMDE6&&bt=125&ft=GcAInInz7Th~v-RGXq8Zmo&mime_type=audio_mpeg&rc=M2lybXI5cnE4ZTMzaTU8NEBpM2lybXI5cnE4ZTMzaTU8NEBxYG5tMmRrNjZhLS1kMTJzYSNxYG5t…",
"title": "original sound"
}
}
},
"platform_type": "video",
"published_at": "2026-10-16T16:46:21Z",
"text": "I guess is time to retire #learnfromkhaby #comedy 🥊",
"thumbnail_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oQbHQmFfa5VY3NlkEGDAQT00RzqAqBOETlEafj~tplv-tiktokx-origin.image?dr=9636&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"title": null,
"type": "video",
"unknown_fields": [],
"url": "https://www.tiktok.com/@khaby.lame/video/7697307919943060767"
},
{
"approximate_fields": [
"metrics.view_count",
"metrics.like_count",
"metrics.comment_count"
],
"author": {
"avatar_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=07918010&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
"display_name": "Khabane lame",
"id": "127905465618821121",
"is_verified": true,
"url": "https://www.tiktok.com/@khaby.lame",
"username": "khaby.lame"
},
"coauthors": [],
"duration_ms": 30000,
"hashtags": [
"learnfromkhaby",
"comedy"
],
"id": "7694335322922044703",
"is_nsfw": null,
"is_pinned": null,
"is_sponsored": null,
"language": "en",
"media": [
{
"alt_text": null,
"duration_ms": 30000,
"expires_at": null,
"height": 1280,
"thumbnail_url": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/osAHzWAIipBAxVMie5CIDqxK0ArEREAAEKVSfn~tplv-tiktokx-origin.image?dr=9636&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"type": "video",
"url": null,
"width": 720
}
],
"mentions": [],
"metrics": {
"comment_count": 12600,
"like_count": 690100,
"quote_count": null,
"repost_count": null,
"save_count": 40145,
"share_count": 20800,
"view_count": 6900000
},
"platform": "tiktok",
"platform_specific": {
"tiktok": {
"author_follower_count": null,
"author_sec_uid": "MS4wLjABAAAAwAg0rSzO65WQfz4RzQgGv2Xdv108BgPXhRrrmNVIHQZ9PO8-flwwRtEppYTS0OjA",
"board": null,
"country_code": null,
"is_ad": false,
"is_ai_generated": true,
"location": null,
"music": {
"author_name": "Khabane lame",
"cover_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=07918010&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
"duration_ms": 30000,
"id": "7694335437137087262",
"is_original": true,
"play_url": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-v-27dcd7-tx2/o4fHr3qIArT5AEXEiCLVExDGAeqCAIOVe4joPR/?a=1988&bti=ODszNWYuMDE6&&bt=125&ft=GcAInInz7Th~v-RGXq8Zmo&mime_type=audio_mpeg&rc=M3lzeG45cm92ZTMzaTU8NEBpM3lzeG45cm92ZTMzaTU8NEBzNGtiMmRjXjBhLS1kMTJzYSNzNGti…",
"title": "original sound"
}
}
},
"platform_type": "video",
"published_at": "2026-10-08T16:31:16Z",
"text": "Was the ball out, or was it just my imagination? 🤨#learnfromkhaby #comedy",
"thumbnail_url": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/osAHzWAIipBAxVMie5CIDqxK0ArEREAAEKVSfn~tplv-tiktokx-origin.image?dr=9636&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"title": null,
"type": "video",
"unknown_fields": [],
"url": "https://www.tiktok.com/@khaby.lame/video/7694335322922044703"
},
{
"approximate_fields": [
"metrics.view_count",
"metrics.like_count",
"metrics.share_count"
],
"author": {
"avatar_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=07918010&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
"display_name": "Khabane lame",
"id": "127905465618821121",
"is_verified": true,
"url": "https://www.tiktok.com/@khaby.lame",
"username": "khaby.lame"
},
"coauthors": [],
"duration_ms": 34000,
"hashtags": [
"learnfromkhaby",
"comedy"
],
"id": "7691740195418377502",
"is_nsfw": null,
"is_pinned": null,
"is_sponsored": null,
"language": "en",
"media": [
{
"alt_text": null,
"duration_ms": 34000,
"expires_at": null,
"height": 1280,
"thumbnail_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/o0jRDQRMAbfFAlZX8eqGQcARBqerRfAHR7gVSU~tplv-tiktokx-origin.image?dr=9636&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"type": "video",
"url": null,
"width": 720
}
],
"mentions": [],
"metrics": {
"comment_count": 7325,
"like_count": 418500,
"quote_count": null,
"repost_count": null,
"save_count": 20087,
"share_count": 23900,
"view_count": 5000000
},
"platform": "tiktok",
"platform_specific": {
"tiktok": {
"author_follower_count": null,
"author_sec_uid": "MS4wLjABAAAAwAg0rSzO65WQfz4RzQgGv2Xdv108BgPXhRrrmNVIHQZ9PO8-flwwRtEppYTS0OjA",
"board": null,
"country_code": null,
"is_ad": false,
"is_ai_generated": true,
"location": null,
"music": {
"author_name": "Khabane lame",
"cover_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=07918010&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
"duration_ms": 34000,
"id": "7691740326570019615",
"is_original": true,
"play_url": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-v-27dcd7-tx2/ogcDFBGWoU0A8F0eIAAREf8XVjvDqICFsEDJAo/?a=1988&bti=ODszNWYuMDE6&&bt=125&ft=GcAInInz7Th~v-RGXq8Zmo&mime_type=audio_mpeg&rc=M3hmanQ5cjg7ZDMzaTU8NEBpM3hmanQ5cjg7ZDMzaTU8NEBjMGgyMmRzbnNhLS1kMTJzYSNjMGgy…",
"title": "original sound"
}
}
},
"platform_type": "video",
"published_at": "2026-10-01T16:40:54Z",
"text": "Just give me 5 more minutes 😭#learnfromkhaby #comedy",
"thumbnail_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/o0jRDQRMAbfFAlZX8eqGQcARBqerRfAHR7gVSU~tplv-tiktokx-origin.image?dr=9636&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"title": null,
"type": "video",
"unknown_fields": [],
"url": "https://www.tiktok.com/@khaby.lame/video/7691740195418377502"
}
],
"page": {
"has_more": true,
"next_cursor": "c1.EXAMPLE_CURSOR",
"next_cursor_expires_at": "2026-10-26T12:00:00Z",
"end_reason": null
},
"meta": {
"request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
"platform": "tiktok",
"source": "api",
"is_cached": false,
"credits_charged": 1,
"latency_ms": 888,
"fetched_at": "2026-10-25T12:00:00Z",
"input": {
"kind": "profile",
"id": "127905465618821121",
"url": "https://www.tiktok.com/@khaby.lame"
},
"credits_remaining": 9999,
"client_request_id": null,
"warnings": []
}
}Long arrays and strings are shortened for display.
| Field | Type | Description |
|---|---|---|
page.has_more | boolean | True when another page exists; then next_cursor is set. An empty page with has_more true is not the end. |
page.next_cursor | string or null | Pass as cursor, with the same other parameters, to get the next page; null at the end. |
page.next_cursor_expires_at | string (date-time) or null | When next_cursor stops working, RFC 3339 UTC; null at the end. Don't store cursors. |
page.end_reason | string or null | Why there are no more pages; null while has_more is true. end: the list ended, or reached since/until. platform_limit: the platform stops serving further pages although the list goes on. max_pages: SocialTap's cap on pages in one walk. New values may be added. A short or empty page is not the end: only has_more false is. One of end, platform_limit, max_pages |
There are no totals: platforms don't report them reliably, and counting would cost extra requests.
Parameters
Every list endpoint accepts these on top of its own parameters and the common options:
| Parameter | Type | Description |
|---|---|---|
limit | integermin 1 | Items per page, 1 to the endpoint's page size (its default and maximum; larger values are reduced to it). Omit it: every page costs the same, so a smaller limit means more pages to pay for. |
cursor | string | page.next_cursor from the previous response. Send the same other parameters; omit to start from the first page. |
Getting the next page
- Send the first request without
cursor. - If
page.has_moreistrue, send the same request again withcursorset topage.next_cursorfrom the previous response. - Stop when
page.has_moreisfalse.
const items = [];
let cursor = null;
do {
const params = new URLSearchParams({ ...yourParams, ...(cursor ? { cursor: cursor } : {}) });
const res = await fetch(`https://socialtap.dev/v1/<platform>/<endpoint>?${params}`, {
headers: { "x-api-key": process.env.SOCIALTAP_API_KEY },
});
if (!res.ok) throw new Error((await res.json()).error.code);
const body = await res.json();
items.push(...body.data);
cursor = body.page.next_cursor;
} while (cursor);Keep every other parameter the same: only limit and the common options such as max_age
may change between pages.
Every list page with a next page also carries the next request ready to send, in the standard link
header (rel="next"): your request with the cursor filled in. Generic HTTP clients can follow it.
Why a list ended
When page.has_more is false, page.end_reason says why, so fewer items than you expected is
never a mystery:
end: the list really ended, or it reached the time window you asked for withsince/until.platform_limit: the platform stops serving further pages although the list goes on (many platforms cap how far logged-out visitors can scroll). Repeating the walk later will not get further.max_pages: the walk reached SocialTap's cap on pages per list.
Time windows
List endpoints ordered by time accept since (inclusive) and until (exclusive), as an RFC 3339 time or a date (see
Requests). On a newest-first list, paging stops as soon as an item older than since
appears: the last page has page.has_more false with page.end_reason end, and the
older pages are neither fetched nor charged. until filters out newer items; the pages that hold them are still read,
so they are charged.
Cursors
Cursors are opaque and short-lived: don't parse, build or store them. Each one stops working at
page.next_cursor_expires_at. A cursor that is malformed, expired, from another endpoint, or sent with
different parameters fails with invalid_cursor (HTTP 400) and costs nothing; repeat
the original request without a cursor to start again.
Order and page size
Each list endpoint states the order of its items and its page size: the default and the largest limit
it accepts (larger values are reduced). One request reads one page from the platform, so a list of N items takes about
N ÷ page size requests when you leave limit out.
| Endpoint | Order | Page size | Cursor lifetime | Price per page |
|---|---|---|---|---|
| Amazon Deals API | Amazon's Today's Deals order (its own ranking, as the grid shows it) | up to 100 | 1 hour | 1 credit |
| Amazon Offers API | The buy box offer first, then every other offer in Amazon's order: by price plus delivery, lowest first | up to 11 | 24 hours | 1 credit |
| Amazon Reviews API | Amazon's top reviews: the marketplace's own first, then other countries' | up to 20 | 24 hours | 1 credit |
| Amazon Product Search API | Amazon's Featured order, sponsored results among them | up to 60 | 24 hours | 1 credit |
| Amazon Shop Lists API | the storefront's order: the list created or changed most recently first, with the lists the influencer pinned at the top of the first page | up to 20 | 24 hours | 1 credit |
| Amazon Shop Posts API | the storefront's: newest first within each tab, after the posts the influencer pinned; type=all lists the videos, then the photos | up to 20 | 24 hours | 1 credit |
| Amazon Best Sellers API | Amazon's rank in the list (1 = top) | up to 50 | 24 hours | 1 credit |
| Apple Music Album Search API | Apple Music's own relevance order for the query | up to 50 | 24 hours | 1 credit |
| Apple Music Artist Search API | Apple Music's own relevance order for the query | up to 50 | 24 hours | 1 credit |
| Apple Music Playlist Search API | Apple Music's own relevance order for the query | up to 50 | 24 hours | 1 credit |
| Apple Music Track Search API | Apple Music's own relevance order for the query | up to 50 | 24 hours | 1 credit |
| Apple Music Top Albums API | Apple Music's own chart order (1 = most played) | up to 50 | 24 hours | 1 credit |
| Apple Music Top Playlists API | Apple Music's own chart order (1 = most played) | up to 50 | 24 hours | 1 credit |
| Apple Music Top Tracks API | Apple Music's own chart order (1 = most played) | up to 100 | 24 hours | 1 credit |
| Bluesky Comments API | Most liked first, the replies Bluesky folds under "Show more replies" last | up to 1,000 | 24 hours | 1 credit |
| Bluesky User Posts API | most recent activity first: a post by when it was posted, a repost by when it was reposted | up to 100 | 24 hours | 1 credit |
| Bluesky Post Search API | newest first, by the time each post states, to the second | up to 100 | 24 hours | 1 credit |
| Facebook Ad Library Advertiser Ads API | most impressions first | up to 10 | 1 hour | 1 credit |
| Facebook Comments API | Facebook's All comments view: every top-level comment, the most relevant first | up to 10 | 24 hours | 1 credit |
| Facebook Page Events API | oldest first | up to 8 | 24 hours | 1 credit |
| Facebook Group Posts API | Facebook's New posts: newest first by when a post entered the group's feed | up to 3 | 1 hour | 1 credit |
| Facebook Profile Photos API | Newest first, as the Photos tab shows them | up to 8 | 1 hour | 1 credit |
| Facebook City Events API | Facebook's ranking of the city's events, not by date | up to 12 | 3 hours | 1 credit |
| Facebook Profile Posts API | newest first | up to 3 | 1 hour | 1 credit |
| Facebook Reels API | newest first | up to 10 | 1 hour | 1 credit |
| Facebook Comment Replies API | oldest first | up to 10 | 24 hours | 1 credit |
| Facebook Ad Library Search API | most impressions first | up to 10 | 1 hour | 1 credit |
| Facebook Ad Library Advertiser Search API | the search box's own order | up to 15 | 24 hours | 1 credit |
| Facebook Event Search API | Facebook's ranking of the results, not by date | up to 20 | 30 minutes | 1 credit |
| Facebook Group Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Facebook Marketplace Search API | Marketplace's Suggested order | up to 30 | 3 hours | 1 credit |
| Facebook Marketplace Location Search API | most relevant first, as Marketplace's location picker ranks them | up to 10 | 24 hours | 1 credit |
| Facebook Post Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Facebook Page and People Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Google Ads Transparency Center Advertiser Ads API | last shown, most recent first | up to 40 | 24 hours | 1 credit |
| Google Ads Transparency Center Ads by Website API | last shown, most recent first | up to 40 | 24 hours | 1 credit |
| Google Ads Transparency Center Advertiser Search API | Google's order, as the center's search box lists the matches | up to 100 | 24 hours | 1 credit |
| Google Ads Transparency Center Search Suggestions API | the center's search box order: on each page its advertisers, then its websites | up to 20 | 24 hours | 1 credit |
| Instagram Comments API | newest first | up to 24 | 24 hours | 1 credit |
| Instagram Hashtag Posts API | Instagram's ranking of the hashtag's reels (its public results page's order) | up to 24 | 24 hours | 1 credit |
| Instagram Highlights API | the order of the account's highlights tray on its profile | up to 10 | 24 hours | 1 credit |
| Instagram Location Posts API | newest first | up to 18 | 24 hours | 1 credit |
| Instagram Highlight Stories API | oldest first | up to 50 | 24 hours | 1 credit |
| Instagram Posts API | newest first | up to 12 | 24 hours | 1 credit |
| Instagram Reels API | newest first | up to 12 | 24 hours | 1 credit |
| Instagram Hashtag Search API | Instagram's search ranking (most relevant first) | up to 55 | 24 hours | 1 credit |
| Instagram Location Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Instagram Search API | Instagram's ranking for the keyword (its popular page's order) | up to 24 | 24 hours | 1 credit |
| Instagram User Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Instagram Audio Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Instagram Search Suggestions API | the exact account first, then Instagram's tag search ranking | up to 56 | 24 hours | 1 credit |
| Instagram Similar Accounts API | Instagram's suggestion order | up to 50 | 24 hours | 1 credit |
| Instagram Audio Reels API | Instagram's ranking of the audio's reels (the order its audio page shows) | up to 12 | 24 hours | 1 credit |
| Instagram Trending Reels API | Instagram's reels feed order (a fresh selection on each first page) | up to 40 | 24 hours | 1 credit |
| Kwai User Posts API | newest first | up to 50 | 24 hours | 1 credit |
| LinkedIn Ad Library Search API | most recently started first | up to 24 | 24 hours | 1 credit |
| LinkedIn Post Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| LinkedIn Company and People Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Pinterest Board Pins API | Pinterest's order for logged-out visitors: mostly the latest saved first, with a few pins it picks moved to the top | up to 50 | 24 hours | 1 credit |
| Pinterest Boards API | the order the account's profile shows its boards in: its own arrangement (A to Z, or one it set by hand), else the boards saved to most recently first | up to 50 | 24 hours | 1 credit |
| Pinterest Profile Pins API | newest first | up to 25 | 24 hours | 1 credit |
| Pinterest Search API | Pinterest's own relevance order for the query | up to 25 | 24 hours | 1 credit |
| Pinterest Trends API | Pinterest Trends' rank for the board (1 = top) | up to 50 | 24 hours | 1 credit |
| Reddit Comments API | Reddit's own order for the post (Best, or the order its moderators suggest), each comment followed by the replies Reddit shows | up to 200 | 24 hours | 1 credit |
| Reddit User Posts API | newest first | up to 25 | 24 hours | 1 credit |
| Reddit User Comments API | newest first | up to 25 | 24 hours | 1 credit |
| Reddit Comment Search API | Reddit's search ranking (best match) | up to 10 | 24 hours | 1 credit |
| Reddit Search API | Reddit's relevance order (its search ranking) | up to 7 | 1 hour | 1 credit |
| Reddit User Search API | Reddit's relevance order | up to 7 | 24 hours | 1 credit |
| Reddit Subreddit Search API | Reddit's relevance order | up to 10 | 1 hour | 1 credit |
| Reddit Subreddit Posts API | Reddit's Best order (its default ranking of a subreddit's posts) | up to 25 | 1 hour | 1 credit |
| Rumble Comments API | newest first | up to 500 | 24 hours | 1 credit |
| Rumble Channel Videos API | Rumble's upload order (newest uploads first, not strictly by published_at) | up to 25 | 1 hour | 1 credit |
| Rumble Search API | Rumble's relevance order | up to 36 | 1 hour | 1 credit |
| Snapchat Comments API | Snapchat's own ranking of the Spotlight's comments; a comment's replies oldest first | up to 26 | 24 hours | 1 credit |
| SoundCloud Artist Tracks API | newest first | up to 50 | 24 hours | 1 credit |
| Spotify Playlist Tracks API | the playlist's own order, as its owner or Spotify arranged it | up to 100 | 24 hours | 1 credit |
| Spotify Podcast Episodes API | the show's own order: newest first, or from the first episode on a show meant to be heard in order | up to 50 | 24 hours | 1 credit |
| Spotify Album Search API | Spotify's own ranking for the query | up to 100 | 24 hours | 1 credit |
| Spotify Artist Search API | Spotify's own ranking for the query | up to 100 | 24 hours | 1 credit |
| Spotify Playlist Search API | Spotify's own ranking for the query | up to 100 | 24 hours | 1 credit |
| Spotify Podcast Search API | Spotify's own ranking for the query | up to 100 | 24 hours | 1 credit |
| Spotify Track Search API | Spotify's own ranking for the query | up to 100 | 24 hours | 1 credit |
| Telegram Channel Posts API | newest first | up to 20 | 24 hours | 1 credit |
| Telegram Channel Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| Threads Comments API | newest first | up to 50 | 30 minutes | 1 credit |
| Threads Posts API | newest first | up to 25 | 24 hours | 1 credit |
| Threads Search API | Threads' best matches (its search ranking) | up to 20 | 24 hours | 1 credit |
| Threads User Search API | Threads' search ranking | up to 100 | 24 hours | 1 credit |
| TikTok Comments API | TikTok's comment ranking (the order its app shows) | up to 50 | 24 hours | 1 credit |
| TikTok Effect Posts API | TikTok's ranking of the effect's posts (the order its effect page shows) | up to 30 | 24 hours | 1 credit |
| TikTok Followers API | newest follower first (most recently followed) | up to 30 | 24 hours | 1 credit |
| TikTok Following API | most recently followed first | up to 30 | 24 hours | 1 credit |
| TikTok Hashtag Posts API | TikTok's ranking of the hashtag's top posts (the order its embed shows) | up to 10 | 24 hours | 1 credit |
| TikTok Liked Posts API | most recent like first (when the account liked each post) | up to 30 | 24 hours | 1 credit |
| TikTok Place Posts API | TikTok's ranking of the place's posts (the order its place page shows) | up to 30 | 24 hours | 1 credit |
| TikTok Playlist Posts API | the playlist's own order (its owner's for a playlist, the order TikTok shows a collection's posts in) | up to 30 | 24 hours | 1 credit |
| TikTok Playlists API | the account's playlists in the order it set, then its public collections | up to 30 | 24 hours | 1 credit |
| TikTok Posts API | newest first | up to 15 | 24 hours | 1 credit |
| TikTok Comment Replies API | TikTok's reply order (the order its app shows: a reply to a reply follows the one it answers) | up to 50 | 24 hours | 1 credit |
| TikTok Ad Library Search API | relevance (keywords) or newest | up to 12 | 24 hours | 1 credit |
| TikTok Hashtag Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| TikTok Search API | TikTok's relevance order for the keyword | up to 30 | 1 hour | 1 credit |
| TikTok User Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| TikTok Sound Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| TikTok Search Suggestions API | TikTok's search box order (most likely search first) | up to 20 | 24 hours | 1 credit |
| TikTok Top Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| TikTok Sound Posts API | TikTok's ranking of the sound's posts (the order its sound page shows) | up to 30 | 24 hours | 1 credit |
| TikTok Top Ads API | Creative Center's rank by rank_by, best first | up to 20 | 24 hours | 1 credit |
| TikTok Top Videos API | Creative Center's rank by the rank_by metric (1 = top) | up to 20 | 24 hours | 1 credit |
| TikTok Trending Hashtags API | Creative Center's trend rank (1 = most popular) | up to 20 | 24 hours | 1 credit |
| TikTok Trending Videos API | TikTok's explore feed order | up to 30 | 24 hours | 1 credit |
| TikTok Shop Store Products API | TikTok Shop's store order: best-selling first (units sold, most first) | up to 20 | 1 hour | 1 credit |
| TikTok Shop Reviews API | TikTok Shop's recommended order (the order its product page shows reviews in) | up to 5 | 24 hours | 1 credit |
| TikTok Shop Search API | TikTok Shop's relevance order | up to 30 | 1 hour | 1 credit |
| Truth Social Posts API | newest first | up to 20 | 24 hours | 1 credit |
| Twitch Schedule API | Soonest first, a week per page | up to 50 | 24 hours | 1 credit |
| Twitch Videos API | newest first | up to 100 | 1 hour | 1 credit |
| X (Twitter) Community Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| X (Twitter) Hashtag Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit |
| X (Twitter) Post Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| X (Twitter) User Search API | the search engine's ranking (most relevant first) | up to 50 | 24 hours | 1 credit + 1 per result filled in |
| YouTube Comments API | newest first | up to 20 | 1 hour | 1 credit |
| YouTube Channel Videos API | newest first | up to 48 | 1 hour | 1 credit |
Pricing
A list endpoint's price is per page: every successful page costs the same, however many items it holds and
whatever limit you send. A smaller limit lowers neither the price of a page nor the cost of a walk (it
takes more pages, below). Empty pages are charged like any other successful page. Failed requests, including invalid_cursor, are free, and so are pages served
from the cache. See Credits and caching.
A smaller limit costs more
A limit below the page size does not split one charge into parts. The request returns the first
limit items of a platform page, and the next request, with its cursor, serves the rest of that same
platform page: it is fetched again and charged as a page each time. Walking a page in parts therefore costs one page
per part, and because the platform page is read again for every part, items can shift between those requests if the
platform adds or removes items in the meantime, so an item may repeat or be skipped.
Omitting limit is the cheapest way to walk a list: every request returns a full page, and each
platform page is read and charged once. Use a smaller limit only when you need fewer items than a page
holds and will stop there.
Errors
On top of the errors every endpoint can return, list endpoints have these:
| Code | HTTP | Retry | Meaning | What to do |
|---|---|---|---|---|
invalid_cursor | 400 | No | The cursor is malformed or expired, belongs to another endpoint, or came with other parameters than the request that returned it. | Repeat the original request without cursor to start the list again. |
A rejected cursor costs nothing; repeat the original request without cursor to start again.