How to get TikTok trending feed
GET request to /v1/tiktok/trending-feed with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. For You by default; pass orderBy/period/page for Creative Center popular videos (like/hot/comment/repost) with totalCount. Flat 2 credits.How to get TikTok trending feed (step by step)
- 1
Get a free API key
Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.
- 2
Call the TikTok Trending Feed API
Send an authenticated GET request to /v1/tiktok/trending-feed with your input. No OAuth, no scraping setup.
- 3
Read the JSON response
Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.
Code example
curl "https://api.captapi.com/v1/tiktok/trending-feed" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."What the response looks like
{
"success": true,
"data": {
"platform": "tiktok",
"country": "US",
"countryCode": "US",
"cached": false,
"totalReturned": 2,
"requested": 20,
"hasMore": false,
"nextCursor": null,
"truncatedReason": null,
"fetchedAt": "2026-08-03T11:30:00.000Z",
"results": [
{
"url": "https://www.tiktok.com/@adamjones73/video/7660991836407811358",
"id": "7660991836407811358",
"coverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oERcgNIQQgASfTiefnLoipqrkyeCfiAGGKmNEI~tplv-tiktokx-origin.image?dr=9636&x-expires=1785517200&x-signature=FF%2Fhr528f3arMCaHqCr9%2BeBIue0%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"author": "adamjones73",
"authorName": "Adam",
"views": 5400000,
"likes": 823500,
"comments": 4301,
"shares": 147900,
"rank": 1,
"caption": "#gta #viral #fyp",
"platform": "tiktok",
"createTime": 1783713660,
"publishedAt": "2026-07-10T20:01:00.000Z",
"mediaType": "video",
"thumbnailUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oERcgNIQQgASfTiefnLoipqrkyeCfiAGGKmNEI~tplv-tiktokx-origin.image?dr=9636&x-expires=1785517200&x-signature=FF%2Fhr528f3arMCaHqCr9%2BeBIue0%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"isAd": false
},
{
"url": "https://www.tiktok.com/@123court/video/7655473367125855519",
"id": "7655473367125855519",
"coverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oIMffQHCCga9fWiRXUy8JOfP3WVUFGAL7oQtAQ~tplv-tiktokx-origin.image?dr=9636&x-expires=1785517200&x-signature=zF4ZAiNfBFLlLm4zu51g3NjykhI%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"author": "123court",
"authorName": "123 Court",
"views": 3600000,
"likes": 133800,
"comments": 1872,
"shares": 8999,
"rank": 2,
"caption": "Engaged Mom Demands More Money, But Judge Finds Out The Shocking Truth! #CourtroomDrama #FamilyCourt #ChildSupport #ChildSupportCourt #JudgeJules #InstantKarma #Backfired #CaughtInTheAct #PlotTwist #TruckDriverLife #CoParenting #SplitCustody #SiblingDrama #RevengeBackfires",
"platform": "tiktok",
"createTime": 1782428791,
"publishedAt": "2026-06-25T23:06:31.000Z",
"mediaType": "video",
"thumbnailUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oIMffQHCCga9fWiRXUy8JOfP3WVUFGAL7oQtAQ~tplv-tiktokx-origin.image?dr=9636&x-expires=1785517200&x-signature=zF4ZAiNfBFLlLm4zu51g3NjykhI%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"isAd": false
}
]
}
}Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
| country | string | No | Two-letter ISO country (default US). For You: region-availability hint. Creative Center mode: chart market. |
| countryCode | string | No | Alias of country. Wins when both are set. |
| orderBy | string | No | Creative Center sort: hot (views), like, comment, or repost. Unknown values are 400. vv/views/plays are aliases of hot — the response echoes the public name. Setting this (or period / page>1) switches from For You to the popular-videos chart. On a For You fallthrough the same sort is applied locally. |
| period | integer | No | Lookback days: 7, 30, or 120 (180→120). Triggers chart mode. Every returned publishedAt is inside this window — a For You fallthrough is filtered the same way. |
| page | integer | No | Creative Center page (default 1). page>1 triggers chart mode. |
| limit | integer | No | Max items to return (default 20, max 200). Flat 2 credits per call. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Frequently asked questions
What does the TikTok Trending Feed API do?
The TikTok Trending Feed API lets you list items in bulk with metadata from a public TikTok trending feed using one GET request to /v1/tiktok/trending-feed. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the TikTok Trending Feed API cost?
Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a TikTok API key or OAuth?
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why was I billed when the browser timed out?
The origin used to finish past Cloudflare's ~125s read timeout, log a 200, and debit 2 credits after the connection was already dead (385s and 430s rows in request history). The endpoint now has the same 110s deadline as popular-hashtags. A wall with a 6h last-good page is labelled stale 200 at 0 credits (stale=true, source=cache). A miss with no snapshot is 502 UPSTREAM_UNAVAILABLE, 0 credits, with timings.totalMs.
Does orderBy=vv sort by views?
vv is accepted as an alias of hot (Creative Center's internal key) and the response echoes orderBy=hot. Unknown tokens are 400. On a Creative Center hit the chart is already sorted. On a For You fallthrough the list is re-sorted locally by that metric and the note says so — rank is not a raw array index of an unsorted feed.
Why is mediaType photo on a /video/ URL?
It isn't anymore. mediaType used to track whether we extracted a playable videoUrl. Session-bound play URLs are deliberately omitted, so that labelled roughly half the feed as photo. mediaType is now photo only when the canonical url contains /photo/, or durationSeconds is null on an image post. A 126-second /video/ row with no videoUrl is a video.
Why is author.followers null?
The signed mobile For You card often omits follower_count. We read author / authorStats / nested author.stats (including compact strings like 12.3K), then hydrate unique still-null handles from /api/user/detail (8s budget, not a second FYP page — those items never overlap). Null means the feed omitted the count and user/detail missed or timed out for that creator.
Can I page the For You feed?
No. A filled page is hasMore true, nextCursor null, truncatedReason=single_page_only — more exist and are unreachable. hasMore is never true without a cursor unless that reason is set (same rule as truth-social/user-posts). A short page is hasMore false. Creative Center mode uses page + pagination.totalCount (truncatedReason=chart-page when the chart page filled).
Is the TikTok Trending Feed API suitable for production use?
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to get TikTok trending feed?
Start free with 100 credits — no credit card required.
Get your free API key