October 30, 2026 · 11 min read
TikTok Creative Center API: what actually exists in 2026
There is no public TikTok Creative Center API. Here is what the official Commercial Content API returns, what broke in October 2026, and what to use instead.

No. TikTok does not publish a Creative Center API. The Creative Center runs on an internal, signed endpoint that broke for trending data in October 2026. What is official is the Commercial Content API: Europe-only ad data, ten records per call, applied for through TikTok for Developers.
That answer sounds evasive because the naming is genuinely bad. Three different products get described as the TikTok ad API: the Creative Center (a browsing UI for ad inspiration), the Commercial Content Library (a regulatory transparency database covering Europe), and the Marketing API (the one you use to buy ads). Only the second and third have documented endpoints. The first one, the one everybody wants, is a JavaScript app talking to an undocumented backend.
Is there an official TikTok Creative Center API?
No. There is no documented, keyed, contract-backed API for the Creative Center. The site at ads.tiktok.com/business/creativecenter is a frontend that calls TikTok's internal creative_radar_api. Every response it renders is fetched from that internal service, which is why scrapers work at all.
Those internal calls are signed. A session needs three headers regenerated on a per-session basis: anonymous-user-id, timestamp and user-sign. The Crawlee engineering blog documented the pattern of capturing them from a real page load and replaying them against the trend and Top Ads endpoints. TikTok also refuses datacenter IP ranges, so a residential proxy is part of the recipe, not an optional extra.
TikTok publishes three API families that are not the Creative Center: the Commercial Content API for ad transparency data, the Research API for public content research, and the Marketing API for campaign management. None of them will return the Top Ads inspiration feed you can browse by hand.
The practical consequence is a fork in the road. You either accept a narrow official dataset with a contract, or you build on an internal endpoint that can change on a Tuesday without telling anyone. October 2026 is the month that stopped being theoretical.
What does the TikTok Commercial Content API actually return?
It returns ad records from the Commercial Content Library, filterable by advertiser name or keyword. The endpoint is POST https://open.tiktokapis.com/v2/research/adlib/ad/query/ and the required scope is research.adlib.basic. Authentication is a client access token prefixed clt., generated from a client key and secret that appear in your TikTok for Developers account once your application is approved. TikTok's own product page says approval takes about two working days, and that the applicant can be based in any country even though the data is European.
You choose the fields yourself with the fields query parameter. The set TikTok documents is ad.id, ad.first_shown_date, ad.last_shown_date, ad.status, ad.status_statement, ad.videos, ad.image_urls, ad.reach, advertiser.business_id, advertiser.business_name and advertiser.paid_for_by.
What the request shape looks like
A single call carries a filters object with an ad_published_date_range and a country_code_list, plus search_term and max_count. The date range floor has to sit within one year of today, search_term is capped at 50 characters, and search_type is either exact_phrase (the default) or fuzzy_phrase.
Here is the shape, with the field list trimmed to what most competitor research actually needs:
curl -X POST 'https://open.tiktokapis.com/v2/research/adlib/ad/query/?fields=ad.id,ad.first_shown_date,ad.last_shown_date,ad.status,ad.videos,advertiser.business_name' -H 'authorization: bearer clt.YOUR_TOKEN' -H 'Content-Type: application/json' -d '{"filters": {"ad_published_date_range": {"min": "20260901", "max": "20260930"}, "country_code_list": ["DE", "FR"]}, "search_term": "coffee", "max_count": 10}'
The ten-record ceiling is the headline limitation
max_count defaults to 10 and its maximum is 10. Not 50, not 500. The response returns has_more plus a search_id, and you pass search_id back in the next request to continue the same cached search. A thousand ads is a hundred round trips before you have parsed a single creative.
Do that math before you promise a client a dashboard. One advertiser running 120 creatives in Germany over a quarter is 12 calls minimum, and each call has to honour the same filter set or the search_id becomes invalid. A nightly refresh across twenty advertisers is 240 calls, which is fine, and a backfill of a year across two hundred advertisers is not.
The second limitation is easier to miss. Ad data is available while the ad runs and for up to one year after it was last shown. Your historical depth is bounded by regulation, not by your plan tier.
Which countries does the official API cover?
Europe. TikTok's supported countries page lists 27 EU member states, plus Norway, Iceland and Liechtenstein from the EEA, plus the United Kingdom and Switzerland. That is 32 country codes, all of them European.
There is no US coverage, no Canada, no Australia, no Brazil. The Commercial Content Library exists because the Digital Services Act requires it, so the coverage map follows EU law rather than where your clients advertise. If your competitor set is American, the official API cannot see them. That single fact decides the architecture for most teams.
Verified 30 October 2026 against TikTok for Developers: the Commercial Content API documentation was last updated 27 August 2026, the Query Ads reference and Supported Countries pages on 1 September 2026. Coverage is EU, EEA, UK and Switzerland only, and max_count is capped at 10 records per request.
Why did the Creative Center trend endpoints stop working?
Because TikTok shipped a new Creative Center app and left the old internal endpoints answering with an empty success. On 27 October 2026 the legacy /creative_radar_api/v1/popular_trend/ paths returned code 0, data null and msg deprecated, even with a correctly signed session. Code 0 reads like success if you only check the status code, which is how these breakages survive monitoring.
Those specifics come from a measurement published on 26 October 2026 by a scraper maintainer who re-ran every endpoint against the new app, which is the kind of dated detail TikTok never puts in a changelog.
The old URLs under /business/creativecenter/inspiration/popular/ now redirect to ads.tiktok.com/creative/creativeCenter/trends. Only the Top Ads endpoints on the old app kept working.
The replacement has its own shape. Trends now render from an unsigned endpoint, ads.us.tiktok.com/CreativeOne/Report/CreativeCenterGetTopContentsList, which needs no user-sign, no cookies and no login, just browser-like headers. Logged out it returns four videos per call and ignores page and limit. Pagination claims a totalCount of 100 while handing back the same four records, and requests for Japan, Vietnam, Thailand, Indonesia and the UK came back empty.
Working around that ceiling means multiplying across filters rather than paging: three sort orders by five content categories by the organic-only toggle gets you roughly 80 distinct US trending videos for a week. Measured over the week ending 25 October 2026, that was 81 videos.
If you maintain a pipeline against the Creative Center, this is the check to add tonight: treat code 0 with an empty data object as an error, not as an empty result. A deprecation notice that arrives as a 200 is the most expensive kind of silent failure.
Can you get US TikTok ad data without a vendor?
Yes, but you are scraping, not integrating. The Top Ads dashboard is public, needs no advertiser login, and today lists 28 regions per the coverage changelog published with the Apify Creative Center scraper. You get the creative, the advertiser name, the likes, a CTR band and a cost band.
The maintenance bill is the part nobody budgets. Signed headers expire, IP ranges get blocked, and the response schema moves with each frontend release. A scraper that works in October is a scraper you re-verify in November.
One more trap sits inside the trend feed itself. Of 25 trending videos sampled for the week ending 25 October 2026, 23 were marked as ads. The single largest Technology and Finance video pulled 16.4 million weekly views, of which 840 thousand were organic. If you feed trending videos into a creative strategy document as organic cultural signal, you are mostly reading paid distribution and calling it culture.
That is not a reason to ignore the feed. It is a reason to label the rows before an analyst or an agent draws conclusions from them.
How do you get TikTok ad data into an AI agent?
Give the agent a tool, not a prompt. An agent asked to answer questions about a competitor's TikTok creative needs a function that takes an advertiser or a keyword and returns structured ad records. Pasting ad screenshots into a chat window is a one-off, and it cannot be checked later.
The minimum viable tool schema is small: ad id, advertiser name and id, first_shown_date, last_shown_date, status, a video or image URL, and the market you queried. Everything else is optional. Any field that cannot be attributed to a specific API response should not exist in the schema, because an agent will happily invent it.
The companion piece on the TikTok Ads API for AI agents covers campaign-side access and where the Marketing API stops being useful for competitive work.
If you are designing the tool layer itself, what an MCP server for competitor analysis can really see describes which questions survive contact with real ad data and which quietly return nothing.
Two engine-level rules matter more than the schema. First, the tool should return the timestamp of the pull alongside the data, so an agent can reason about freshness instead of assuming it. Second, the tool must fail loudly on a deprecated response body. An agent handed an empty list will write a confident paragraph about how the competitor paused all advertising.
Which route should you pick?
Compliance or EU research: use the official API
If you need defensible provenance, an EU dataset, or a dataset you can cite in a report a client's legal team will read, apply for the Commercial Content API. Accept the ten-record ceiling and the one-year retention window. Budget the paging loop as real engineering, not a helper function.
US creative inspiration: buy the plumbing
If your need is American creative for inspiration, no official route exists. A vendor that maintains signed sessions and residential proxies is cheaper than the third rewrite of your own scraper. Judge vendors on whether they document their failure modes, not on how many columns their export has.
Agent workflows: normalize at the tool layer
If the consumer is an AI agent, the source matters less than the contract. One tool signature, one record shape, and one clear error type across whatever sources you sit on top of. Then swap the source when it breaks without rewriting the prompts.
This is the same trade-off the other transparency APIs force.
Our breakdown of the Google Ads Transparency Center API lands on the same conclusion: the documented surface is narrower than the marketing implies, and the useful layer is the one you build on top.
The free tier of the Meta Ad Library API makes the same point from the other direction, where the free version is generous in coverage and thin in the fields that matter.
How do you smoke test an ad API before building on it?
Four calls, twenty minutes, before anyone writes a schema. Do this with a keyword you can verify by hand in the browser, in a market you actually care about.
- Call the documented endpoint with the minimum field set and confirm you get records, not a schema error.
- Ask for max_count 25 and confirm the response caps at 10 rather than erroring, so you know the ceiling is real.
- Follow search_id into page two and confirm the ids differ from page one.
- Query a country outside the supported list and confirm you get a clear error rather than a silent zero.
- Log the response body on a deliberately malformed filter, so you recognise the error envelope later.
Then write one assertion into your monitoring that most teams skip: if a response contains zero records, check the message field before you check your filters. A deprecation that returns HTTP 200 with code 0 is the failure mode that hides for weeks.
What breaks in production, and how do you catch it early?
Internal endpoints deprecate without notice, as October 2026 showed. Signed sessions rot on a schedule you do not control. Rate limits are undocumented, so you find the ceiling by hitting it: in the October measurement, a burst of roughly 40 requests to the Creative Center host started failing at the TLS handshake, while one request every two seconds ran clean.
Field names drift between doc versions. The Query Ads reference was updated on 1 September 2026; anything you cached from an earlier integration deserves a re-read rather than an assumption.
Row counts lie in a different way. A trending endpoint that returns totalCount 100 and four records will make your pipeline look healthy for months, because it is not erroring, it is just under-delivering.
The three signals worth alerting on are cheap: a fall in records-per-call over a rolling week, any response whose message field is not empty, and any pull where the requested region returns zero rows while another region returns data.
What this means for competitor research
TikTok's ad transparency is regulatory infrastructure, not investigative tooling. It was built to satisfy a law about political and commercial advertising in Europe, and it does that job. It was not built to answer which hook your competitor is scaling this week in the United States.
That gap is where the real work sits. A useful competitor view combines a narrow authoritative source for the markets where one exists with a maintained, clearly labelled source for the markets where none does, and normalizes both into a shape an analyst or an agent can query without knowing which is which.
The teams that get this right in 2027 will not have the cleverest scraper. They will have the clearest record of what each row came from and when, which is the only defence against a confident answer built on an empty array.
Start with the ten-record call. Ten ads from a real advertiser in a real market tells you more about whether any of this is worth building than a month of architecture diagrams.
Frequently asked questions
Is there an official TikTok Creative Center API?
No. TikTok publishes no documented API for the Creative Center. The site calls an internal creative_radar_api that requires three signed headers (anonymous-user-id, timestamp, user-sign) generated per session, and it refuses datacenter IP ranges. The documented alternatives are the Commercial Content API for European ad transparency data and the Marketing API for campaign management.
How many ads can you pull per call from the Commercial Content API?
Ten. max_count defaults to 10 and its maximum is also 10. Paging continues with the search_id returned in each response, so a thousand ads takes one hundred requests, and each request must reuse the same filters or the search_id stops being valid.
Does the TikTok Commercial Content API cover the United States?
No. Supported coverage is the 27 EU member states, plus Norway, Iceland and Liechtenstein, plus the United Kingdom and Switzerland. That is 32 European country codes. The library exists to satisfy the Digital Services Act, so coverage follows EU regulation rather than advertiser demand.
Why did TikTok Creative Center trend scrapers stop working?
In October 2026 TikTok moved the Creative Center to a new app and left the legacy popular_trend endpoints answering with code 0, data null and msg deprecated, even for correctly signed sessions. Only the Top Ads endpoints kept working on the old app. Trending videos now come from an unsigned CreativeOne endpoint that returns four videos per call.
Can an AI agent use TikTok ad data reliably?
Yes, if the agent reaches the data through a typed tool rather than pasted screenshots. The tool should return ad id, advertiser, first and last shown dates, status, creative URL and market, plus the pull timestamp, and it must raise an error on a deprecated response body instead of returning an empty list.