TikTok Popular Hashtags API
Related TikTok hashtags — Creative Center chart when it answers, otherwise a disclosed niche fallback. Flat 2 credits.
GET request to /v1/tiktok/popular-hashtags that responds with clean JSON and costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the TikTok Popular Hashtags API?
Tries TikTok Creative Center's popular-hashtag chart (ads.tiktok.com/business/creativecenter/inspiration/popular/hashtag) for 25s when query is omitted or query=trending — then a service-wide circuit opens: later default calls skip the chart (chartStatus=skipped_circuit_open, chartConsecutiveMisses) until the 60s cooldown (300s after 3 misses) expires and one call re-probes. A chart miss falls through to related-tag co-occurrence seeded with fyp — source is niche_fallback, not a silent substitute. rankDiff and trend[] exist only on a Creative Center hit (source=creative_center); they are omitted on the fallback and have not been observable while the chart stays dark. Pass query=<niche> (e.g. skincare) to skip the chart. A double miss is 502 with stages/ms, consecutiveFailures, and a 60s service-wide negative cache (persistent after 3). Overall 80s deadline. Flat 2 credits on a 200; 5xx stay 0.
What you get
- source=creative_center | niche_fallback — which path produced the list
- chartStatus skipped_circuit_open vs timeout/fetch_empty — skip ≠ miss
- rankDiff + trend[] only when the Creative Center chart actually answers
- query=<niche> skips the chart (skincare is the working path)
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/tiktok/popular-hashtags" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"query": "skincare",
"discovery": "co_occurrence",
"discoverySource": "hashtag_page",
"sampleSize": 20,
"rankBy": "videoCount",
"fetchedAt": "2026-08-03T15:08:07.000Z",
"totalReturned": 2,
"hashtags": [
{
"name": "skincare",
"url": "https://www.tiktok.com/tag/skincare",
"rank": 1,
"hashtagId": "504245",
"videoCount": 56953998,
"totalPlays": 954780316160,
"sampleVideoCount": 17,
"samplePlays": 40305805,
"growthRate": null
},
{
"name": "skincareroutine",
"url": "https://www.tiktok.com/tag/skincareroutine",
"rank": 2,
"hashtagId": "42164",
"videoCount": 8200000,
"totalPlays": 120000000000,
"sampleVideoCount": 5,
"samplePlays": 3003805,
"growthRate": null
}
]
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
queryNiche seed echoed on the co-occurrence path. Omitted on the Creative Center chart (omit query / query=trending).discoveryHow hashtags were found. popular-hashtags: "creative_center" (official chart) or "co_occurrence" (related tags from seed videos).discoverySourceWhere the seed video sample came from (hashtag_page, top_search, or apify_hashtag_videos) — co-occurrence path only.sampleSizeHow many seed videos were used for co-occurrence (typically ~20 on discoverySource=top_search or hashtag_page). Not commenter countries and not /tiktok/audience-demographics. Omitted on the Creative Center path.rankByMetric used for rank (creative_center_rank on Creative Center; videoCount on co-occurrence enrich).fetchedAtWhen this snapshot was fetched (ISO 8601 UTC).totalReturnedNumber of items returned in this response.
Hashtags
Each item in hashtags contains:
nameHashtag without the leading #.urlCanonical URL of the item.rankRank position in the list.hashtagIdTikTok challenge / hashtag id (cid) when available.videoCountPopulation video count when the source is authoritative (e.g. TikTok challenge/detail statsV2 on popular-hashtags, or a channel's uploaded-video total). Never a sample tally — sample sizes use sampleVideoCount / sampleSize.totalPlaysPopulation total plays/views for a hashtag when from challenge/detail (statsV2). On popular-hashtags this is not the sample sum — see samplePlays.sampleVideoCountHow many videos in this response's sample included the hashtag (co-occurrence count). Not the hashtag's TikTok-wide total — see videoCount.samplePlaysSum of play/view counts across sample videos that included the hashtag. Not the hashtag's TikTok-wide totalPlays.growthRateHashtag/song growth signal. On Creative Center charts: derived from trend[] when present. On challenge/detail co-occurrence path: null.
Timings
The timings object contains:
totalMsTotal ms. Example: 154.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| country | string | No | Two-letter ISO country for the Creative Center chart. Default US. |
| period | integer | No | Lookback days: 7, 30, or 120 (180→120). Default 7. |
| page | integer | No | Creative Center page (default 1). |
| sortBy | string | No | Chart sort: popular (default). |
| newOnBoard | boolean | No | Only hashtags newly on the Top 100. |
| industryId | string | No | Optional Creative Center industry_id. |
| query | string | No | Optional niche seed for co-occurrence + challenge/detail enrich. Omit, or pass trending, to try the Creative Center chart (25s); a miss falls through to related tags for fyp (source=niche_fallback) and opens a service-wide chart circuit. Later default calls skip the chart (chartStatus=skipped_circuit_open) until the cooldown expires. Any other value skips the chart. |
| limit | integer | No | Max items to return (default 20, max 100). 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. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh.
tiktok_popular_hashtags via @captapi/mcp. Set it up →How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/tiktok/popular-hashtagsand parse the JSON response.
Use cases
Trend Charts
Pull Creative Center Top-100 hashtags by country and period (omit query / query=trending).
Rising Tags
Use rankDiff + trend[] on the Creative Center path to spot surging hashtags early.
Campaign Tracking
Monitor hashtagId + videoCount/totalPlays for branded tags over time.
Related Discovery
Pass query=niche for co-occurrence related tags when you need adjacency, not the chart.
Frequently asked questions
What does the TikTok Popular Hashtags API do?+
The TikTok Popular Hashtags API lets you list items in bulk with metadata from a public TikTok popular hashtags using one GET request to /v1/tiktok/popular-hashtags. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the TikTok Popular Hashtags 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.
Where are rankDiff and trend[]?+
Only when source=creative_center — a live Creative Center chart hit. They are omitted on source=niche_fallback (the default when the chart misses, seeded with fyp) and on query=<niche>. The chart has not answered in testing; treat rankDiff/trend[] as chart-only fields, not a guarantee on the default call.
Why did omit-query 502 for 20–110 seconds?+
The documented default used to sit on the Creative Center chart until it died. The chart now has a 25s cap; a miss falls through to related tags for fyp with source=niche_fallback and opens a service-wide circuit (chartStatus=skipped_circuit_open, chartConsecutiveMisses). Later default calls skip the 25s probe until the cooldown expires. A double miss is 502 with stages/ms and a 60s negative cache so retries are instant, not another 110s.
Is sampleSize commenter countries?+
No. That description belongs to /tiktok/audience-demographics. On this endpoint sampleSize is how many seed videos were used for co-occurrence (typically ~20 on discoverySource=top_search / hashtag_page). It is omitted on the Creative Center path.
Why did query=skincare cost 18 credits?+
That was a billing bug, not a price change. The page has always said flat 2. After the chart-miss fallthrough was removed, query=<niche> was the only related-tags path — and leftover enrich math (ceil(25 × 0.7) = 18) billed it as per-result. Both paths are flat 2 credits again. 5xx stay 0.
Is the TikTok Popular Hashtags 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.
More TikTok APIs
Ready to use the TikTok Popular Hashtags API?
Sign up, grab your key, and make your first call in 60 seconds.