TokConnect: TikTok Research
Server Details
TikTok research for AI agents: real TikTok search data, trends, videos, creators and comments in ChatGPT, Claude, Cursor, Codex or any MCP client. 45 tools. See what people search on TikTok each week (Creator Search Insights search volume and 7-day trends), find content gaps with no videos yet, check if a product is trending for TikTok Shop, analyze competitor creators and posts, read comments and replies, pull video transcripts, search hashtags and sounds, and pick fair giveaway winners. Built for marketers, agencies, TikTok Shop sellers and creators. Sign in with OAuth or an API key; 50 free credits.
- Status
- Healthy
- Uptime
- 99.8% over 29 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2024-11-05
- URL
TDQS
Scored across 34 tools
Most tools target distinct resource/action pairs, and descriptions clearly separate search, detail, ranking, and analytics variants. Some overlap remains among ranking tools (product_top_selling, video_top_selling, creator_top_selling, shop_top_selling, live_top_selling) and between composite method-based tools and narrower search/detail tools, but the boundaries are generally explained.
Tool names use snake_case consistently and follow a recognizable pattern: bare nouns for entity detail, _search for search tools, _top_selling for rankings, and descriptive names for composite endpoints. There are minor deviations such as demand_find_topics and mixed noun-only versus verb-led names, but the convention is still readable.
At 34 tools, the surface is heavy and above the ideal range, increasing selection burden for an agent. The breadth of TikTok research domains justifies most tools, but the set is borderline-too-large rather than tightly scoped.
For a read-only TikTok research API, coverage is very broad: creators, videos, sounds, hashtags, places, products, shops, LIVE, ad library, demand research, trends, leaderboards, Shop Analytics, account, and reference data. No obvious domain lifecycle gaps or dead ends are apparent.
Available Tools
34 toolsad_libraryTikTok top ads libraryARead-onlyIdempotentInspect
TikTok's library of top-performing ads: search by keyword, one ad's detail (countries it ran in, CTR, likes, objective, landing page, video), analysis (TikTok's per-second retention curve and the ad's CTR percentile against other ads), and similar ads. Search results are worldwide: the library does not filter by market (tested 31 Oct 2026 with US, DE and JP, and with a language filter, which returned the same ads), so check countries with method=detail. Examples: {"method":"search","keyword":"skincare","period":"30"}, {"method":"analysis","id":"7382019274430578705"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Ad id (items[].id from method=search or similar). | |
| limit | No | Results per page. search max 50. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. search: top ads matching keyword (worldwide) | detail: one ad: countries, CTR, likes, objective, landing page, video | analysis: retention curve per second, biggest drop, CTR percentile | similar: ads TikTok recommends next to this one | search |
| period | No | method=search: ads from the last 7, 30 or 180 days (default 30). | |
| keyword | No | method=search: phrase in the ad, e.g. 'skincare'. Omit to list top ads of the period. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world behavior. The description adds a meaningful operational caveat: search is not market-filtered and country data requires method=detail, with a tested-date note. It does not cover rate limits or pagination, but the schema handles paging.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and the method list, followed by a useful global-search caveat and two examples. The caveat is somewhat detailed but earns its place by preventing a market-filtering mistake.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, an output schema, and rich annotations, the description supplies the remaining method-selection and global-search context needed to invoke correctly. Nothing material is missing for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters, including the method enum meanings. The description's examples illustrate method/keyword/period and method/id, but add little semantic detail beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource ('TikTok's library of top-performing ads') and enumerates four specific modes (search, detail, analysis, similar), so the agent knows the tool's scope. It does not explicitly distinguish this tool from sibling tools such as video_search or hashtag_search, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives method-level routing ('search by keyword', 'check countries with method=detail') and worked examples, plus a caveat that search is worldwide. It stops short of naming sibling alternatives or explicit when-not-to-use conditions, so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
category_trendsTikTok Shop category trendsARead-onlyIdempotentInspect
[Shop Analytics] The top TikTok Shop categories by estimated revenue over the last 7 days of data: revenue, units, growth, revenue per shop, top-3 and top-10 shop share, split by video, LIVE and affiliate. method=tree lists category names and ids (pass them as category to product_top_selling or creator_top_selling); method=products gives a category's top product ids; method=market_size counts what Shop Analytics tracks in a market, not all of TikTok Shop. region picks the market (default US). Example: {"method":"tree","keyword":"skincare"}.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| level | No | method=list or tree: keep only categories of this level (1 = top level, 3 = most specific). | |
| limit | No | method=tree: max categories to return (default 50). | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. list [Shop Analytics]: categories with revenue, growth and concentration | products [Shop Analytics]: a category's top product ids (US market only) | search [Shop Analytics]: find category names and ids by keyword | tree: category names and ids to use as category | market_size [Shop Analytics]: how many products, shops, creators, videos, LIVEs and brands Shop Analytics tracks | list |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. | |
| keyword | No | method=search: category name to look up, e.g. 'serum'. method=tree: text to find in category names, e.g. 'skincare'. | |
| category | No | method=products: category name exactly as method=list returns it (cate_id), e.g. 'Beauty & Personal Care'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and open-world, so the safety burden is low. The description adds useful behavioral caveats about market_size scope and region default, but its opening claim of 'last 7 days of data' conflicts with the schema's default window of 30d, which is a notable transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and method breakdown are front-loaded, and the example is placed at the end for illustration. Despite covering multiple methods and conditional behaviors, every sentence carries useful information without unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 10 parameters, multiple method modes, rich schema coverage, annotations, and an output schema, the description is largely complete: it explains method routing, region behavior, and a key scope caveat. The only material gap is the 7-day framing versus the 30d default window.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 10 parameters in detail. The description repeats method meanings and adds an example, but the 'last 7 days' phrasing contradicts the schema's 30d default window, so it does not add reliable semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and metric (top TikTok Shop categories by estimated revenue with revenue, units, growth, and shop-share splits) and clearly enumerates what each method returns. It also distinguishes itself from sibling tools by explaining how category ids from method=tree are passed to product_top_selling or creator_top_selling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes between methods: tree for category ids, products for a category's top products, and market_size for tracked-entity counts. It names downstream alternatives and clarifies that market_size counts what Shop Analytics tracks rather than all of TikTok Shop.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chartsTikTok chartsARead-onlyInspect
TikTok's own leaderboards. sounds: the music chart (Top 50 or Viral 50; TikTok's chart, not per market). hashtags: trending hashtags in a market over 7, 30 or 90 days, with posts, views and a daily popularity curve (empty for PL, NL and IE). searches: trending search phrases TikTok's website shows. live: TikTok's LIVE leaderboard (daily gifts or LIVE sales), as TikTok's app serves it; not per market. videos: yesterday's top 100 videos in a market with views, organic views, engagement rate and 6-second view rate (TikTok has this list for US, JP, TH, ID and VN; other markets come back empty). Examples: {"method":"hashtags","region":"DE","period":"30"}, {"method":"sounds","chart":"viral"}.
| Name | Required | Description | Default |
|---|---|---|---|
| board | No | method=live: daily (gift points today, default) or sales (LIVE sales leaderboard). | |
| chart | No | method=sounds: top (Top 50, default) or viral (Viral 50). | |
| limit | No | Results per page. sounds max 50, hashtags max 50, searches max 100, live max 100, videos max 100. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. sounds: TikTok's music chart (Top 50 or Viral 50) | hashtags: trending hashtags in a market (7, 30 or 90 days) | searches: trending search phrases | live: LIVE leaderboard (daily gifts or sales) | videos: yesterday's top 100 videos in a market | sounds |
| period | No | method=hashtags: last 7, 30 or 90 days (default 7). | |
| region | No | method=hashtags or videos: market, one of US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX, PL, IT, NL, IE (default US). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only, open-world annotations, the description discloses important behavioral constraints: hashtags are empty for PL, NL and IE, videos only exist for US, JP, TH, ID and VN, and sounds/live are not per market. It does not cover auth or rate-limit behavior, but the availability caveats are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but appropriately sized for five methods and numerous caveats, with the high-level purpose front-loaded. The method labels make it scannable, though the semicolon-list format is not maximally structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 8 parameters, 100% schema coverage, existing output schema and annotations, the description covers all methods, defaults, examples and key data availability limitations. An agent has enough information to select a method and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the schema carries most parameter meaning. The description adds useful method-specific context, including examples and the market availability limits that are not fully captured by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as TikTok's own leaderboards and enumerates the five chart types with their scope. It does not explicitly name sibling tools such as hashtag_search or sound_search, so differentiation is implied by 'TikTok's own leaderboards' rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The method descriptions give clear context for choosing between sounds, hashtags, searches, live and videos, including defaults and market limitations. However, it does not explicitly say when to use this tool versus sibling search or entity tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creative_centerTikTok Creative CenterARead-onlyIdempotentInspect
TikTok Creative Center: top videos by market (US, JP, VN, TH, ID), public SEO inspiration lists, and Creative Partner agency leaderboards. Example: {"method":"top_videos","country":"JP","sort":"engagement"}.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | method=top_videos: page 1-25. | |
| sort | No | method=top_videos: views (default), engagement or six_seconds_vtr. | |
| limit | No | Results per page. method=top_videos max 20 (TikTok often returns 4). Values above a method's maximum are lowered and reported in notes. | |
| names | No | method=seo_detail: exact names from method=seo_list. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. top_videos: trending videos by market with engagement | seo_list: public SEO inspiration names by type | seo_detail: detail for names from seo_list | partners: Creative Partner agencies for a market | top_videos |
| period | No | method=top_videos: week (default), day or long. | |
| country | No | method=top_videos: US (default), JP, VN, TH or ID. method=partners: market code from reference method=creative_markets, e.g. TH (default US, where TikTok lists no partners). | |
| biz_type | No | method=seo_list or seo_detail: which list. | |
| period_end | No | method=top_videos: unix seconds for the ranking close; 0 = last Sunday. | |
| query_date | No | method=partners: unix timestamp from reference method=creative_markets. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the SEO lists are 'public' and that partners data is a leaderboard, which is modest extra context. It discloses nothing about rate limits, data recency/staleness, or the note-reporting behavior for clamped limits (that lives only in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, capability list front-loaded before the example, with zero filler. Slightly more could be trimmed, but the compact example earns its place by showing the method/value contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 fully documented parameters, an output schema present, and rich annotations, the description only needs to frame the method families — which it does. Remaining gaps (no cross-references to reference method=creative_markets required for partners markets, no output-shape hint) are carried by structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including method, country, sort, period and page is already documented inline with its method-scoped meaning. The description's example does illustrate one valid method/country/sort triple, but adds no syntax or semantics beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (TikTok Creative Center) and enumerates the three data families it exposes — top videos by market, SEO inspiration lists, and Creative Partner agency leaderboards — matching the four method enum values. An agent can tell what it fetches, but nothing distinguishes it from siblings like video_top_selling or category_trends, which likely cover adjacent trending content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The worked example ({"method":"top_videos","country":"JP","sort":"engagement"}) implies how to invoke it and the per-method parameter pairing is only discoverable by reading the schema. There is no statement of when to choose this over sibling trending tools, no prerequisites, and no exclusions — guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creatorOne TikTok creatorARead-onlyIdempotentInspect
One creator's public account: profile (followers, likes, bio, Shop seller status; counts are rounded the way the app shows them, so use creator_search with the handle for exact numbers), posts, reposts, liked posts, followers, following, embed posts, playlists and collections. Pass any identifier; TokConnect resolves the ids. For what the creator sells or earns, the products they link, or their follower demographics, use creator_commerce. Example: {"id":"@dollskill","method":"posts"}. method=audit reports the account's registered country, ids and TikTok's milestones (started posting, follower marks); method=lookalikes lists accounts TikTok suggests as similar. Example: {"id":"@nike","method":"audit"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Creator: @handle, profile or video link, secUid (MS4wLjAB...) or numeric user id. TokConnect looks up the ids it needs. | |
| limit | No | Results per page. posts max 35, others max 30. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. profile: followers, likes, videos, bio, link, verified, Shop seller, ids | posts: posts, newest first, with counts and linked products | reposts: posts the creator reposted | likes: public Liked tab (empty when hidden) | followers: followers, when TikTok shows them (usually hidden) | following: accounts followed, when shown (usually hidden) | embed: posts in the creator's embed widget | playlists: public playlists (ids for creator_playlist) | collections: public saved collections (often empty) | audit: registered country, ids, TikTok milestones (started posting, follower marks) | lookalikes: accounts TikTok suggests as similar | profile |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations, which only declare read-only/idempotent/open-world: it discloses that counts are rounded the way the app shows them, that likes/followers/following are frequently hidden or empty, that over-limit values are silently lowered and reported in notes, and that unsupported regions are refused. These are real behavioral caveats an agent would otherwise hit at runtime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its contents, then constraints, then routing, then examples — a sensible order. It runs long and the two JSON examples plus the audit/lookalikes sentence partly restate what the method enum already documents, which is the main slack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, eleven-method tool with an output schema, the description covers the meaningful gaps: multiplier caveats on hidden data, rounding, region refusal, id resolution, and method selection. Pagination and limits are fully described in the schema, so nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds value by explaining the identifier resolution behavior and expanding on the non-obvious methods (audit, lookalikes) with concrete call examples. The method and region semantics largely live in the enum descriptions, so this is additive rather than essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific resource scope — one creator's public account — and enumerates exactly which artifacts come back (profile, posts, reposts, likes, followers, following, playlists, collections). It also names two sibling tools with the conditions that route away from it, so an agent can separate it from creator_search and creator_commerce without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules with conditions: use creator_search with the handle for exact (unrounded) counts, and use creator_commerce for what the creator sells, earns, links, or their follower demographics. It also states the identifier policy ('Pass any identifier; TokConnect resolves the ids'), removing a common pre-call question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creator_commerceA creator's TikTok Shop businessARead-onlyIdempotentInspect
What a creator sells. Live: linked_products (products linked in recent posts, with views; no sales). [Shop Analytics, any market via region]: sales (revenue, units, video vs LIVE), trend (daily), products (with revenue), shops (brands they sell for), videos (selling videos), audience (follower age, gender, locations, languages; says so when it has not been built). Use to vet affiliates. Example: {"id":"@dollskill","method":"products","window":"90d"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Creator: @handle, profile or video link, secUid (MS4wLjAB...) or numeric user id. TokConnect looks up the ids it needs. | |
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| limit | No | Results per page. Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. linked_products: each product linked in recent posts, with post count, views and likes (not sales) | sales [Shop Analytics]: revenue, units, video vs LIVE, average price | trend [Shop Analytics]: daily revenue (up to ~13 months) | products [Shop Analytics]: products they sold, with revenue | shops [Shop Analytics]: shops (brands) they sell for, with revenue | videos [Shop Analytics]: their selling videos, with revenue | audience [Shop Analytics]: follower age, gender, top locations and languages, active hours (when Shop Analytics has built it) | sales |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. | |
| max_pages | No | method=linked_products: post pages to scan, 15 posts each (default 3, max 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses that linked_products has views but 'no sales', that audience 'says so when it has not been built', and that some markets are refused. Those are real behavioral caveats an agent could not derive from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then method inventory, then usage and a worked example. Telegraphic phrasing ([Shop Analytics, any market via region]) is dense but every clause carries information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, an output schema, and rich annotations, the description covers the important gaps: method semantics, region limits, unbuilt-data behavior, and a call example. Only the sibling-selection and pagination story is left thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already documents its per-method applicability, so the description's bracketed '[Shop Analytics]' tags largely restate the schema. It adds only marginal value, such as the example payload showing method/window composition; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line 'What a creator sells' plus the enumerated method outputs (revenue, units, products, shops, videos, audience) makes the resource and the returned data concrete. It doesn't explicitly name the sibling `creator` or `creator_top_selling`, so an agent must infer that this is per-creator commerce data rather than a creator ranking or profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to vet affiliates' supplies one concrete scenario, and the Live vs Shop Analytics split routes between method families. But there is no guidance about when to prefer `creator`, `shop`, or `product` instead, and no exclusions, so tool-level routing remains implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creator_playlistOne playlist or collectionARead-onlyIdempotentInspect
One creator playlist or saved collection (id from creator method=playlists or method=collections): detail or its videos. Example: {"id":"7123...","kind":"playlist","method":"videos"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Playlist or collection id. | |
| kind | No | playlist (default) or collection. | |
| limit | No | Results per page. Max 30. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. detail: name, video count, owner | videos: the videos in it | detail |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds the detail-vs-videos distinction and the id provenance, but nothing about rate limits, pagination behavior, or what happens with an invalid/private playlist — gaps the schema partly mitigates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence plus a compact example, front-loaded with the resource identity before the id-provenance hint. No filler sentences; the example earns its place by making the parameter shape concrete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema coverage, the description needn't explain return values, and it correctly limits itself to identity, id source, and the two methods. Adequate for a read-only single-record fetch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including limit, cursor, detail and method is already documented in the schema; the description only echoes the detail/videos split. The example object is helpful for showing the intended id+kind+method combination, but that is corroboration rather than new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (one creator playlist or saved collection) and scopes it to either its detail or its videos, so an agent can distinguish it from the broader creator/creator_search siblings. The verb is implicit ('get') rather than stated, keeping it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent where the required id comes from (creator with method=playlists or method=collections), which is genuinely useful routing context. It does not state when to prefer this over siblings like creator or creator_search, nor any exclusions, so usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creator_searchSearch TikTok accountsARead-onlyIdempotentInspect
Searches TikTok accounts by keyword (name, handle or niche), as TikTok's account search returns them now, with follower bounds, verified-only and sorting applied to the page. Not a sales ranking (use creator_top_selling). Example: {"keyword":"skincare","min_followers":10000,"sort":"followers"}.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | relevance (default), followers or likes. | |
| limit | No | Results per page. Max 20. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| keyword | Yes | Search phrase, e.g. 'lip oil'. | |
| max_followers | No | Maximum followers. 0 = none. | |
| min_followers | No | Minimum followers. 0 = none. | |
| verified_only | No | Keep only verified accounts. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds a real behavioral trait: results reflect TikTok's own account search ordering and the bounds/verified/sort filters apply to the returned page, which matters for pagination expectations. It doesn't restate what the annotations already cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an example, front-loaded with the verb and scope. The clause 'as TikTok's account search returns them now' is slightly awkward and does double duty as behavioral context, but nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering the safety profile and an output schema covering return values, the description only needs scope, filtering behavior, and routing. It delivers all three; only minor gaps remain (per-page filtering vs. global filtering is hinted but not spelled out, and cursor paging relies solely on the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns the extra point by clarifying that the keyword matches names, handles, or niches (schema only says 'Search phrase') and by showing a populated example with min_followers and sort. It does not explain cursor or detail semantics, but those are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb plus resource ('Searches TikTok accounts by keyword') and narrows the keyword scope to name, handle, or niche. It explicitly contrasts itself with a sibling ('Not a sales ranking (use creator_top_selling)'), so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names one alternative and the condition that selects it ('use creator_top_selling' for sales ranking), plus a concrete example invocation. It stops short of covering the wider sibling set (e.g., creator, creator_commerce), so it isn't fully exhaustive, but the use/avoid guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
creator_top_sellingTop-selling TikTok Shop creatorsARead-onlyIdempotentInspect
[Shop Analytics] Creators (affiliates) ranked by the sales they drove over a date range: revenue, units, followers, engagement, views, trend. keyword = words in creator names, handles and bios (not the products they sell); category = a category name or id (levels 1-3: the creators selling in it, no keyword needed); both together narrow further. With neither, the result is the top 10 creators for the most recent days (about 6). Up to 100 rows per page with cursor paging, about 700 rows per keyword. sort: revenue, units, followers or growth; order=asc lists lowest first. Filters: revenue, followers, engagement, average views, price, growth, video or LIVE, gender, language, contact channel, MCN, audience age/language. region picks the market (default US). Examples: {"category":"Pet Supplies","followers":"10000-500000","contact":"EMAIL"}, {"keyword":"beauty","window":"7d","sort":"units"}.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| mcn | No | Filter. Signed to an MCN (agency) or not. | |
| sort | No | Ranking metric: followers, growth, revenue, units. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter. Applies with a keyword or category. | |
| debut | No | Filter. Days since the creator started selling: <4, <8, <31, or >30. | |
| limit | No | Results per page. Max 100 per page; pass next as cursor for the following page. Up to about 700 rows per keyword. Without a keyword or category: 10 rows. Values above a method's maximum are lowered and reported in notes. | |
| order | No | desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword or category. | |
| price | No | Filter. Average price of what they sell, in the market's currency, e.g. <20. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| gender | No | Filter. Creator gender as the feed classifies it. | |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. | |
| contact | No | Filter. Only creators who list this contact channel. Several: comma separated, e.g. EMAIL,INSTAGRAM. Values: EMAIL, WHATSAPP, INSTAGRAM, YOUTUBE, FACEBOOK, TWITTER. | |
| growing | No | Filter. true = only creators whose revenue is growing. | |
| keyword | No | Matched against creator names, handles and bios (not the products they sell): 'pet' finds accounts like 'Pet Finds'. For the affiliates of a product type, pass category, or rank products with product_top_selling and call product method=creators on the top items. If keyword and category are both omitted, the result is the top 10 creators for the most recent days (about 6), whatever window is set: pass a keyword or category when the user wants more than 10 rows or a specific window. | |
| revenue | No | Filter. Revenue the creator drove in the market's currency over the window, e.g. >10000. | |
| category | No | Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: ["Skincare"], ["Pet Supplies"], ["Beauty & Personal Care","Health"] or ["601450"]. Without a keyword the creators of the category are found by merging several generic keyword searches (a keyword is needed), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree. | |
| language | No | Filter. Creator language. | |
| avg_views | No | Filter. Average video views, e.g. >10000. | |
| followers | No | Filter. Followers, e.g. 50000-500000. | |
| engagement | No | Filter. Video engagement rate percent, e.g. >8. | |
| account_type | No | Filter. BELONGED_TO_SELLER = a brand's own account; INDEPENDENT = affiliate creator. | |
| audience_age | No | Filter. Main follower age band. | |
| revenue_source | No | Filter. Main revenue source: VIDEO or LIVE. | |
| audience_language | No | Filter. Main follower language. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses non-obvious behavior: the window is silently ignored when neither keyword nor category is supplied, category-only queries internally run several keyword sweeps and report sweep/row counts, limit caps at 100 with ~700 rows per keyword, and sort=growth favors brand-new items (>999.9%) requiring a revenue/units filter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then a compact semicolon-driven map of keyword/category, defaults, paging, sort/order and filters, ending with examples. Efficient overall, but the mid-sentence filter enumeration ('Filters: revenue, followers, engagement, ...') is a dense run-on that partly duplicates the schema and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 26-parameter, zero-required analytics query with an output schema, the description covers the axes an agent needs: scoping (keyword/category/both/neither), default window and row count, paging, sort/order semantics, region validity, and filter families. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by explaining parameter interactions and defaults in one place — keyword excludes product text, category accepts names or numeric ids at levels 1-3 and merges generic sweeps, order=asc should be paired with a revenue/units filter, region defaults to US. Much of this restates schema text rather than adding new meaning, which keeps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific resource (creators/affiliates), the metric they are ranked by (sales driven), and the output dimensions, so it is instantly distinguishable from sibling tools like creator_search or product_top_selling. It also explicitly clarifies what the keyword does NOT search (products they sell), heading off a likely confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: keyword vs category vs neither, how the two combine, what happens when both are omitted (top 10 for the most recent ~6 days regardless of window), and the alternative path (rank products with product_top_selling and call product method=creators). Two concrete example payloads seal it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demand_find_topicsFind TikTok search topicsARead-onlyIdempotentInspect
Finds what people search on TikTok (Creator Search Insights). Each topic has queryId, searchVolume (TikTok's 7-day popularity figure, never a monthly count), videoCount (0 = content gap) and a daily trend. Use for demand, content gaps and trend research. Pass a topic's queryId to demand_topic for charts, audience and related searches. Example: {"keyword":"protein snacks"} or {"method":"feed","channel":"content_gap"}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page. Max 20. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. search: topics matching keyword | feed: a ready-made list (channel) | trending: trending searches, optionally by category | |
| channel | No | method=feed: which list. suggested, content_gap (high demand, few videos), or a category. | |
| keyword | No | method=search: phrase to match, e.g. 'bicep workouts'. | |
| category | No | method=trending: category tab (default all). | |
| language | No | method=search or feed: language code from reference method=csi_languages, e.g. en. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real value by clarifying that searchVolume is TikTok's 7-day figure (never monthly) and that videoCount=0 signals a content gap — non-obvious semantics an agent would otherwise misread from the raw fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then field semantics, then usage and two compact examples — each sentence adds distinct information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be re-explained, yet the description still summarizes the key fields helpfully. It omits the method-max limit-lowering behavior and pagination flow, but those live in the schema; overall complete for calling the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the worked examples ({"keyword":"protein snacks"}, {"method":"feed","channel":"content_gap"}) demonstrate how method combines with keyword or channel — guidance the schema alone doesn't convey. It doesn't cover limit/cursor interplay, keeping it at a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (finds TikTok search topics via Creator Search Insights) and immediately distinguishes itself from demand_topic by framing itself as the discovery/list tool whose queryId feeds the detail tool. An agent can tell what it returns and how it differs from siblings without touching the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for demand, content gaps and trend research' plus 'Pass a topic's queryId to demand_topic for charts, audience and related searches' give clear selection guidance and route follow-up work to the correct sibling. The only minor gap is no explicit when-not-to-use contrast against other discovery siblings like demand_keywords or category_trends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demand_keywordsKeyword suggestionsARead-onlyIdempotentInspect
Autocomplete and keyword ideas from TikTok and TikTok Shop. method=signals adds TikTok's predicted click-through and a shopping-intent flag per phrase. These rank phrases; they are not search volume (use demand_find_topics for volume). Example: {"keyword":"matcha","method":"signals"}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page. tiktok/accounts max 50, signals max 20, trending max 30, ad_library max 20. Values above a method's maximum are lowered and reported in notes. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. tiktok: TikTok search autocomplete | accounts: account (@handle) suggestions | signals: autocomplete with click-through and shopping-intent signals | shop: TikTok Shop search autocomplete | trending: trending phrases TikTok's website shows | ad_library: EU/UK Ad Library advertiser and keyword autocomplete | tiktok |
| region | No | method=ad_library: 2-letter EU/UK country from reference method=ad_regions. Default DE. | |
| keyword | No | Seed phrase. Not needed for method=trending. | |
| suggest_type | No | method=ad_library: TikTok's suggestion type, default 1 (advertisers and keywords). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, open-world, so the safety burden is off the description. The description instead adds the interpretive caveat that scores are relative ranks, not search volume — the single most likely source of agent misuse. It does not mention pagination or the limit-lowering behavior (that lives in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences plus a compact example, with the core capability front-loaded and the critical caveat ('not search volume') placed immediately after. Every sentence carries distinct information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full annotation coverage and 100% schema coverage, the description only needs to add interpretation and routing. It does exactly that: it explains what the returned rankings mean and where to go for volume instead, which is the one thing structured fields cannot convey.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including per-method limit caps and method enum meanings, so the baseline is 3. The description's note about method=signals largely restates the schema's own 'signals: autocomplete with click-through and shopping-intent signals', and the example JSON is illustrative rather than semantically additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (TikTok / TikTok Shop autocomplete and keyword ideas) and explains the signals variant adds predicted click-through and a shopping-intent flag. It is distinguishable from siblings by naming demand_find_topics as the volume tool, though it only describes 2 of the 6 methods the tool actually supports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent away for one key need: 'These rank phrases; they are not search volume (use demand_find_topics for volume).' That is a real when-to-use-else signal. It does not explain when to pick method=tiktok vs shop vs trending vs ad_library, leaving that to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demand_topicOne TikTok search topicARead-onlyIdempotentInspect
Everything about one search topic (id = queryId from demand_find_topics): detail, daily popularity chart, searcher demographics, related searches, TikTok's content guidance and matching videos. Popularity values are TikTok's readings: never add days together or call them monthly searches. Example: {"id":"7261...","method":"popularity","days":"180","countries":["US"]}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | queryId from demand_find_topics. Not a video id or keyword. | |
| days | No | method=popularity or audience: window in days (default 30). | |
| limit | No | Results per page. method=related max 20; method=videos max 20. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. detail: searchVolume, trend, category, top countries | popularity: daily popularity chart, worldwide or per country | audience: age, gender and location of searchers | related: related searches with their searchVolume | related_queries: follow-up searches TikTok links to it | guidance: TikTok's suggested hooks, hashtags and outlines (often unavailable) | videos: videos TikTok shows for the topic | detail |
| countries | No | method=popularity: country codes to break out, e.g. ["US","GB"]. Omit for worldwide. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, open-world, and non-destructive, so the safety profile is covered. The description adds meaningful domain context beyond annotations: popularity values are TikTok's readings and must not be summed across days or described as monthly searches. That is an important caveat for correct interpretation, though it does not cover rate limits or response/pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is three sentences and front-loads the core scope before the routing detail and the popularity caveat. The example is compact and immediately useful. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete input schema coverage, and annotations covering safety and openness, the description needs only to describe scope and notable caveats. It does that: it names the sibling source for id, summarizes the method-specific outputs, and warns about the most dangerous interpretation error around popularity values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter and method. The description still adds value with a compact example showing how id, method, days, and countries are combined in practice. It does not add much beyond the schema for the remaining parameters such as cursor or limit, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope: 'Everything about one search topic', then enumerates the exact data surfaces it returns (detail, popularity chart, demographics, related searches, guidance, videos). It distinguishes itself from the sibling demand_find_topics by explicitly defining id as the queryId produced by that tool, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the prerequisite relationship explicit: id must come from demand_find_topics, not a video id or keyword. It also provides a concrete example call with method, days, and countries. It does not enumerate when to choose each method or when not to use this tool, but the context needed to invoke it correctly is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashtagOne hashtagARead-onlyIdempotentInspect
One hashtag (id from hashtag_search or hashtags[].id on a post): detail, its videos (hot or newest), or related hashtags. Example: {"id":"229207","method":"videos","sort":"newest"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Hashtag id (hashtags[].id). | |
| sort | No | method=videos: hot (TikTok's ranking, default) or newest. | |
| limit | No | Results per page. videos max 50, related max 20. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. detail: views, video count, description | videos: videos using the hashtag | related: hashtags TikTok relates to it | detail |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds little beyond structured fields — the worked example is the main value-add — and says nothing about result volume or how the three methods differ in cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence plus a compact example, with the id provenance front-loaded. Nothing is wasted, though the sentence packs three concepts tightly enough that it reads as a list rather than guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full annotation coverage, the description need not explain returns. Combined with the id-source hint and worked example, an agent has enough to call it correctly; only method-selection guidance is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (including enums for method, sort, detail, and the cursor/limit semantics) are already documented in the schema. The description's example reinforces method=videos with sort=newest but adds no new parameter meaning; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource (one hashtag) and enumerates the three things it can return — detail, videos, related hashtags — plus where the id comes from. It routes to sibling hashtag_search for id discovery, though the core verb ('get') is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'id from hashtag_search or hashtags[].id on a post' gives clear context for when this tool is the right call versus the search sibling, and the sample call illustrates a valid mode. It stops short of stating exclusions or tradeoffs between method=detail vs videos vs related.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hashtag_searchFind hashtagsARead-onlyIdempotentInspect
Finds hashtags by keyword, with total views and video counts for each. Pass a hashtag's id to hashtag for its videos and related tags. Example: {"keyword":"fitness"}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page. Max 50. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| keyword | Yes | Search phrase, e.g. 'lip oil'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new context: the shape of each result (views and video counts) and the drill-down path. It is silent on pagination, but cursor/limit semantics live in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-loaded with the core purpose, followed by the drill-down hint and a compact example. Nothing is redundant and nothing needs to be read twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers purpose, result contents and next step. The only gap is that pagination and the compact/full detail choice are left entirely to the schema, which is acceptable for a simple search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, cursor, detail and keyword are all documented in the schema itself. The description adds only an example value for keyword and no guidance on limit or detail, so it meets but does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Finds hashtags by keyword') plus the fields returned ('total views and video counts'), which separates it from the generic 'hashtag' sibling. An agent can identify the search-vs-detail split immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to pass a hashtag's id to 'hashtag' for videos and related tags, giving a clear follow-up path to the sibling. It does not state when to prefer this over content-search tools like video_search, but the search-then-detail workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liveOne TikTok LIVEARead-onlyIdempotentInspect
One LIVE room (id = room id from live_search or live_top_selling). Live: now (title, creator, live or ended, viewers, Shop selling). [Shop Analytics, any market via region]: sales (revenue, units, duration), history, products (products sold), strategy (price bands), top_categories, stream_urls. Example: {"id":"7695846289116416799","method":"products"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | LIVE room id. | |
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| limit | No | Results per page. Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. now: live status, viewers, likes, Shop selling | sales [Shop Analytics]: revenue, units, duration, viewers | history [Shop Analytics]: performance over the broadcast | products [Shop Analytics]: products sold in the LIVE, with revenue | strategy [Shop Analytics]: price bands of what was sold | top_categories [Shop Analytics]: top categories sold | stream_urls [Shop Analytics]: recording and stream URLs | now |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds that status may be live or ended and lists analytics outputs, but it gives no auth, rate-limit, pagination, or freshness caveats, and its 'any market via region' wording is narrower than the schema's supported-region rules.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and compact, moving from resource identification to method options to an example. The bracketed notation and dense method list slightly reduce readability, but every part contributes useful selection information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 9 parameters, rich annotations, 100% schema coverage, and an output schema, the description supplies enough to select a method and provide the required id. The main small gap is that region restrictions are left to the schema, but the overall definition is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds useful id provenance and a concrete example, but method, region, window, cursor, and detail semantics are already fully documented in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource, one TikTok LIVE room, and scopes it by requiring an id sourced from live_search or live_top_selling. It also lists the available data methods, making it distinguishable from the search/ranking siblings, though it does not begin with an explicit verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context by saying the id comes from live_search or live_top_selling and by explaining what the method values retrieve. It does not explicitly state when not to use this tool versus those siblings, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
live_searchSearch LIVE nowARead-onlyInspect
Finds TikTok LIVE broadcasts on now by keyword, with viewers and whether the room sells Shop products. Pass a room id to live. Not a sales ranking (use live_top_selling). Example: {"keyword":"skincare"}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page. Max 30. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| keyword | Yes | Search phrase, e.g. 'lip oil'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, open-world, non-idempotent operation. The description adds useful behavioral context by saying results are LIVE broadcasts on now and by naming two returned signals (viewers and Shop product status), though it does not discuss pagination or rate limits directly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, stating the main search behavior first, then the alternative, then an example. The sentence about passing a room id to live is useful for follow-up but slightly indirect in context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values in detail, and it still summarizes the important signals. It is complete enough for correct invocation, with only minor gaps around pagination or region behavior that are covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters like cursor, detail, region, and limit are already well documented. The description adds a concrete keyword example but does not add much beyond the schema for the remaining parameters; a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it finds TikTok LIVE broadcasts that are on now by keyword. It also states key returned attributes (viewers, whether the room sells Shop products) and explicitly distinguishes the tool from live_top_selling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly tells the agent to use this for keyword-based LIVE discovery and explicitly names the alternative for sales rankings: live_top_selling. The example reinforces the expected call shape, and the follow-up mention of live helps sequence tool use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
live_top_sellingTop-selling TikTok Shop LIVEsARead-onlyIdempotentInspect
[Shop Analytics] The top 10 LIVE broadcasts by estimated revenue over a date range, with host, start and end time, duration, units, GPM and average price. This ranking takes no filters. Pass a row's id to live method=products, sales or history. Example: {"window":"7d"}.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the burden is lighter. The description adds two traits not in the annotations: the hard cap of 10 rows and the fact that the ranking cannot be filtered. Return-field listing plus the presence of an output schema covers shape, though nothing is said about ordering ties, empty results, or currency handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying distinct information: identity, row contents, the no-filter constraint, and the drill-down path, capped with a concrete call example. Front-loaded and free of repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full schema, an output schema and rich annotations, the description covers the remaining gaps: the 10-row cap, the ranking metric, and the follow-up tool. The one unresolved question an agent might have — which of window/start/end/region actually govern this ranking — is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents window/start/end/region/detail, and the description only adds an example ({"window":"7d"}) plus the phrase 'over a date range.' The 'takes no filters' wording actually creates mild ambiguity about whether window/start/end apply here, especially since the region parameter description does not list this as a Live method that accepts it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (LIVE broadcasts), a precise ranking metric (top 10 by estimated revenue), the time scope (date range), and enumerates the returned fields. An agent knows exactly what it gets back and cannot confuse it with live_search or product_top_selling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'This ranking takes no filters,' which warns the agent that segmentation is impossible here, and routes follow-up work to `live` with method=products, sales or history. It does not name live_search or sibling ranking tools as alternatives, so the exclusion side of the guidance is only partly covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_accountMy TokConnect accountARead-onlyInspect
Your TokConnect plan and credit balance: plan and billing interval, credits used, limit and left, when credits next reset, which apps are connected, and links to upgrade or manage the plan. Free: it uses no credits and works with 0 credits left. Call it when the user asks about credits, cost or their plan, and before multi-step research likely to use more than about 10 calls. It reads the TokConnect account, not a TikTok account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the description's real contribution is the cost disclosure: the call consumes no credits and succeeds even at zero balance. That is exactly the behavior an agent needs before spending budget on a check. It stops short of saying anything about freshness or rate limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and its contents, then the cost note, then the usage triggers — a sensible order. The enumerated field list is somewhat long for a tool that already ships an output schema, but it earns most of its space by telling the agent what the user can be shown after calling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description did not need to enumerate return values, yet it does so harmlessly and adds the two things the schema cannot convey: zero cost and the not-a-TikTok-account scope. Nothing an agent needs in order to decide to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline is 4 and there is nothing for the description to compensate for. The description correctly avoids inventing filter options the schema does not offer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: 'Your TokConnect plan and credit balance', then enumerates what is covered (plan, interval, credits used/limit/left, reset time, connected apps, upgrade links). It also pre-empts the most likely confusion in this toolset by saying it reads the TokConnect account, not a TikTok account, which no sibling name would disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggers: when the user asks about credits, cost or their plan, and proactively before multi-step research likely to exceed ~10 calls. It also gives a cost-based reason ('Free: it uses no credits and works with 0 credits left') that tells the agent this call is safe to make preemptively — that is a genuine when-to-use rule, not vague framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pick_comment_winnersComment giveaway drawARead-onlyInspect
Draws giveaway winners at random from a video's comments, with optional filters (must_include, unique users, exclude the creator). A seed makes the draw reproducible. Reports how many comments were eligible.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Optional seed for a reproducible draw. Publish it so anyone can re-run the draw. | |
| video | Yes | Post id or full https://www.tiktok.com/@creator/video/<id> URL. | |
| detail | No | full adds TikTok's raw payload (large). | compact |
| winners | No | How many winners to draw. | |
| max_comments | No | Comments to fetch, in pages of 50. | |
| must_include | No | Optional text a comment must contain (case-insensitive), e.g. a hashtag or keyword. | |
| unique_users | No | Count each commenter once (their earliest fetched comment). | |
| exclude_creator | No | Exclude comments by the video's creator. |
Output Schema
| Name | Required | Description |
|---|---|---|
| raw | No | TikTok's full payload; present only with detail=full. |
| seed | No | |
| pages | No | |
| rules | No | |
| random | No | |
| awemeId | No | |
| fetched | No | |
| winners | No | |
| coverage | No | |
| eligible | No | |
| excluded | No | |
| fairness | No | |
| seedSha256 | No | |
| totalReported | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=false, so safety is covered. The description adds genuine behavioral context beyond that: the draw is random, a seed makes it reproducible, and it reports the eligible comment count. It stops short of explaining what happens without a seed (different results each run), which is the crux of the non-idempotent hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose before the filter/seed/reporting details. Every sentence carries distinct information with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description usefully notes it reports the eligible comment count. For an 8-parameter tool the coverage is adequate, though the absence of any when-to-use routing keeps it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all eight parameters including filters and seed are already fully documented in the schema. The description names must_include, unique users, exclude creator, and the seed, but restates them rather than adding syntax or format meaning. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Draws giveaway winners at random from a video's comments'), plus the scoping mechanism (optional filters, seed). An agent can distinguish this from read-only comment tools like video_comments or comment_replies immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Conveys the use case (a giveaway draw) and lists the filters, but never names when to use this instead of video_comments/comment_replies or what conditions make it appropriate. No exclusions or prerequisites are stated, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
placeOne placeARead-onlyIdempotentInspect
One tagged place: business, venue or landmark (id from place_search, a post's place.id, or a place link): detail, videos tagged there, or TikTok's public reviews. Example: {"id":"2214...","method":"reviews"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Place id (place.id on a post, or from place_search) or a place link. | |
| limit | No | Results per page. videos max 30, reviews max 20. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. detail: name, category, address, tagged video count | videos: videos tagged at the place | reviews: public reviews with stars, text and photos | detail |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description does not need to repeat that. It adds useful behavioral context by describing what each method returns, including public reviews and videos tagged at the place, though it leaves pagination and limit behavior to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact, front-loaded sentence followed by a useful example. Every clause earns its place by identifying the resource, accepted id sources, available methods, and a concrete invocation pattern.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description is complete enough for an agent to select and invoke the tool correctly. Return details are left to the output schema, and parameter limits/paging are covered by the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including enums for method and detail. The description reinforces the id sources and demonstrates method usage in an example, but adds little semantic detail beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('One tagged place: business, venue or landmark') and the three retrieval modes: detail, tagged videos, and public reviews. It also distinguishes this from place_search by specifying that the id comes from place_search, a post's place.id, or a place link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context by naming accepted id sources and the method options, plus an example. It does not explicitly state when to prefer this over siblings or when not to use it, but the single-place scope is evident from 'One tagged place' and the referenced sibling place_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_searchPlace / POI searchARead-onlyIdempotentInspect
Finds TikTok places (businesses, venues, landmarks) by keyword, each with its poi id, name, category, address, city, country and tagged video count. Pass a poi id to the place tool (method=detail, videos or reviews).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Places per page. | |
| detail | No | full adds TikTok's raw payload (large). | compact |
| keyword | Yes | Place or business term, e.g. 'coffee shop'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| raw | No | TikTok's full payload; present only with detail=full. |
| places | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds the downstream poi-id usage pattern, but its list of return fields overlaps with the output schema and it says nothing about auth, rate limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary function and immediately followed by the downstream action. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full annotation coverage, and 100% parameter descriptions, the description is sufficient for an agent to call the tool correctly. It could mention pagination or result-count behavior, but the schema already exposes those details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so `keyword`, `count`, and `detail` are fully documented in the schema. The description only reinforces that keyword-based lookup is the core operation and does not add syntax or format guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Finds TikTok places (businesses, venues, landmarks) by keyword.' It also distinguishes this search tool from the sibling `place` tool by explaining the poi-id handoff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly implies a two-step workflow: use this tool to find a poi id, then pass that id to the `place` tool for detail, videos, or reviews. It does not explicitly state when not to use it or name alternative search tools, but the downstream context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
productOne TikTok Shop productARead-onlyIdempotentInspect
Everything about one TikTok Shop product (id = product id or a Shop product link). Live from TikTok: page (price, SKUs and stock, rating, shop, and sold = TikTok's displayed lifetime units), reviews, related products, page videos. [Shop Analytics, any market via region]: sales, trend (daily), creators, video_sales, skus, analysis (highlights and attributes), conversion (creators promoting it and the share who sold), review_insights (complaints, praise, use cases; by_sku splits by variant). Examples: {"id":"1732052189676081387","method":"trend","window":"90d"}, {"ids":["1729...","1731..."],"method":"sales","region":"DE"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Product id (products[].id) or a TikTok Shop product link. | |
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| ids | No | method=sales only: up to 20 product ids in one call. | |
| page | No | method=reviews: jump to this page (1-100). | |
| sort | No | method=reviews: recommended (default) or newest. | |
| limit | No | Results per page. reviews max 5, related max 30, videos max 20; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes. | |
| stars | No | method=reviews: star filter when filter=all. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| by_sku | No | method=review_insights: split insights by SKU. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| filter | No | method=reviews: all (default), with_media or verified. | |
| method | No | What to get. page: live price, SKUs and stock, sold, rating, shop | reviews: public reviews | related: products TikTok shows as related | videos: the videos on the product page (first page only) | sales [Shop Analytics]: revenue, units, video/LIVE/showcase split, creator count, conversion (ids: up to 20 products) | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | creators [Shop Analytics]: creators selling it, ranked, with revenue | video_sales [Shop Analytics]: videos selling it, with revenue | skus [Shop Analytics]: sales by variant (SKU) | analysis [Shop Analytics]: selling-point highlights and attributes Shop Analytics extracts for the product | conversion [Shop Analytics]: how many creators promote it and what share of them made sales | review_insights [Shop Analytics]: AI summary of reviews: pain points, praise, use cases (by_sku splits by variant) | page |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing live-vs-analytics data sourcing, per-method limits that are silently lowered and reported in notes, the ~2-day analytics lag, region refusal for unsupported countries, and that detail=full returns a large raw record. These are exactly the operational traits an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and id semantics are front-loaded, then examples anchor the parameters. It is dense but readable; the main inefficiency is that the long method list largely restates the schema's method description, so a portion of the text is duplicated rather than additive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% parameter coverage, the description supplies everything else an agent needs: the two data regimes, the region allow-list behavior, window defaults and lag, and pagination via cursor. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds value with concrete call examples showing method+window+region+ids interplay and reiterating that id accepts a product link. Much of the method text duplicates the schema's enum description, limiting the uplift to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('one TikTok Shop product') and enumerates the twelve methods it can return, so the agent knows exactly what data is reachable. It does not, however, contrast itself with siblings such as product_top_selling or shop, so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives rich per-method context (page = live price/stock, reviews = public reviews, sales = revenue/units split) which implies when each mode applies, but it never states when to choose this tool over product_top_selling, shop, or shop_browse. No explicit when-not or exclusion guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
product_top_sellingTop-selling TikTok Shop productsARead-onlyIdempotentInspect
[Shop Analytics] Products ranked by estimated sales over a date range: revenue, units, video/LIVE/showcase split, growth, price, commission, creators, launch date, daily trend. keyword = words in product titles; category = a category name or id (levels 1-3, several allowed; no keyword needed); both together narrow further. With neither, the result is the top 10 products for the most recent days (about 6). Up to 100 rows per page with cursor paging, about 700 rows per keyword (max_rows up to 3,000 in the US). sort: revenue, units, price, growth or creators; order=asc lists lowest first. Filters: revenue, units, growth, price, commission, creators, launch date, channel, rating, seller type, shipping. region picks the market (default US). Shopper's live view: shop_browse. Examples: {"category":"Skincare","launched_within_days":"30"}, {"keyword":"lip oil","region":"DE","sort":"units"}.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| sort | No | Ranking metric: creators, growth, price, revenue, units. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter. Applies with a keyword or category. | |
| limit | No | Results per page. Max 100 per page; pass next as cursor for the following page. Up to about 700 rows per keyword (max_rows scans up to 3,000 in the US). Without a keyword or category: 10 rows. Values above a method's maximum are lowered and reported in notes. | |
| order | No | desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword or category. | |
| price | No | Filter. Average selling price in the market's currency, e.g. <20 or 20-100. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| units | No | Filter. Units sold over the window, e.g. 500-5000 or >10000. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| rating | No | Filter. Product rating, e.g. >4.5. | |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. | |
| keyword | No | Words from product titles, e.g. 'vitamin c serum' or 'lip oil'. Ranks every matching product over your window. If keyword and category are both omitted, the result is the top 10 products for the most recent days (about 6), whatever window is set: pass a keyword or category when the user wants more than 10 rows or a specific window. | |
| revenue | No | Filter. Revenue in the market's currency over the window: a-b, <a or >b, e.g. 1000-10000. | |
| category | No | Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: ["Skincare"], ["Pet Supplies"], ["Beauty & Personal Care","Health"] or ["601450"]. Without a keyword the products of the category are found by merging several generic keyword searches (a keyword is needed), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree. | |
| creators | No | Filter. Number of creators selling it, e.g. 10-50. | |
| max_rows | No | Scan up to this many matching products (101-3000) before sorting, to go past the 700-row cap; the top limit rows are returned. Needs keyword; US market only; not with category. | |
| shipping | No | Filter. local = ships from warehouses in the market; global = cross-border. | |
| affiliate | No | Filter. PUBLIC_PLAN = open affiliate plan; NON_AFFILIATE = not open to affiliates. | |
| commission | No | Filter. Affiliate commission percent, e.g. 15-35. | |
| seller_type | No | Filter. Who sold it: the seller's own accounts, independent affiliates, or the Shop mall. | |
| sales_channel | No | Filter. Where the revenue came from: VIDEO, LIVE or SHOWCASE (shop tab and search). Several: comma separated, e.g. VIDEO,LIVE. Values: VIDEO, LIVE, SHOWCASE. | |
| revenue_growth | No | Filter. Revenue growth vs the previous equal window, percent, e.g. >30. | |
| creator_conversion | No | Filter. Percent of creators who made a sale, e.g. >45. | |
| launched_within_days | No | Filter. Only products launched in the last N days. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: the ~700-row cap per keyword, max_rows scanning up to 3,000 (US only, keyword required, not with category), limits above a method maximum being silently lowered and reported in notes, and window ending at the last complete day. It omits how the 'estimated' revenue is derived, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is returned, then defaults, sorting, filters, region, and examples — a sensible order. The mid-sentence filter enumeration ('Filters: revenue, units, growth, price...') largely restates the schema property names and is the least earned portion, but the rest is dense and information-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 25-parameter tool, the description covers default behavior, row caps, paging, region support, sort/order interaction, and no-parameter fallback, and an output schema plus annotations carry return shape and safety. An agent has everything needed to call it correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description goes beyond the schema by explaining interaction semantics — keyword plus category narrows further, category needs keyword sweeps, sort=growth favors brand-new items (>999.9%) and should be paired with a revenue/units filter, order=asc is useful to skip dead listings. Two worked examples make the intended combinations concrete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific resource (TikTok Shop products) and the exact ranking/return surface (revenue, units, channel split, growth, price, commission, creators, launch date, daily trend) over a date range. It also names the sibling it is not: 'Shopper's live view: shop_browse.' An agent can distinguish this from shop_top_selling/product without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit rules for the key decision: keyword, category, or neither (neither yields the top 10 for the most recent days regardless of window), plus a note that category alone merges generic keyword sweeps. It routes to shop_browse for the live shopper view. It does not explicitly contrast with shop_top_selling or creator_top_selling, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
referenceReference listsARead-onlyIdempotentInspect
Static lists other tools need: Creator Search Insights channels and languages, Explore category ids, LIVE gift coin prices, Ad Library regions, Creative Partner markets, and the Shop Analytics filters and sort fields. Example: {"method":"sales_filters"}.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. csi_channels: demand_find_topics feeds and trending categories | csi_languages: language codes for demand_find_topics | explore_categories: category ids for video_feed method=explore | live_gifts: LIVE gifts and their coin prices | ad_regions: EU/UK regions the Ad Library covers | creative_markets: Creative Partner markets and dates | sales_filters: every Shop Analytics filter, its values and sort fields |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds only the fact that the data is 'static', which usefully signals stability/cacheability, but it says nothing about size, output shape, or the cost implied by detail=full.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that defines the resource, followed by a concrete example call. The enumeration is long but every item corresponds to a real enum value, so it earns its space; a tighter grouping could still trim a few words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, 100% parameter coverage, and complete annotations, the description only needs to establish what the tool is and why it exists. It does that; the only residual gap is not explaining what detail=full costs or what the lists look like structurally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are enums with per-value documentation, so the schema carries the semantics. The description contributes a single example invocation ({"method":"sales_filters"}) but adds no meaning beyond the enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely and enumerates the exact list families returned (CSI channels/languages, explore category ids, LIVE gift coin prices, ad regions, creative markets, sales filters). It implicitly separates itself from siblings by framing everything as 'static lists other tools need' rather than queries, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Static lists other tools need' plus the listed mappings (e.g. csi_channels feeding demand_find_topics, explore_categories feeding video_feed method=explore) tell an agent when to reach for this tool: to resolve ids/codes before calling another tool. It lacks an explicit statement of when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shopOne TikTok Shop sellerARead-onlyIdempotentInspect
Everything about one TikTok Shop seller (id = sellerId, found on any of its products, or with shop_top_selling keyword=). Live: store (what shoppers see: rating, followers, catalogue). [Shop Analytics, any market via region]: sales (revenue, units, affiliate vs own vs mall), trend (daily), products, new_products, strategy (pricing, top affiliates unnamed), creators, videos, new_affiliates and affiliate_videos (daily counts with summary). Example: {"id":"7495514739648989419","method":"new_affiliates","window":"30d"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Seller id (sellerId on products and stores). | |
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| slug | No | method=store: store slug if known; looked up when omitted. | |
| limit | No | Results per page. Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. store: live storefront: rating, sold, followers, products | sales [Shop Analytics]: revenue and units, split by own accounts, affiliates and mall | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | products [Shop Analytics]: its products ranked by revenue | new_products [Shop Analytics]: products it launched in the window | strategy [Shop Analytics]: price bands and sales-channel mix: top affiliates (individuals unnamed) and the shop's own accounts | creators [Shop Analytics]: affiliate creators selling for it, with revenue | videos [Shop Analytics]: videos selling its products, with revenue | new_affiliates [Shop Analytics]: daily count of new affiliates who started promoting the shop, with a summary | affiliate_videos [Shop Analytics]: daily count of new videos affiliates posted for the shop, with a summary | store |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered; the description adds the meaningful split that 'store' is live shopper-facing data while the other methods are Shop Analytics and market-dependent via region. It also discloses that strategy data leaves individual affiliates unnamed, which is behavioral context the schema does not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and the id-resolution hint, then the method inventory, then an example. Dense but every clause carries information; the inline method enumeration is long but justified for a 10-method multi-purpose tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full annotation coverage and 100%-documented parameters, the description only needs to orient the agent, which it does. Minor gaps remain: paging via cursor and the compact/full detail tradeoff are only in the schema, not reinforced here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the method enum already carries per-value explanations, so the description's method list largely restates structured data. The one added element is a concrete example invocation showing id + method + window together, which is helpful but marginal against an already complete schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope ('Everything about one TikTok Shop seller') and immediately enumerates the two families of data available (live storefront vs Shop Analytics methods). It also tells the agent how the required id is obtained and names siblings (shop_top_selling, shop_regions), so it is distinguishable without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance for the required id (found on products, or via shop_top_selling with keyword=<shop name>) and points to shop_regions for market support, with the constraint that unsupported countries are refused. It does not explicitly contrast this tool with shop_browse, but the method list makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_browseBrowse TikTok Shop nowARead-onlyInspect
What a shopper sees on TikTok Shop (US store) right now: search results, keyword and category pages, deals and flash sales. Returns price, discount, displayed units sold, rating and shop. Displayed sold counts are lifetime and broad single-word searches can return only a short fallback list, so this is not a sales ranking: use product_top_selling for best sellers. Example: {"keyword":"lip oil","sort":"best_sellers"}.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | method=path: any other Shop path, e.g. store/{slug}/{seller_id} or deals/premium-offers. | |
| slug | No | method=keyword_page: slug from relatedSearches (e.g. lip-oils); method=category_page: category slug. | |
| sort | No | method=search: best_sellers, newest, price_desc or price_asc (default relevance). The result's sortApplied says whether TikTok sorted the results (tiktok) or only this page was sorted (page). | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. search: Shop search results | keyword_page: an SEO keyword page (slug) | category_page: a category page (category_id + slug) | deals: the deals feed | flash_sales: flash sales | path: any other Shop page by path | search |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| filters | No | method=search or keyword_page: TikTok filter ids from a previous response's filters, e.g. ecom_rating_stat|RATING_4. | |
| keyword | No | method=search: product search phrase. | |
| category_id | No | method=category_page: category id from relatedCategories. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, open-world, non-idempotent behavior, so the bar is lower; the description still adds real value by disclosing that displayed sold counts are lifetime and that results can be a truncated fallback list. It stops short of covering paging semantics or the region-refusal behavior, which are only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences: scope, return fields, then the caveat-plus-alternative, closing with a compact example. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, fully documented, output-schema-backed read tool, the description covers what is browsed, what comes back, the main data-quality caveat, and the correct sibling alternative. Nothing needed to select or call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum semantics (method, sort, detail, region) are already documented there, so baseline 3 applies. The description's example adds marginal illustration of keyword+sort but no syntax or meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: what a shopper sees on TikTok Shop (US) right now, covering search, keyword/category pages, deals and flash sales. It also lists the returned fields (price, discount, units sold, rating, shop), so the agent knows exactly what this yields versus siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly excludes itself from sales-ranking use and routes the agent to product_top_selling for best sellers, and warns that broad single-word searches return only a short fallback list. The inline example {"keyword":"lip oil","sort":"best_sellers"} demonstrates the intended default invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_regionsShop Analytics marketsARead-onlyIdempotentInspect
Lists the TikTok Shop markets Shop Analytics covers, with each market's currency, language and tier. core = the 13 main markets; extended = Poland, Italy, the Netherlands and Ireland, which Shop Analytics also answers with local data. Pass the code as region to any Shop Analytics tool; other countries are refused. Default market is US. Example: {}.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuine behavioral context not in annotations: the core vs. extended tier split and the hard rejection of unlisted countries downstream. It doesn't describe response size or pagination behavior, though an output schema exists to cover return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences: what it returns, the tier taxonomy, the downstream contract, the refusal/default rule. Front-loaded and zero filler; even the example call earns its place as a minimal-invocation hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param lookup with a full output schema, everything an agent needs is present: how markets are grouped, the default, and the consequence of using an unsupported region elsewhere. The only untouched detail is the optional 'detail' flag, which the schema handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One optional parameter with 100% schema description coverage, so the schema already explains compact vs. full. The description never mentions 'detail' at all and instead shows 'Example: {}', implicitly framing the call as parameterless. Baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the TikTok Shop markets Shop Analytics covers') plus what each entry carries (currency, language, tier). It also carves out the tool's role relative to siblings: it is the lookup you consult before passing a region code to a Shop Analytics tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent what to do with the output ('Pass the code as region to any Shop Analytics tool'), what is out of scope ('other countries are refused'), and what happens by default ('Default market is US'). No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shop_top_sellingTop-selling TikTok Shop sellersARead-onlyIdempotentInspect
[Shop Analytics] TikTok Shop sellers ranked by estimated sales over a date range: revenue, units, growth, average price, and revenue split across own accounts, affiliates and the mall. keyword = a shop or brand name, matched loosely, e.g. 'medicube'; not a product type. For the shops behind a product type or category, rank products with product_top_selling, then product method=page on the top items gives their sellerId. Without a keyword: the top 10 shops for the most recent days (about 6). type=brands lists the top 10 brands. No category scope for shops. Up to 100 rows per page with cursor paging, about 500 rows per keyword. sort: revenue, units or growth; order=asc lists lowest first. Filters: revenue, growth, price, revenue source, seller type. region picks the market (default US). Examples: {"keyword":"medicube","window":"90d"}, {"type":"brands","region":"GB"}.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| sort | No | Ranking metric: growth, revenue, units. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter. Applies with a keyword. | |
| type | No | shops (default) or brands (the top 10 brands for the most recent days; keyword, filters and sort do not apply). | |
| limit | No | Results per page. Max 100 per page; pass next as cursor for the following page. Up to about 500 rows per keyword. Without a keyword: 10 rows. Values above a method's maximum are lowered and reported in notes. | |
| order | No | desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword. | |
| price | No | Filter. Average selling price in the market's currency, e.g. 20-100. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. | |
| keyword | No | A shop or brand NAME, matched loosely against shop names, e.g. 'medicube'. It does not match product types: 'skincare' finds shops with that word in their name. For the shops behind a product type or category, rank products with product_top_selling (category or a product keyword), call product method=page on the top items for their sellerId, then use shop or call this tool with the brand names found. If keyword is omitted, the result is the top 10 shops for the most recent days (about 6), whatever window is set: pass a shop or brand name when the user wants more than 10 rows or a specific window. | |
| revenue | No | Filter. Shop revenue in the market's currency over the window, e.g. >100000. | |
| seller_type | No | Filter. BRAND or RETAILER. | |
| revenue_growth | No | Filter. Revenue growth percent vs the previous window, e.g. >30. | |
| revenue_source | No | Filter. Main revenue source: own accounts, affiliates, or the mall. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the read-only/idempotent safety profile, and the description adds real behavioral context beyond them: cursor paging up to 100 per page with roughly 500 rows per keyword, the quirk that omitting keyword returns only the top 10 for the most recent ~6 days regardless of window, and that sort/order only apply with a keyword. These are the non-obvious behaviors an agent would otherwise discover only by failing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and metrics before the conditional rules, and the two inline JSON examples make the call shape concrete. It is a single dense paragraph that partly repeats schema content (filter enumeration, paging limits), so it is efficient but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 16 optional parameters, an output schema, and full annotation coverage, the description supplies exactly the missing layer: which parameter combinations are meaningful, what defaults produce, and how to reach seller IDs via sibling tools. Nothing an agent needs before invoking it is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond it by disambiguating keyword (a shop/brand name matched loosely, not a product type, with a concrete 'medicube' example) and by explaining the interaction between type, keyword, sort and order. It still largely restates the filter list rather than adding new semantics for each filter, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource — TikTok Shop sellers ranked by estimated sales over a date range — and enumerates the returned metrics (revenue, units, growth, average price, revenue split). It explicitly distinguishes itself from product_top_selling, which covers the product/category angle, so an agent can tell the two apart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use branches: keyword present vs omitted, type=brands versus default shops, and a full workaround path for the shops behind a product type (product_top_selling → product method=page → sellerId). It also states exclusions, e.g. no category scope for shops and that filters/sort do not apply with type=brands.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
soundOne soundARead-onlyIdempotentInspect
One TikTok sound (id = sound id from any post or sound_search, or a sound link): detail or the videos using it. Example: {"id":"7012...","method":"videos"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Sound id (sound.id on a post) or a TikTok sound link. | |
| limit | No | Results per page. Max 50. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. detail: title, author, duration, original or licensed, post count | videos: videos using the sound | detail |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds the accepted id formats and a concrete invocation example, but says nothing about pagination behavior or the notes mechanism that the schema mentions for clamped limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences plus a minimal example, with the id sourcing rule front-loaded. The telegraphic phrasing costs a little readability but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and all five parameters are fully documented in the schema. What remains missing is minor: no guidance on paging through many videos or on the relationship between limit and the method-specific maximum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains id, limit, cursor, detail and method. The description's example clarifies how id and method combine in practice, but adds no semantics the schema does not already carry; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (one TikTok sound) and the two modes it supports (detail or videos using it), and points at sound_search as the id source, which separates it from the search sibling. The verb is elliptical ("detail or the videos using it"), so the operation has to be inferred, but the intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the precondition (you must already have a sound id or link) and tells you sound_search is how ids are found, plus that method selects detail vs videos. There is no explicit when-not or statement of what the tool returns versus the search tool, so routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sound_searchFind soundsARead-onlyInspect
Finds TikTok sounds by keyword, or lists TikTok's hot sounds, beats and licensed music. Pass a sound id to sound for its videos. Example: {"keyword":"sped up"} or {"method":"hot"}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page. Max 30. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. keyword: sounds matching keyword | hot: currently hot original sounds | beats: recommended beats | licensed: licensed tracks cleared for use | |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| keyword | No | method=keyword: search phrase. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, non-idempotent, and non-destructive, so the safety profile is fully covered and the description needn't repeat it. The description adds the mode taxonomy and the sibling hand-off, but says nothing about result volume, paging behavior, or region-refusal edges beyond what the schema states. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose and mode enumeration, followed by compact inline examples. The final example clause overlaps slightly with the first sentence but cheaply reinforces how to invoke the tool rather than wasting space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description only needs to convey modes and routing, which it does. The remaining gap is the conditional relationship between `method` and `keyword` (keyword only applies to method=keyword), which an agent must infer from the schema rather than the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (limit, cursor, detail, method, region, keyword) is already documented in detail, including the method enum semantics and region restrictions. The description's examples illustrate keyword and method usage but add no syntax or constraint information beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (finds TikTok sounds) and enumerates the four distinct result sets: keyword matches, hot original sounds, beats, and licensed music. It also explicitly distinguishes itself from the sibling `sound` tool by telling the agent to pass an id there for a sound's videos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes mode selection concrete with two literal example invocations (`{"keyword":"sped up"}` and `{"method":"hot"}`) and routes id-based lookups to the sibling `sound` tool. It stops short of stating exclusions or preconditions, such as that `keyword` is required when `method=keyword` or that region restrictions apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
videoOne TikTok videoARead-onlyIdempotentInspect
Everything about one video or photo post: detail, comments, replies, caption transcript, similar videos, and [Shop Analytics; region picks the market] the revenue it drove and the products it sold. Use the post id or link from any other tool. Examples: {"id":"https://vt.tiktok.com/...","method":"transcript"}, {"id":"7694...","method":"sales"}. method=comment_themes lists the keywords TikTok extracts from the comments, each with sample comments. Example: {"id":"7691388445251439924","method":"comment_themes"}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Video or photo post: a TikTok link (short vm./vt. links work), or the numeric post id (videos[].id). Not needed for method=captions. | |
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| sort | No | method=comments: relevant (TikTok's order, default) or newest. | |
| limit | No | Results per page. comments and replies max 50, similar max 30; Shop Analytics methods max 100. Values above a method's maximum are lowered and reported in notes. | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. detail: counts, creator, hashtags, sound, place, linked products, caption tracks | comments: top-level comments | replies: replies to one comment (comment_id) | transcript: existing captions as plain text (nothing is transcribed) | captions: one caption file as WebVTT (subtitle_url, or the video id: English track first) | similar: videos TikTok relates to this one | sales [Shop Analytics]: revenue, units and ad metrics the video drove | products [Shop Analytics]: products sold through the video, with revenue | product_trend [Shop Analytics]: daily sales of the video's products | similar_revenue [Shop Analytics]: how similar videos performed | comment_themes: keywords TikTok extracts from the comments, with sample comments | detail |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. | |
| language | No | method=transcript: preferred caption language, e.g. en. | |
| comment_id | No | method=replies: the comment id from method=comments. | |
| subtitle_url | No | method=captions: a caption URL from method=detail (captions[].url). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so safety is covered. The description adds the non-obvious behavioral split that Shop Analytics methods are region-scoped and priced in the market's currency, which materially affects result interpretation. It omits operational behavior such as capping/pagination consequences, which live only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the scope sentence, then capabilities, then usage, then a targeted comment_themes clarification with its own example. Dense but every clause carries information; the appended comment_themes paragraph is slightly tacked-on after the general examples.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% schema description coverage, the description need not explain return values, and it covers every method family an agent would need at selection time. The remaining details (limits, cursors, region refusals) are fully handled in the schema, so nothing required to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns one more by giving concrete invocation shapes for two different methods plus a dedicated comment_themes example, which reduces method/parameter mismatches in a 13-parameter dispatcher. The added meaning is mostly illustrative rather than new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource — one video or photo post — and enumerates the retrievable facets (detail, comments, replies, transcript, similar, Shop Analytics revenue/products), so an agent can immediately tell it is a single-post lookup rather than a discovery tool. It never explicitly contrasts itself with video_search or video_feed, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use the post id or link from any other tool" tells the agent this is the follow-up call after a search, and the worked examples show correct id+method pairings. It stops short of stating when to prefer comments over comment_themes or transcript over captions beyond what the method prose implies, and names no alternatives to itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_feedTikTok feedsARead-onlyInspect
Samples TikTok's own feeds: For You (as a neutral US viewer), Explore categories, and Discover creators/hashtags/sounds. Samples, not rankings. Example: {"method":"explore","category_id":3}. Category ids come from reference method=explore_categories.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page. for_you, discover max 30; explore, discover_hashtags max 20. Values above a method's maximum are lowered and reported in notes. | |
| scene | No | method=discover: Discover scene (15 is the full catalogue). | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. for_you: a page of the For You feed | explore: videos from one Explore category | discover: Discover picks: creators, hashtags, sounds | discover_hashtags: Discover hashtags with sample videos | for_you |
| category_id | No | method=explore: id from reference method=explore_categories. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/openWorld annotations by disclosing that For You is sampled 'as a neutral US viewer' (a geo/personalization caveat an agent cannot infer) and that results are a sample rather than a ranking. Limit-cap lowering is already handled in the schema, so the remaining gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences plus a concrete example, with the most decision-relevant fact ('Samples, not rankings') front-loaded. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, rich annotations, and an output schema, the description only needs to cover intent and sampling semantics, which it does. Minor omission: no mention that the different methods have different page-size ceilings (that lives only in the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds an example invocation ({'method':'explore','category_id':3}) and reiterates where category_id values originate, which links parameters across tools rather than restating field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('samples') and resource ('TikTok's own feeds') and enumerates the three feed families: For You, Explore categories, and Discover (creators/hashtags/sounds). 'Samples, not rankings' plus 'TikTok's own feeds' cleanly separates it from sibling search tools (video_search, hashtag_search) and ranking tools (video_top_selling).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a prerequisite dependency — category ids come from reference method=explore_categories — which is genuinely useful routing information. However, it never states when to prefer this over video_search or video_top_selling; the distinction is only implied by the word 'samples'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_searchSearch TikTok videosARead-onlyIdempotentInspect
Searches TikTok posts by keyword, as TikTok's own search returns them now: views, likes, comments, shares, saves, creator, hashtags, sound and linked Shop products. Not a sales ranking (use video_top_selling). Example: {"keyword":"home gym","sort":"most_liked","date":"month"}.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | method=videos: only posts from this window (default any). | |
| sort | No | method=videos: relevance (default), most_liked or newest. | |
| limit | No | Results per page. videos and photos max 20, all max 30. Values above a method's maximum are lowered and reported in notes. | |
| cursor | No | Paging: pass the next value from the previous response unchanged. Omit on the first page. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| method | No | What to get. videos: video posts | photos: photo carousel posts | all: mixed results (often empty) | videos |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| keyword | Yes | Search phrase, e.g. 'lip oil'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context by listing the specific data points returned by the search (views, likes, shares, etc.). While annotations handle safety and read-only status, this context helps the agent understand the 'result' behavior of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and efficient, dedicating its space to the two most important pieces of information: the core function and the critical differentiation from other available search functions. The example format is also front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high schema coverage, the description successfully fulfills its role by focusing on usage context (return fields) and scoping (not sales ranking), providing all necessary information for the agent to select and invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema is 100% covered, the description adds semantic meaning by providing a practical call example. This example demonstrates how to combine `keyword`, `sort`, and `date`, offering guidance on parameter interaction that the schema does not detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function—searching TikTok posts—and immediately distinguishes it from a related sibling tool by noting it is 'Not a sales ranking' tool, directing users to 'video_top_selling' instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a specific usage guideline by stating that this tool retrieves the full suite of TikTok metrics (views, likes, etc.). Crucially, it advises against using this for sales ranking, steering the user to the correct alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_top_sellingTop-selling TikTok Shop videosARead-onlyIdempotentInspect
[Shop Analytics] The top 10 shoppable videos by estimated revenue over a date range, with revenue, units, views, GPM, ad metrics (CPA, ROAS, ad revenue share), whether it is AI-generated, and the creator. This ranking takes no filters; to study one niche, rank its products with product_top_selling, then use product method=video_sales. Pass a row's id to video method=transcript or products. Example: {"window":"7d"}.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Shop Analytics methods: custom range end, YYYY-MM-DD (capped at the last complete day). | |
| start | No | Shop Analytics methods: custom range start, YYYY-MM-DD. | |
| detail | No | compact (default) returns the useful fields; full adds the full raw record (large). | compact |
| region | No | Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions. | |
| window | No | Shop Analytics methods: date range ending at the last complete day (about 2 days ago). Default 30d. Use start/end for a custom range. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety bar is met structurally; the description adds that the result is a fixed top-10 ranking by estimated revenue and what dimensions it exposes. It does not discuss the estimation methodology or any latency/cost characteristics, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the definition and metric, then routing, then an example — no filler. The middle routing clauses are somewhat compressed and could be skimmed past, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not describe return values, so the field listing is bonus rather than required; the schema, annotations, and routing advice together cover what an agent needs to invoke it. The one soft spot is the blanket 'takes no filters' claim sitting next to region/start/end/window scoping parameters, which could momentarily confuse the scope of the result set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter documentation baseline is 3; the description earns an increment by supplying a concrete call example ({"window":"7d"}) and by clarifying that none of the available parameters act as content filters on the ranking. It does not itself explain region currency behavior, which the schema carries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+metric: the top 10 shoppable videos ranked by estimated revenue over a date range, and enumerates the returned fields (revenue, units, views, GPM, ad metrics, AI-generated flag, creator). It distinguishes itself from siblings by noting the ranking takes no filters and by routing niche analysis to product_top_selling instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when-not to use it ('takes no filters') and names the alternative workflow: rank a niche's products with product_top_selling, then product method=video_sales. It also tells the agent the next hop ('Pass a row's id to video method=transcript or products'), which is actionable routing, not inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
31 tool updates
- Changed
ad_library1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
category_trends3 fields changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)." - changed
Input schema / properties / keyword / descriptionPrevious value: -"method=search: category name to look up in the data source, e.g. 'serum'. method=tree: text to find in category names, e.g. 'skincare'."New value: +"method=search: category name to look up, e.g. 'serum'. method=tree: text to find in category names, e.g. 'skincare'." - changed
Input schema / properties / method / descriptionPrevious value: -"What to get. list [Shop Analytics]: categories with revenue, growth and concentration | products [Shop Analytics]: a category's top product ids (US market only) | search [Shop Analytics]: find category names and ids by keyword | tree: category names and ids to use as category | market_size [Shop Analytics]: how many products, shops, creators, videos, LIVEs and brands the source tracks"New value: +"What to get. list [Shop Analytics]: categories with revenue, growth and concentration | products [Shop Analytics]: a category's top product ids (US market only) | search [Shop Analytics]: find category names and ids by keyword | tree: category names and ids to use as category | market_size [Shop Analytics]: how many products, shops, creators, videos, LIVEs and brands Shop Analytics tracks"
- Changed
charts1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
creative_center1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
creator1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
creator_commerce2 fields changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)." - changed
Input schema / properties / method / descriptionPrevious value: -"What to get. linked_products: each product linked in recent posts, with post count, views and likes (not sales) | sales [Shop Analytics]: revenue, units, video vs LIVE, average price | trend [Shop Analytics]: daily revenue (up to ~13 months) | products [Shop Analytics]: products they sold, with revenue | shops [Shop Analytics]: shops (brands) they sell for, with revenue | videos [Shop Analytics]: their selling videos, with revenue | audience [Shop Analytics]: follower age, gender, top locations and languages, active hours (when the source has built it)"New value: +"What to get. linked_products: each product linked in recent posts, with post count, views and likes (not sales) | sales [Shop Analytics]: revenue, units, video vs LIVE, average price | trend [Shop Analytics]: daily revenue (up to ~13 months) | products [Shop Analytics]: products they sold, with revenue | shops [Shop Analytics]: shops (brands) they sell for, with revenue | videos [Shop Analytics]: their selling videos, with revenue | audience [Shop Analytics]: follower age, gender, top locations and languages, active hours (when Shop Analytics has built it)"
- Changed
creator_playlist1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
creator_search1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
creator_top_selling2 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: [\"Skincare\"], [\"Pet Supplies\"], [\"Beauty & Personal Care\",\"Health\"] or [\"601450\"]. Without a keyword the creators of the category are found by merging several generic keyword searches (the source needs a keyword), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree."New value: +"Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: [\"Skincare\"], [\"Pet Supplies\"], [\"Beauty & Personal Care\",\"Health\"] or [\"601450\"]. Without a keyword the creators of the category are found by merging several generic keyword searches (a keyword is needed), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree." - changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
demand_find_topics1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
demand_keywords1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
demand_topic1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
hashtag1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
hashtag_search1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
live1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
live_search1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
live_top_selling1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
place1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
product2 fields changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)." - changed
Input schema / properties / method / descriptionPrevious value: -"What to get. page: live price, SKUs and stock, sold, rating, shop | reviews: public reviews | related: products TikTok shows as related | videos: the videos on the product page (first page only) | sales [Shop Analytics]: revenue, units, video/LIVE/showcase split, creator count, conversion (ids: up to 20 products) | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | creators [Shop Analytics]: creators selling it, ranked, with revenue | video_sales [Shop Analytics]: videos selling it, with revenue | skus [Shop Analytics]: sales by variant (SKU) | analysis [Shop Analytics]: selling-point highlights and attributes the source extracts for the product | conversion [Shop Analytics]: how many creators promote it and what share of them made sales | review_insights [Shop Analytics]: AI summary of reviews: pain points, praise, use cases (by_sku splits by variant)"New value: +"What to get. page: live price, SKUs and stock, sold, rating, shop | reviews: public reviews | related: products TikTok shows as related | videos: the videos on the product page (first page only) | sales [Shop Analytics]: revenue, units, video/LIVE/showcase split, creator count, conversion (ids: up to 20 products) | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | creators [Shop Analytics]: creators selling it, ranked, with revenue | video_sales [Shop Analytics]: videos selling it, with revenue | skus [Shop Analytics]: sales by variant (SKU) | analysis [Shop Analytics]: selling-point highlights and attributes Shop Analytics extracts for the product | conversion [Shop Analytics]: how many creators promote it and what share of them made sales | review_insights [Shop Analytics]: AI summary of reviews: pain points, praise, use cases (by_sku splits by variant)"
- Changed
product_top_selling2 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: [\"Skincare\"], [\"Pet Supplies\"], [\"Beauty & Personal Care\",\"Health\"] or [\"601450\"]. Without a keyword the products of the category are found by merging several generic keyword searches (the source needs a keyword), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree."New value: +"Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: [\"Skincare\"], [\"Pet Supplies\"], [\"Beauty & Personal Care\",\"Health\"] or [\"601450\"]. Without a keyword the products of the category are found by merging several generic keyword searches (a keyword is needed), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree." - changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
reference1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
shop1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
shop_browse1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
shop_regions1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
shop_top_selling1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
sound1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
sound_search1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
video1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
video_feed1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
video_search1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
- Changed
video_top_selling1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"compact (default) returns the useful fields; full adds the raw upstream payload (large)."New value: +"compact (default) returns the useful fields; full adds the full raw record (large)."
1 tool update
- Added
my_account
1 tool update
- Changed
video1 field changed- changed
Input schema / properties / method / descriptionPrevious value: -"What to get. detail: counts, creator, hashtags, sound, place, linked products, caption tracks | comments: top-level comments | replies: replies to one comment (comment_id) | transcript: existing captions as plain text (nothing is transcribed) | captions: one caption file as WebVTT (subtitle_url) | similar: videos TikTok relates to this one | sales [Shop Analytics]: revenue, units and ad metrics the video drove | products [Shop Analytics]: products sold through the video, with revenue | product_trend [Shop Analytics]: daily sales of the video's products | similar_revenue [Shop Analytics]: how similar videos performed | comment_themes: keywords TikTok extracts from the comments, with sample comments"New value: +"What to get. detail: counts, creator, hashtags, sound, place, linked products, caption tracks | comments: top-level comments | replies: replies to one comment (comment_id) | transcript: existing captions as plain text (nothing is transcribed) | captions: one caption file as WebVTT (subtitle_url, or the video id: English track first) | similar: videos TikTok relates to this one | sales [Shop Analytics]: revenue, units and ad metrics the video drove | products [Shop Analytics]: products sold through the video, with revenue | product_trend [Shop Analytics]: daily sales of the video's products | similar_revenue [Shop Analytics]: how similar videos performed | comment_themes: keywords TikTok extracts from the comments, with sample comments"
22 tool updates
- Added
ad_library - Changed
category_trends1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Added
charts - Changed
creative_center1 field changed- changed
Input schema / properties / country / descriptionPrevious value: -"method=top_videos: JP (default), VN, TH, ID or US. method=partners: market code from reference method=creative_markets, e.g. TH."New value: +"method=top_videos: US (default), JP, VN, TH or ID. method=partners: market code from reference method=creative_markets, e.g. TH (default US, where TikTok lists no partners)."
- Changed
creator4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Results per page. posts max 35, stories max 10, others max 30. Values above a method's maximum are lowered and reported in notes."New value: +"Results per page. posts max 35, others max 30. Values above a method's maximum are lowered and reported in notes." - changed
Input schema / properties / method / descriptionPrevious value: -"What to get. profile: followers, likes, videos, bio, link, verified, Shop seller, ids | posts: posts, newest first, with counts and linked products | reposts: posts the creator reposted | likes: public Liked tab (empty when hidden) | stories: Stories up now (they expire) | followers: followers, when TikTok shows them (usually hidden) | following: accounts followed, when shown (usually hidden) | embed: posts in the creator's embed widget | playlists: public playlists (ids for creator_playlist) | collections: public saved collections (often empty)"New value: +"What to get. profile: followers, likes, videos, bio, link, verified, Shop seller, ids | posts: posts, newest first, with counts and linked products | reposts: posts the creator reposted | likes: public Liked tab (empty when hidden) | followers: followers, when TikTok shows them (usually hidden) | following: accounts followed, when shown (usually hidden) | embed: posts in the creator's embed widget | playlists: public playlists (ids for creator_playlist) | collections: public saved collections (often empty) | audit: registered country, ids, TikTok milestones (started posting, follower marks) | lookalikes: accounts TikTok suggests as similar" - changed
Input schema / properties / method / enumPrevious value: -[ - "profile", - "posts", - "reposts", - "likes", - "stories", - "followers", - "following", - "embed", - "playlists", - "collections" -]New value: +[ + "profile", + "posts", + "reposts", + "likes", + "followers", + "following", + "embed", + "playlists", + "collections", + "audit", + "lookalikes" +] - added
Input schema / properties / regionAdded value: +{ + "description": "Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
creator_commerce1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
creator_top_selling1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Removed
effect - Changed
hashtag1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
live1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
live_search1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
live_top_selling1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
product1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
product_top_selling1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
shop1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
shop_browse1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
shop_top_selling1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
sound_search1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
video3 fields changed- changed
Input schema / properties / method / descriptionPrevious value: -"What to get. detail: counts, creator, hashtags, sound, place, linked products, caption tracks | comments: top-level comments | replies: replies to one comment (comment_id) | transcript: existing captions as plain text (nothing is transcribed) | captions: one caption file as WebVTT (subtitle_url) | similar: videos TikTok relates to this one | sales [Shop Analytics]: revenue, units and ad metrics the video drove | products [Shop Analytics]: products sold through the video, with revenue | product_trend [Shop Analytics]: daily sales of the video's products | similar_revenue [Shop Analytics]: how similar videos performed"New value: +"What to get. detail: counts, creator, hashtags, sound, place, linked products, caption tracks | comments: top-level comments | replies: replies to one comment (comment_id) | transcript: existing captions as plain text (nothing is transcribed) | captions: one caption file as WebVTT (subtitle_url) | similar: videos TikTok relates to this one | sales [Shop Analytics]: revenue, units and ad metrics the video drove | products [Shop Analytics]: products sold through the video, with revenue | product_trend [Shop Analytics]: daily sales of the video's products | similar_revenue [Shop Analytics]: how similar videos performed | comment_themes: keywords TikTok extracts from the comments, with sample comments" - changed
Input schema / properties / method / enumPrevious value: -[ - "detail", - "comments", - "replies", - "transcript", - "captions", - "similar", - "sales", - "products", - "product_trend", - "similar_revenue" -]New value: +[ + "detail", + "comments", + "replies", + "transcript", + "captions", + "similar", + "sales", + "products", + "product_trend", + "similar_revenue", + "comment_themes" +] - changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
- Changed
video_feed3 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Results per page. for_you, discover max 30; explore, discover_hashtags, effects max 20. Values above a method's maximum are lowered and reported in notes."New value: +"Results per page. for_you, discover max 30; explore, discover_hashtags max 20. Values above a method's maximum are lowered and reported in notes." - changed
Input schema / properties / method / descriptionPrevious value: -"What to get. for_you: a page of the For You feed | explore: videos from one Explore category | discover: Discover picks: creators, hashtags, sounds | discover_hashtags: Discover hashtags with sample videos | effects: videos from the effects feed (with effect ids)"New value: +"What to get. for_you: a page of the For You feed | explore: videos from one Explore category | discover: Discover picks: creators, hashtags, sounds | discover_hashtags: Discover hashtags with sample videos" - changed
Input schema / properties / method / enumPrevious value: -[ - "for_you", - "explore", - "discover", - "discover_hashtags", - "effects" -]New value: +[ + "for_you", + "explore", + "discover", + "discover_hashtags" +]
- Changed
video_search1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
video_top_selling1 field changed- changed
Input schema / properties / region / descriptionPrevious value: -"Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions."New value: +"Market as an ISO country code, default US. Shop Analytics methods: sales data for that market, amounts in its currency. Live methods that take it (search, video detail, creator posts, Shop pages): TikTok as seen in that market where TikTok serves it. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. See shop_regions."
1 tool update
- Changed
shop_browse1 field changed- changed
Input schema / properties / sort / descriptionPrevious value: -"method=search: best_sellers, newest, price_desc or price_asc (default relevance)."New value: +"method=search: best_sellers, newest, price_desc or price_asc (default relevance). The result's sortApplied says whether TikTok sorted the results (tiktok) or only this page was sorted (page)."
3 tool updates
- Changed
creator_top_selling3 fields changed- changed
Input schema / properties / keyword / descriptionPrevious value: -"Matched against creator names, handles and bios (not the products they sell): 'pet' finds accounts like 'Pet Finds'. For a niche's affiliates, rank the niche with product_top_selling, then call product method=creators on the top items. Omit for the overall top 10, or pass category."New value: +"Matched against creator names, handles and bios (not the products they sell): 'pet' finds accounts like 'Pet Finds'. For the affiliates of a product type, pass category, or rank products with product_top_selling and call product method=creators on the top items. If keyword and category are both omitted, the result is the top 10 creators for the most recent days (about 6), whatever window is set: pass a keyword or category when the user wants more than 10 rows or a specific window." - changed
Input schema / properties / limit / descriptionPrevious value: -"Results per page. Max 100 per page; up to 700 rows per keyword. Values above a method's maximum are lowered and reported in notes."New value: +"Results per page. Max 100 per page; pass next as cursor for the following page. Up to about 700 rows per keyword. Without a keyword or category: 10 rows. Values above a method's maximum are lowered and reported in notes." - changed
Input schema / properties / sort / descriptionPrevious value: -"Ranking metric. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."New value: +"Ranking metric: followers, growth, revenue, units. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter. Applies with a keyword or category."
- Changed
product_top_selling3 fields changed- changed
Input schema / properties / keyword / descriptionPrevious value: -"Product search phrase, e.g. 'vitamin c serum'. Omit for the overall top 10."New value: +"Words from product titles, e.g. 'vitamin c serum' or 'lip oil'. Ranks every matching product over your window. If keyword and category are both omitted, the result is the top 10 products for the most recent days (about 6), whatever window is set: pass a keyword or category when the user wants more than 10 rows or a specific window." - changed
Input schema / properties / limit / descriptionPrevious value: -"Results per page. Max 100 per page; up to 700 rows per keyword. Values above a method's maximum are lowered and reported in notes."New value: +"Results per page. Max 100 per page; pass next as cursor for the following page. Up to about 700 rows per keyword (max_rows scans up to 3,000 in the US). Without a keyword or category: 10 rows. Values above a method's maximum are lowered and reported in notes." - changed
Input schema / properties / sort / descriptionPrevious value: -"Ranking metric. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."New value: +"Ranking metric: creators, growth, price, revenue, units. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter. Applies with a keyword or category."
- Changed
shop_top_selling5 fields changed- changed
Input schema / properties / keyword / descriptionPrevious value: -"Shop or brand name or niche, e.g. 'skincare'. Omit for the overall top 10."New value: +"A shop or brand NAME, matched loosely against shop names, e.g. 'medicube'. It does not match product types: 'skincare' finds shops with that word in their name. For the shops behind a product type or category, rank products with product_top_selling (category or a product keyword), call product method=page on the top items for their sellerId, then use shop or call this tool with the brand names found. If keyword is omitted, the result is the top 10 shops for the most recent days (about 6), whatever window is set: pass a shop or brand name when the user wants more than 10 rows or a specific window." - changed
Input schema / properties / limit / descriptionPrevious value: -"Results per page. Max 100 per page; up to 700 rows per keyword. Values above a method's maximum are lowered and reported in notes."New value: +"Results per page. Max 100 per page; pass next as cursor for the following page. Up to about 500 rows per keyword. Without a keyword: 10 rows. Values above a method's maximum are lowered and reported in notes." - changed
Input schema / properties / order / descriptionPrevious value: -"desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword or category."New value: +"desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword." - changed
Input schema / properties / sort / descriptionPrevious value: -"Ranking metric. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."New value: +"Ranking metric: growth, revenue, units. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter. Applies with a keyword." - changed
Input schema / properties / type / descriptionPrevious value: -"shops (default) or brands (top 10 brands)."New value: +"shops (default) or brands (the top 10 brands for the most recent days; keyword, filters and sort do not apply)."
12 tool updates
- Changed
category_trends6 fields changed- changed
Input schema / properties / keyword / descriptionPrevious value: -"method=search: category name to look up, e.g. 'serum'."New value: +"method=search: category name to look up in the data source, e.g. 'serum'. method=tree: text to find in category names, e.g. 'skincare'." - changed
Input schema / properties / level / descriptionPrevious value: -"method=list: keep only categories of this level (1 = top level, 3 = most specific)."New value: +"method=list or tree: keep only categories of this level (1 = top level, 3 = most specific)." - added
Input schema / properties / limitAdded value: +{ + "description": "method=tree: max categories to return (default 50).", + "maximum": 200, + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / method / descriptionPrevious value: -"What to get. list [Shop Analytics]: categories with revenue, growth and concentration | products [Shop Analytics]: a category's top product ids | search [Shop Analytics]: find category names and ids by keyword"New value: +"What to get. list [Shop Analytics]: categories with revenue, growth and concentration | products [Shop Analytics]: a category's top product ids (US market only) | search [Shop Analytics]: find category names and ids by keyword | tree: category names and ids to use as category | market_size [Shop Analytics]: how many products, shops, creators, videos, LIVEs and brands the source tracks" - changed
Input schema / properties / method / enumPrevious value: -[ - "list", - "products", - "search" -]New value: +[ + "list", + "products", + "search", + "tree", + "market_size" +] - added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
creator_commerce2 fields changed- changed
Input schema / properties / method / descriptionPrevious value: -"What to get. linked_products: each product linked in recent posts, with post count, views and likes (not sales) | sales [Shop Analytics]: revenue, units, video vs LIVE, average price | trend [Shop Analytics]: daily revenue (up to ~13 months) | products [Shop Analytics]: products they sold, with revenue | shops [Shop Analytics]: shops (brands) they sell for, with revenue | videos [Shop Analytics]: their selling videos, with revenue | audience [Shop Analytics]: follower age, gender and language"New value: +"What to get. linked_products: each product linked in recent posts, with post count, views and likes (not sales) | sales [Shop Analytics]: revenue, units, video vs LIVE, average price | trend [Shop Analytics]: daily revenue (up to ~13 months) | products [Shop Analytics]: products they sold, with revenue | shops [Shop Analytics]: shops (brands) they sell for, with revenue | videos [Shop Analytics]: their selling videos, with revenue | audience [Shop Analytics]: follower age, gender, top locations and languages, active hours (when the source has built it)" - added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
creator_top_selling7 fields changed- added
Input schema / properties / categoryAdded value: +{ + "description": "Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: [\"Skincare\"], [\"Pet Supplies\"], [\"Beauty & Personal Care\",\"Health\"] or [\"601450\"]. Without a keyword the creators of the category are found by merging several generic keyword searches (the source needs a keyword), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree.", + "items": { + "type": "string" + }, + "maxItems": 5, + "type": "array" +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"Matched against creator names, handles and bios (not the products they sell): 'pet' finds accounts like 'Pet Finds'. For a niche's affiliates, rank the niche with product_top_selling, then call product method=creators on the top items. Omit for the overall top 10."New value: +"Matched against creator names, handles and bios (not the products they sell): 'pet' finds accounts like 'Pet Finds'. For a niche's affiliates, rank the niche with product_top_selling, then call product method=creators on the top items. Omit for the overall top 10, or pass category." - added
Input schema / properties / orderAdded value: +{ + "description": "desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword or category.", + "enum": [ + "desc", + "asc" + ], + "maxLength": 2048, + "type": "string" +} - changed
Input schema / properties / price / descriptionPrevious value: -"Filter. Average price of what they sell, USD, e.g. <20."New value: +"Filter. Average price of what they sell, in the market's currency, e.g. <20." - added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +} - changed
Input schema / properties / revenue / descriptionPrevious value: -"Filter. Revenue the creator drove in USD over the window, e.g. >10000."New value: +"Filter. Revenue the creator drove in the market's currency over the window, e.g. >10000." - changed
Input schema / properties / sort / descriptionPrevious value: -"Ranking metric, highest first. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."New value: +"Ranking metric. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."
- Changed
live1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
live_top_selling1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
product3 fields changed- changed
Input schema / properties / method / descriptionPrevious value: -"What to get. page: live price, SKUs and stock, sold, rating, shop | reviews: public reviews | related: products TikTok shows as related | videos: the videos on the product page (first page only) | sales [Shop Analytics]: revenue, units, video/LIVE/showcase split, creator count, conversion (ids: up to 20 products) | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | creators [Shop Analytics]: creators selling it, ranked, with revenue | video_sales [Shop Analytics]: videos selling it, with revenue | skus [Shop Analytics]: sales by variant (SKU) | review_insights [Shop Analytics]: AI summary of reviews: pain points, praise, use cases (by_sku splits by variant)"New value: +"What to get. page: live price, SKUs and stock, sold, rating, shop | reviews: public reviews | related: products TikTok shows as related | videos: the videos on the product page (first page only) | sales [Shop Analytics]: revenue, units, video/LIVE/showcase split, creator count, conversion (ids: up to 20 products) | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | creators [Shop Analytics]: creators selling it, ranked, with revenue | video_sales [Shop Analytics]: videos selling it, with revenue | skus [Shop Analytics]: sales by variant (SKU) | analysis [Shop Analytics]: selling-point highlights and attributes the source extracts for the product | conversion [Shop Analytics]: how many creators promote it and what share of them made sales | review_insights [Shop Analytics]: AI summary of reviews: pain points, praise, use cases (by_sku splits by variant)" - changed
Input schema / properties / method / enumPrevious value: -[ - "page", - "reviews", - "related", - "videos", - "sales", - "trend", - "creators", - "video_sales", - "skus", - "review_insights" -]New value: +[ + "page", + "reviews", + "related", + "videos", + "sales", + "trend", + "creators", + "video_sales", + "skus", + "analysis", + "conversion", + "review_insights" +] - added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
product_top_selling8 fields changed- added
Input schema / properties / categoryAdded value: +{ + "description": "Narrow to one or more Shop categories (up to 5), by name or numeric id, levels 1 to 3: [\"Skincare\"], [\"Pet Supplies\"], [\"Beauty & Personal Care\",\"Health\"] or [\"601450\"]. Without a keyword the products of the category are found by merging several generic keyword searches (the source needs a keyword), and the result says how many keyword sweeps and distinct rows that gave. Find names and ids with category_trends method=tree.", + "items": { + "type": "string" + }, + "maxItems": 5, + "type": "array" +} - changed
Input schema / properties / max_rows / descriptionPrevious value: -"Scan up to this many matching products (101-3000) before sorting, to go past the 700-row cap or sort ascending; the top limit rows are returned. Needs keyword."New value: +"Scan up to this many matching products (101-3000) before sorting, to go past the 700-row cap; the top limit rows are returned. Needs keyword; US market only; not with category." - changed
Input schema / properties / order / descriptionPrevious value: -"desc (default) or asc. asc sorts the matching rows lowest first (fetched with max_rows)."New value: +"desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword or category." - changed
Input schema / properties / price / descriptionPrevious value: -"Filter. Average selling price in USD, e.g. <20 or 20-100."New value: +"Filter. Average selling price in the market's currency, e.g. <20 or 20-100." - added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +} - changed
Input schema / properties / revenue / descriptionPrevious value: -"Filter. Revenue in USD over the window: a-b, <a or >b, e.g. 1000-10000."New value: +"Filter. Revenue in the market's currency over the window: a-b, <a or >b, e.g. 1000-10000." - changed
Input schema / properties / shipping / descriptionPrevious value: -"Filter. local = ships from US warehouses; global = cross-border."New value: +"Filter. local = ships from warehouses in the market; global = cross-border." - changed
Input schema / properties / sort / descriptionPrevious value: -"Ranking metric, highest first. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."New value: +"Ranking metric. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."
- Changed
shop3 fields changed- changed
Input schema / properties / method / descriptionPrevious value: -"What to get. store: live storefront: rating, sold, followers, products | sales [Shop Analytics]: revenue and units, split by own accounts, affiliates and mall | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | products [Shop Analytics]: its products ranked by revenue | new_products [Shop Analytics]: products it launched in the window | strategy [Shop Analytics]: price bands and sales-channel mix (affiliate vs own accounts) | creators [Shop Analytics]: affiliate creators selling for it, with revenue | videos [Shop Analytics]: videos selling its products, with revenue"New value: +"What to get. store: live storefront: rating, sold, followers, products | sales [Shop Analytics]: revenue and units, split by own accounts, affiliates and mall | trend [Shop Analytics]: daily revenue and units (up to ~13 months) | products [Shop Analytics]: its products ranked by revenue | new_products [Shop Analytics]: products it launched in the window | strategy [Shop Analytics]: price bands and sales-channel mix: top affiliates (individuals unnamed) and the shop's own accounts | creators [Shop Analytics]: affiliate creators selling for it, with revenue | videos [Shop Analytics]: videos selling its products, with revenue | new_affiliates [Shop Analytics]: daily count of new affiliates who started promoting the shop, with a summary | affiliate_videos [Shop Analytics]: daily count of new videos affiliates posted for the shop, with a summary" - changed
Input schema / properties / method / enumPrevious value: -[ - "store", - "sales", - "trend", - "products", - "new_products", - "strategy", - "creators", - "videos" -]New value: +[ + "store", + "sales", + "trend", + "products", + "new_products", + "strategy", + "creators", + "videos", + "new_affiliates", + "affiliate_videos" +] - added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Added
shop_regions - Changed
shop_top_selling5 fields changed- added
Input schema / properties / orderAdded value: +{ + "description": "desc (default, highest first) or asc (lowest first among the matching rows; pair it with a revenue or units filter to skip dead listings). Applies with a keyword or category.", + "enum": [ + "desc", + "asc" + ], + "maxLength": 2048, + "type": "string" +} - changed
Input schema / properties / price / descriptionPrevious value: -"Filter. Average selling price in USD, e.g. 20-100."New value: +"Filter. Average selling price in the market's currency, e.g. 20-100." - added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +} - changed
Input schema / properties / revenue / descriptionPrevious value: -"Filter. Shop revenue in USD over the window, e.g. >100000."New value: +"Filter. Shop revenue in the market's currency over the window, e.g. >100000." - changed
Input schema / properties / sort / descriptionPrevious value: -"Ranking metric, highest first. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."New value: +"Ranking metric. Default revenue. growth favours brand-new items (shown as >999.9%); pair it with a revenue or units filter."
- Changed
video1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
- Changed
video_top_selling1 field changed- added
Input schema / properties / regionAdded value: +{ + "description": "Shop Analytics methods: market as an ISO country code, default US. Core: US, GB, DE, FR, ES, JP, TH, VN, ID, MY, PH, BR, MX. Extended: PL, IT, NL, IE. Other countries are refused. Amounts are in the market's currency. See shop_regions.", + "maxLength": 2048, + "type": "string" +}
1 tool update
- Changed
creator_top_selling1 field changed- changed
Input schema / properties / keyword / descriptionPrevious value: -"Niche, product type or brand whose creators you want, e.g. 'fitness' or 'medicube'. Omit for the overall top 10."New value: +"Matched against creator names, handles and bios (not the products they sell): 'pet' finds accounts like 'Pet Finds'. For a niche's affiliates, rank the niche with product_top_selling, then call product method=creators on the top items. Omit for the overall top 10."
112 tool updates
- Removed
ad_library_regions - Removed
ad_library_suggest - Removed
audience_demographics - Removed
browse_topics - Added
category_trends - Removed
collection_detail - Removed
collection_videos - Removed
comment_replies - Removed
content_guidance - Added
creative_center - Removed
creative_partner_filters - Removed
creative_partner_leaderboard - Removed
creative_seo_detail - Removed
creative_seo_list - Removed
creative_top_contents - Added
creator - Removed
creator_collections - Added
creator_commerce - Removed
creator_followers - Removed
creator_following - Removed
creator_likes - Added
creator_playlist - Removed
creator_playlists - Removed
creator_posts - Removed
creator_products - Removed
creator_reposts - Added
creator_search - Removed
creator_stories - Added
creator_top_selling - Added
demand_find_topics - Added
demand_keywords - Added
demand_topic - Removed
discover_cards - Removed
discover_hashtags - Added
effect - Removed
embed_videos - Removed
explore_categories - Removed
explore_videos - Added
hashtag - Removed
hashtag_detail - Added
hashtag_search - Removed
hashtag_videos - Removed
hot_sounds - Removed
keyword_intelligence - Removed
list_channels - Removed
list_languages - Added
live - Removed
live_gifts - Removed
live_room_detail - Added
live_search - Added
live_top_selling - Removed
music_beats - Removed
music_choices - Added
place - Removed
place_detail - Removed
place_reviews - Removed
place_videos - Removed
playlist_detail - Removed
playlist_videos - Added
product - Added
product_top_selling - Removed
recommended_videos - Added
reference - Removed
related_hashtags - Removed
related_queries - Removed
related_topics - Removed
related_videos - Removed
search_all - Removed
search_hashtags - Removed
search_live - Removed
search_photos - Removed
search_popularity - Removed
search_shop_products - Removed
search_sounds - Removed
search_suggestions - Removed
search_topics - Removed
search_users - Removed
search_videos - Added
shop - Added
shop_browse - Removed
shop_catalog - Removed
shop_category - Removed
shop_deals - Removed
shop_keyword_page - Removed
shop_product_detail - Removed
shop_product_reviews - Removed
shop_product_videos - Removed
shop_related_products - Removed
shop_seller - Removed
shop_suggest - Added
shop_top_selling - Removed
similar_videos - Added
sound - Removed
sound_detail - Added
sound_search - Removed
sound_videos - Removed
sticker_detail - Removed
sticker_discover - Removed
sticker_videos - Removed
topic_detail - Removed
trending_searches - Removed
trending_topics - Removed
user_profile - Removed
user_profile_by_id - Added
video - Removed
video_captions - Removed
video_comments - Removed
video_detail - Added
video_feed - Added
video_search - Added
video_top_selling - Removed
video_transcript
1 tool update
- Changed
user_profile1 field changed- changed
Input schema / properties / handle / descriptionPrevious value: -"Handle with or without @, e.g. pawpet05."New value: +"Handle with or without @, e.g. pawpet05. A profile or video link (including short share links) also works."
8 tool updates
- Added
keyword_intelligence - Changed
place_detail7 fields changed- added
Output schema / properties / hoursAdded value: +{ + "description": "Opening hours TikTok shows for today.", + "type": "string" +} - added
Output schema / properties / latAdded value: +{ + "type": "number" +} - added
Output schema / properties / lngAdded value: +{ + "type": "number" +} - added
Output schema / properties / priceAdded value: +{ + "description": "Price level from 1 (cheapest) to 4, when TikTok shows one.", + "type": "integer" +} - added
Output schema / properties / ratingAdded value: +{ + "description": "TikTok's average review score out of 5, when the place has reviews.", + "type": "number" +} - added
Output schema / properties / reviewsAdded value: +{ + "description": "How many TikTok reviews the place has (see place_reviews).", + "type": "integer" +} - added
Output schema / properties / tagsAdded value: +{ + "description": "What TikTok highlights about the place: popular items and short descriptors.", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
place_reviews - Changed
place_search7 fields changed- added
Output schema / properties / places / items / properties / hoursAdded value: +{ + "description": "Opening hours TikTok shows for today.", + "type": "string" +} - added
Output schema / properties / places / items / properties / latAdded value: +{ + "type": "number" +} - added
Output schema / properties / places / items / properties / lngAdded value: +{ + "type": "number" +} - added
Output schema / properties / places / items / properties / priceAdded value: +{ + "description": "Price level from 1 (cheapest) to 4, when TikTok shows one.", + "type": "integer" +} - added
Output schema / properties / places / items / properties / ratingAdded value: +{ + "description": "TikTok's average review score out of 5, when the place has reviews.", + "type": "number" +} - added
Output schema / properties / places / items / properties / reviewsAdded value: +{ + "description": "How many TikTok reviews the place has (see place_reviews).", + "type": "integer" +} - added
Output schema / properties / places / items / properties / tagsAdded value: +{ + "description": "What TikTok highlights about the place: popular items and short descriptors.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
search_hashtags1 field changed- added
Input schema / properties / search_idAdded value: +{ + "description": "From the previous response's next; omit on the first page.", + "maxLength": 2048, + "type": "string" +}
- Changed
search_users4 fields changed- added
Output schema / properties / creators / items / properties / following / descriptionAdded value: +"Absent when TikTok did not send it (web account search)." - changed
Output schema / properties / creators / items / properties / likes / descriptionPrevious value: -"Total likes received."New value: +"Total likes received. Absent when TikTok did not send it." - added
Output schema / properties / creators / items / properties / videos / descriptionAdded value: +"Posts on the account. Absent when TikTok did not send it (web account search)." - changed
Output schema / properties / creators / items / requiredPrevious value: -[ - "handle", - "followers", - "following", - "likes", - "videos" -]New value: +[ + "handle", + "followers" +]
- Changed
user_profile4 fields changed- added
Output schema / properties / following / descriptionAdded value: +"Absent when TikTok did not send it (web account search)." - changed
Output schema / properties / likes / descriptionPrevious value: -"Total likes received."New value: +"Total likes received. Absent when TikTok did not send it." - added
Output schema / properties / videos / descriptionAdded value: +"Posts on the account. Absent when TikTok did not send it (web account search)." - changed
Output schema / requiredPrevious value: -[ - "handle", - "followers", - "following", - "likes", - "videos" -]New value: +[ + "handle", + "followers" +]
- Changed
user_profile_by_id4 fields changed- added
Output schema / properties / following / descriptionAdded value: +"Absent when TikTok did not send it (web account search)." - changed
Output schema / properties / likes / descriptionPrevious value: -"Total likes received."New value: +"Total likes received. Absent when TikTok did not send it." - added
Output schema / properties / videos / descriptionAdded value: +"Posts on the account. Absent when TikTok did not send it (web account search)." - changed
Output schema / requiredPrevious value: -[ - "handle", - "followers", - "following", - "likes", - "videos" -]New value: +[ + "handle", + "followers" +]
3 tool updates
- Removed
find_affiliates - Added
place_search - Changed
shop_product_reviews3 fields changed- added
Output schema / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / ratingAdded value: +{ + "type": "number" +} - added
Output schema / properties / reviewsUnavailableAdded value: +{ + "type": "boolean" +}
84 tool updates
- Added
ad_library_regions - Added
ad_library_suggest - Changed
audience_demographics5 fields changed- added
Input schema / properties / days / defaultAdded value: +"30" - changed
Input schema / properties / days / descriptionPrevious value: -"Requested date window in days; defaults to 30. Does not define the aggregation period of returned metrics."New value: +"Date window in days. Does not define each metric's aggregation." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / query_id / descriptionPrevious value: -"CSI topic queryId returned by search_topics, browse_topics, trending_topics or related_topics. Not a video ID, username or keyword."New value: +"queryId from search_topics, browse_topics, trending_topics or related_topics." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "age": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "type": "integer" + } + }, + "required": [ + "category", + "popularity" + ], + "type": "object" + }, + "type": "array" + }, + "gender": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "type": "integer" + } + }, + "required": [ + "category", + "popularity" + ], + "type": "object" + }, + "type": "array" + }, + "location": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "type": "integer" + } + }, + "required": [ + "category", + "popularity" + ], + "type": "object" + }, + "type": "array" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "summary": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "summary", + "gender", + "age", + "location" + ], + "type": "object" +}
- Changed
browse_topics9 fields changed- changed
Input schema / properties / channel / descriptionPrevious value: -"Which topic list to browse."New value: +"Which CSI topic list to browse. Required." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / language / defaultAdded value: +"en" - changed
Input schema / properties / language / descriptionPrevious value: -"Language code from list_languages; defaults to en. Ignored for trending and category channels, which route to trending_topics."New value: +"Language code from list_languages, e.g. en. Ignored for trending and category channels." - added
Input schema / properties / limit / defaultAdded value: +20 - changed
Input schema / properties / limit / descriptionPrevious value: -"How many topics to return, 1-20. Defaults to 20."New value: +"Topics per page." - added
Input schema / properties / offset / defaultAdded value: +0 - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset. Defaults to 0."New value: +"From the previous response's next; omit on the first page." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "channel": { + "type": "string" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "tab": { + "type": "string" + }, + "topics": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "description": "TikTok's 0-100 popularity score.", + "type": "integer" + }, + "queryId": { + "description": "query_id input.", + "type": "string" + }, + "queryText": { + "type": "string" + }, + "searchVolume": { + "description": "TikTok's 7-day search popularity figure.", + "type": "integer" + }, + "trend7d": { + "description": "Daily readings, oldest first.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "videoCount": { + "description": "Videos TikTok matches to the search; 0 marks a content gap.", + "type": "integer" + } + }, + "required": [ + "queryId", + "queryText", + "searchVolume", + "videoCount" + ], + "type": "object" + }, + "type": "array" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "topics", + "hasMore" + ], + "type": "object" +}
- Added
collection_detail - Added
collection_videos - Changed
comment_replies8 fields changed- changed
Input schema / properties / aweme_id / descriptionPrevious value: -"The video's id."New value: +"Post id (videos[].id)." - changed
Input schema / properties / comment_id / descriptionPrevious value: -"The comment's id, from video_comments."New value: +"Comment id from video_comments." - added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"How many replies to return, 1-50. Defaults to 20."New value: +"Replies per page." - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Pagination cursor. Defaults to 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "comments": { + "items": { + "properties": { + "author": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "id": { + "description": "comment_id input.", + "type": "string" + }, + "isCreator": { + "description": "Written by the video's creator.", + "type": "boolean" + }, + "likes": { + "type": "integer" + }, + "posted": { + "type": "string" + }, + "replies": { + "type": "integer" + }, + "text": { + "type": "string" + } + }, + "required": [ + "id", + "text", + "likes" + ], + "type": "object" + }, + "type": "array" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "total": { + "description": "TikTok's reported comment count.", + "type": "integer" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "comments", + "hasMore" + ], + "type": "object" +}
- Changed
content_guidance3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / query_id / descriptionPrevious value: -"CSI topic queryId returned by search_topics, browse_topics, trending_topics or related_topics. Not a video ID, username or keyword."New value: +"queryId from search_topics, browse_topics, trending_topics or related_topics." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "available": { + "type": "boolean" + }, + "guidance": { + "type": "object" + }, + "message": { + "type": "string" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + } + }, + "required": [ + "available" + ], + "type": "object" +}
- Added
creative_partner_filters - Added
creative_partner_leaderboard - Added
creative_seo_detail - Added
creative_seo_list - Added
creative_top_contents - Added
creator_collections - Changed
creator_followers10 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / max_cursor / defaultAdded value: +"0" - changed
Input schema / properties / max_cursor / descriptionPrevious value: -"Returned maxCursor as a nonnegative decimal string; default 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / min_cursor / defaultAdded value: +"0" - changed
Input schema / properties / min_cursor / descriptionPrevious value: -"Returned minCursor as a nonnegative decimal string; default 0. Stop when hasMore is false."New value: +"From the previous response's next; omit on the first page." - changed
Input schema / properties / sec_uid / descriptionPrevious value: -"Creator secUid from user_profile; must match user_id."New value: +"Creator secUid from user_profile, or creator.secUid on any post." - changed
Input schema / properties / user_id / descriptionPrevious value: -"Numeric creator id from the same user_profile as sec_uid."New value: +"Numeric creator id from user_profile, or creator.id on any post." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "accounts": { + "items": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "accounts", + "hasMore" + ], + "type": "object" +}
- Changed
creator_following10 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / max_cursor / defaultAdded value: +"0" - changed
Input schema / properties / max_cursor / descriptionPrevious value: -"Returned maxCursor as a nonnegative decimal string; default 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / min_cursor / defaultAdded value: +"0" - changed
Input schema / properties / min_cursor / descriptionPrevious value: -"Returned minCursor as a nonnegative decimal string; default 0. Stop when hasMore is false."New value: +"From the previous response's next; omit on the first page." - changed
Input schema / properties / sec_uid / descriptionPrevious value: -"Creator secUid from user_profile; must match user_id."New value: +"Creator secUid from user_profile, or creator.secUid on any post." - changed
Input schema / properties / user_id / descriptionPrevious value: -"Numeric creator id from the same user_profile as sec_uid."New value: +"Numeric creator id from user_profile, or creator.id on any post." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "accounts": { + "items": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "accounts", + "hasMore" + ], + "type": "object" +}
- Added
creator_likes - Changed
creator_playlists7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / cursor / defaultAdded value: +"0" - changed
Input schema / properties / cursor / descriptionPrevious value: -"Native cursor as a decimal string; default 0. Pass back the returned cursor unchanged."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / sec_uid / descriptionPrevious value: -"Creator secUid from user_profile or video data; not a username."New value: +"Creator secUid from user_profile, or creator.secUid on any post." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "playlists": { + "items": { + "properties": { + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "id": { + "description": "playlist_id or collection_id input.", + "type": "string" + }, + "name": { + "type": "string" + }, + "videos": { + "type": "integer" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "playlists", + "hasMore" + ], + "type": "object" +}
- Changed
creator_posts8 fields changed- added
Input schema / properties / count / defaultAdded value: +15 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-35; default 15."New value: +"Requested page size." - changed
Input schema / properties / count / maximumPrevious value: -50New value: +35 - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Unix milliseconds; omitted or 0 starts at now. Next page: last item's createTime * 1000."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / sec_uid / descriptionPrevious value: -"Creator secUid from user_profile or authorSecUid from video_detail."New value: +"Creator secUid from user_profile, or creator.secUid on any post." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
creator_products - Changed
creator_reposts7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / cursor / defaultAdded value: +"0" - changed
Input schema / properties / cursor / descriptionPrevious value: -"Native cursor as a decimal string; default 0. Pass back the returned cursor unchanged."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / sec_uid / descriptionPrevious value: -"Creator secUid from user_profile or video data."New value: +"Creator secUid from user_profile, or creator.secUid on any post." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
creator_stories - Added
discover_cards - Added
discover_hashtags - Added
embed_videos - Changed
explore_categories2 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "categories": { + "items": { + "properties": { + "id": { + "description": "category_id input for explore_videos.", + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + } + }, + "required": [ + "categories" + ], + "type": "object" +}
- Changed
explore_videos6 fields changed- added
Input schema / properties / count / defaultAdded value: +5 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested results, 1-20; default 5."New value: +"Requested results." - changed
Input schema / properties / count / maximumPrevious value: -50New value: +20 - added
Input schema / properties / cursorAdded value: +{ + "default": 0, + "description": "From the previous response's next; omit on the first page.", + "maximum": 2147483647, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
find_affiliates - Changed
hashtag_detail3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / hashtag_id / descriptionPrevious value: -"Numeric hashtag ID from search_hashtags."New value: +"Hashtag id (hashtags[].id)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "description": { + "type": "string" + }, + "id": { + "description": "hashtag_id input.", + "type": "string" + }, + "name": { + "type": "string" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "url": { + "type": "string" + }, + "videos": { + "type": "integer" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" +}
- Changed
hashtag_videos9 fields changed- added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"How many videos, 1-50. Defaults to 20."New value: +"Videos per page." - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Pagination cursor. Defaults to 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / hashtag_id / descriptionPrevious value: -"The hashtag's id, from search_hashtags."New value: +"Hashtag id (hashtags[].id)." - added
Input schema / properties / sort / defaultAdded value: +"hot" - changed
Input schema / properties / sort / descriptionPrevious value: -"Ordering."New value: +"Ordering. hot is TikTok ranking; newest is chronological." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
hot_sounds - Changed
list_channels2 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "channels": { + "items": { + "type": "object" + }, + "type": "array" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "trendingCategories": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "channels" + ], + "type": "object" +}
- Changed
list_languages2 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "languages": { + "description": "id is the language input.", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + } + }, + "required": [ + "languages" + ], + "type": "object" +}
- Added
live_gifts - Added
live_room_detail - Added
music_beats - Added
music_choices - Changed
pick_comment_winners12 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / exclude_creator / defaultAdded value: +true - changed
Input schema / properties / exclude_creator / descriptionPrevious value: -"Exclude comments by the video's creator. Defaults to true."New value: +"Exclude comments by the video's creator." - added
Input schema / properties / max_comments / defaultAdded value: +300 - changed
Input schema / properties / max_comments / descriptionPrevious value: -"Comments to fetch, 50-500 in pages of 50. Defaults to 300."New value: +"Comments to fetch, in pages of 50." - changed
Input schema / properties / seed / descriptionPrevious value: -"Optional seed for a reproducible draw; publish it so anyone can re-run the draw."New value: +"Optional seed for a reproducible draw. Publish it so anyone can re-run the draw." - added
Input schema / properties / unique_users / defaultAdded value: +true - changed
Input schema / properties / unique_users / descriptionPrevious value: -"Count each commenter once (their earliest fetched comment). Defaults to true."New value: +"Count each commenter once (their earliest fetched comment)." - changed
Input schema / properties / video / descriptionPrevious value: -"Full https://www.tiktok.com/@creator/video/<id> URL or the numeric video id."New value: +"Post id or full https://www.tiktok.com/@creator/video/<id> URL." - added
Input schema / properties / winners / defaultAdded value: +1 - changed
Input schema / properties / winners / descriptionPrevious value: -"How many winners to draw, 1-20. Defaults to 1."New value: +"How many winners to draw." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "awemeId": { + "type": "string" + }, + "coverage": { + "type": "number" + }, + "eligible": { + "type": "integer" + }, + "excluded": { + "type": "object" + }, + "fairness": { + "type": "string" + }, + "fetched": { + "type": "integer" + }, + "pages": { + "type": "integer" + }, + "random": { + "type": "string" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "rules": { + "type": "object" + }, + "seed": { + "type": "string" + }, + "seedSha256": { + "type": "string" + }, + "totalReported": { + "type": "integer" + }, + "winners": { + "items": { + "properties": { + "authorNickname": { + "type": "string" + }, + "authorUniqueId": { + "type": "string" + }, + "createTime": { + "type": "integer" + }, + "diggCount": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "isAuthor": { + "type": "boolean" + }, + "text": { + "type": "string" + } + }, + "required": [ + "id", + "text", + "authorUniqueId", + "authorNickname", + "createTime", + "diggCount", + "isAuthor" + ], + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
place_detail3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / place_id / descriptionPrevious value: -"Numeric public POI ID returned in a video's poi.id field."New value: +"Place id (place.id on a post)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "address": { + "type": "string" + }, + "category": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "id": { + "description": "place_id input.", + "type": "string" + }, + "name": { + "type": "string" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "url": { + "type": "string" + }, + "videos": { + "type": "integer" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" +}
- Changed
place_videos7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / cursor / defaultAdded value: +"0" - changed
Input schema / properties / cursor / descriptionPrevious value: -"Native cursor as a decimal string; default 0. Pass back the returned cursor unchanged."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / place_id / descriptionPrevious value: -"Numeric poi.id from video data or place_detail."New value: +"Place id (place.id on a post)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
playlist_detail - Changed
playlist_videos7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / cursor / defaultAdded value: +"0" - changed
Input schema / properties / cursor / descriptionPrevious value: -"Native cursor as a decimal string; default 0. Pass back the returned cursor unchanged."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / playlist_id / descriptionPrevious value: -"Numeric mixId returned by creator_playlists."New value: +"Playlist id from creator_playlists." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Removed
product_trend_check - Changed
recommended_videos5 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / cursorAdded value: +{ + "default": "0", + "description": "From the previous response's next; omit on the first page.", + "maxLength": 2048, + "type": "string" +} - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Changed
related_hashtags4 fields changed- added
Input schema / properties / countAdded value: +{ + "default": 5, + "description": "Requested related tags. TikTok may return fewer.", + "maximum": 20, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / hashtag_id / descriptionPrevious value: -"Numeric hashtag ID from search_hashtags or video metadata."New value: +"Hashtag id (hashtags[].id)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "hashtags": { + "items": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "description": "hashtag_id input.", + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + }, + "videos": { + "type": "integer" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "hashtags", + "hasMore" + ], + "type": "object" +}
- Changed
related_queries3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / query_id / descriptionPrevious value: -"CSI topic queryId returned by search_topics, browse_topics, trending_topics or related_topics. Not a video ID, username or keyword."New value: +"queryId from search_topics, browse_topics, trending_topics or related_topics." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "queries": { + "items": { + "type": "object" + }, + "type": "array" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + } + }, + "required": [ + "queries" + ], + "type": "object" +}
- Changed
related_topics7 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / limit / defaultAdded value: +11 - changed
Input schema / properties / limit / descriptionPrevious value: -"How many related topics to return, 1-20. Defaults to 11."New value: +"Related topics per page." - added
Input schema / properties / offset / defaultAdded value: +0 - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset. Defaults to 0; pass back nextOffset."New value: +"From the previous response's next; omit on the first page." - changed
Input schema / properties / query_id / descriptionPrevious value: -"CSI topic queryId returned by search_topics, browse_topics, trending_topics or related_topics. Not a video ID, username or keyword."New value: +"queryId from search_topics, browse_topics, trending_topics or related_topics." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "channel": { + "type": "string" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "tab": { + "type": "string" + }, + "topics": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "description": "TikTok's 0-100 popularity score.", + "type": "integer" + }, + "queryId": { + "description": "query_id input.", + "type": "string" + }, + "queryText": { + "type": "string" + }, + "searchVolume": { + "description": "TikTok's 7-day search popularity figure.", + "type": "integer" + }, + "trend7d": { + "description": "Daily readings, oldest first.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "videoCount": { + "description": "Videos TikTok matches to the search; 0 marks a content gap.", + "type": "integer" + } + }, + "required": [ + "queryId", + "queryText", + "searchVolume", + "videoCount" + ], + "type": "object" + }, + "type": "array" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "topics", + "hasMore" + ], + "type": "object" +}
- Changed
related_videos9 fields changed- added
Input schema / properties / count / defaultAdded value: +12 - changed
Input schema / properties / count / descriptionPrevious value: -"How many videos to return, 1-20. Defaults to 12."New value: +"Videos to return." - changed
Input schema / properties / count / maximumPrevious value: -50New value: +20 - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / offset / defaultAdded value: +0 - changed
Input schema / properties / offset / descriptionPrevious value: -"Use 0 (first page). This helper cannot pass search_id; use search_videos for continuation."New value: +"From the previous response's next; omit on the first page." - changed
Input schema / properties / offset / maximumPrevious value: -2147483647New value: +0 - changed
Input schema / properties / query_id / descriptionPrevious value: -"CSI topic queryId returned by search_topics, browse_topics, trending_topics or related_topics. Not a video ID, username or keyword."New value: +"queryId from search_topics, browse_topics, trending_topics or related_topics." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "topicQueryText": { + "type": "string" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Changed
search_all7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / cursor / defaultAdded value: +"0" - changed
Input schema / properties / cursor / descriptionPrevious value: -"Native cursor as a decimal string; default 0. Pass back the returned cursor unchanged."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / search_id / descriptionPrevious value: -"log_pb.impr_id from the first response; required for subsequent pages."New value: +"From the previous response's next; omit on the first page." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "raw": { + "description": "TikTok's full payload; present only with detail=full." + } + }, + "type": "object" +}
- Changed
search_hashtags7 fields changed- added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"How many hashtags to return, 1-50. Defaults to 20."New value: +"Hashtags per page." - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Pagination cursor. Defaults to 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"The term, e.g. 'fitness'."New value: +"Term, e.g. 'fitness'." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "hashtags": { + "items": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "description": "hashtag_id input.", + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": "string" + }, + "videos": { + "type": "integer" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "hashtags", + "hasMore" + ], + "type": "object" +}
- Changed
search_live7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested results, 1-30; default 10."New value: +"Requested results." - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Returned cursor; default 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / search_id / descriptionPrevious value: -"First page log_pb.impr_id; required when cursor > 0."New value: +"From the previous response's next; omit on the first page." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "rooms": { + "items": { + "properties": { + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "likes": { + "type": "integer" + }, + "live": { + "description": "Broadcasting at the time of the request.", + "type": "boolean" + }, + "products": { + "description": "Products in the LIVE bag, when TikTok reports it.", + "type": "integer" + }, + "roomId": { + "description": "room_id input.", + "type": "string" + }, + "shopping": { + "description": "The room is selling TikTok Shop products.", + "type": "boolean" + }, + "started": { + "type": "string" + }, + "title": { + "type": "string" + }, + "totalViewers": { + "description": "People who joined so far.", + "type": "integer" + }, + "url": { + "type": "string" + }, + "viewers": { + "description": "Current viewers.", + "type": "integer" + } + }, + "required": [ + "roomId", + "live" + ], + "type": "object" + }, + "type": "array" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "rooms", + "hasMore" + ], + "type": "object" +}
- Changed
search_photos8 fields changed- added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-20; default 20. Actual page sizes vary."New value: +"Requested page size. Actual sizes vary." - changed
Input schema / properties / count / maximumPrevious value: -50New value: +20 - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / offset / defaultAdded value: +0 - changed
Input schema / properties / offset / descriptionPrevious value: -"Native cursor from the previous page; default 0."New value: +"From the previous response's next; omit on the first page." - changed
Input schema / properties / search_id / descriptionPrevious value: -"First page's log_pb.impr_id; required when offset > 0."New value: +"From the previous response's next; omit on the first page." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Changed
search_popularity6 fields changed- changed
Input schema / properties / countries / descriptionPrevious value: -"Country codes to break out, e.g. [\"US\",\"GB\"]. Defaults to [\"global\"] for worldwide. Multiple countries use one request; some may be unavailable."New value: +"Country codes, e.g. [\"US\",\"GB\"]. Omit for worldwide." - added
Input schema / properties / days / defaultAdded value: +"30" - changed
Input schema / properties / days / descriptionPrevious value: -"Requested date window in days; defaults to 30. Does not define the aggregation period of returned metrics."New value: +"Chart window in days. Does not define each point's aggregation." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / query_id / descriptionPrevious value: -"CSI topic queryId returned by search_topics, browse_topics, trending_topics or related_topics. Not a video ID, username or keyword."New value: +"queryId from search_topics, browse_topics, trending_topics or related_topics." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "missingCountries": { + "description": "Requested countries TikTok returned no series for; do not substitute global.", + "items": { + "type": "string" + }, + "type": "array" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "requestedCountries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "series": { + "items": { + "properties": { + "country": { + "type": "string" + }, + "points": { + "items": { + "properties": { + "date": { + "type": "string" + }, + "popularity": { + "type": "integer" + } + }, + "required": [ + "date", + "popularity" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "country", + "points" + ], + "type": "object" + }, + "type": "array" + }, + "windowDays": { + "type": "integer" + } + }, + "required": [ + "series" + ], + "type": "object" +}
- Added
search_shop_products - Changed
search_sounds7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested results, 1-30; default 10."New value: +"Requested results." - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Returned cursor; default 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / search_id / descriptionPrevious value: -"First page log_pb.impr_id; required when cursor > 0."New value: +"From the previous response's next; omit on the first page." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "sounds": { + "items": { + "properties": { + "album": { + "type": "string" + }, + "author": { + "type": "string" + }, + "commercialUse": { + "description": "TikTok marks the track as cleared for commercial use.", + "type": "boolean" + }, + "durationSec": { + "type": "number" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "videos": { + "description": "Posts using the sound, when TikTok reports it.", + "type": "integer" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "sounds", + "hasMore" + ], + "type": "object" +}
- Changed
search_suggestions7 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"How many suggestions, 1-50. Defaults to 10."New value: +"How many suggestions." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"The seed term, e.g. 'meal prep'."New value: +"Seed term, e.g. 'meal prep'." - added
Input schema / properties / user_only / defaultAdded value: +false - changed
Input schema / properties / user_only / descriptionPrevious value: -"Return account suggestions instead of queries."New value: +"true = account suggestions; false = query phrases." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "suggestions" + ], + "type": "object" +}
- Changed
search_topics8 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"The search phrase, e.g. 'bicep workouts'."New value: +"Search phrase, e.g. 'bicep workouts'." - changed
Input schema / properties / language / descriptionPrevious value: -"Language code from list_languages, e.g. en. Omit to leave the language filter unset."New value: +"Optional language code from list_languages, e.g. en. Omit to leave the language filter unset." - added
Input schema / properties / limit / defaultAdded value: +20 - changed
Input schema / properties / limit / descriptionPrevious value: -"How many topics to return, 1-20. Defaults to 20."New value: +"Topics per page." - added
Input schema / properties / offset / defaultAdded value: +0 - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset. Defaults to 0; pass back nextOffset."New value: +"From the previous response's next; omit on the first page." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "channel": { + "type": "string" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "tab": { + "type": "string" + }, + "topics": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "description": "TikTok's 0-100 popularity score.", + "type": "integer" + }, + "queryId": { + "description": "query_id input.", + "type": "string" + }, + "queryText": { + "type": "string" + }, + "searchVolume": { + "description": "TikTok's 7-day search popularity figure.", + "type": "integer" + }, + "trend7d": { + "description": "Daily readings, oldest first.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "videoCount": { + "description": "Videos TikTok matches to the search; 0 marks a content gap.", + "type": "integer" + } + }, + "required": [ + "queryId", + "queryText", + "searchVolume", + "videoCount" + ], + "type": "object" + }, + "type": "array" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "topics", + "hasMore" + ], + "type": "object" +}
- Changed
search_users16 fields changed- added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"How many accounts to return, 1-20. Defaults to 20."New value: +"Accounts per page." - changed
Input schema / properties / count / maximumPrevious value: -50New value: +20 - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Pagination cursor. Defaults to 0; pass back nextCursor."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"The search term, e.g. 'fitness'."New value: +"Search term, e.g. 'fitness'." - added
Input schema / properties / max_followers / defaultAdded value: +0 - changed
Input schema / properties / max_followers / descriptionPrevious value: -"Maximum followers on this page; 0 means no maximum."New value: +"Maximum followers on this page. 0 = no maximum." - added
Input schema / properties / min_followers / defaultAdded value: +0 - changed
Input schema / properties / min_followers / descriptionPrevious value: -"Minimum followers on this page."New value: +"Minimum followers on this page. 0 = no minimum." - changed
Input schema / properties / search_id / descriptionPrevious value: -"Pass searchId from the previous page with cursor."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / sort / defaultAdded value: +"relevance" - changed
Input schema / properties / sort / descriptionPrevious value: -"Sort this page: relevance (default), followers or likes descending."New value: +"Sort this page." - added
Input schema / properties / verified_only / defaultAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "creators": { + "items": { + "properties": { + "bio": { + "type": "string" + }, + "bioLink": { + "type": "string" + }, + "followers": { + "type": "integer" + }, + "following": { + "type": "integer" + }, + "friends": { + "description": "Mutual follows.", + "type": "integer" + }, + "handle": { + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "joined": { + "description": "Account creation time, RFC 3339 UTC.", + "type": "string" + }, + "language": { + "type": "string" + }, + "likes": { + "description": "Total likes received.", + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "private": { + "type": "boolean" + }, + "region": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "shopSeller": { + "description": "Account is a TikTok Shop seller.", + "type": "boolean" + }, + "url": { + "type": "string" + }, + "verified": { + "type": "boolean" + }, + "videos": { + "type": "integer" + } + }, + "required": [ + "handle", + "followers", + "following", + "likes", + "videos" + ], + "type": "object" + }, + "type": "array" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "creators", + "hasMore" + ], + "type": "object" +}
- Changed
search_videos11 fields changed- added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"How many videos to return, 1-20. Defaults to 20."New value: +"Videos per page." - changed
Input schema / properties / count / maximumPrevious value: -50New value: +20 - added
Input schema / properties / date / defaultAdded value: +"any" - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"The search phrase, e.g. 'home gym'."New value: +"Search phrase, e.g. 'home gym'." - added
Input schema / properties / offset / defaultAdded value: +0 - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset. Defaults to 0. Pass searchId when > 0."New value: +"From the previous response's next; omit on the first page." - changed
Input schema / properties / search_id / descriptionPrevious value: -"The searchId returned by the first page; required for offset > 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / sort / defaultAdded value: +"relevance" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
shop_catalog - Added
shop_category - Added
shop_deals - Added
shop_keyword_page - Added
shop_product_detail - Added
shop_product_reviews - Added
shop_product_videos - Added
shop_related_products - Added
shop_seller - Added
shop_suggest - Changed
similar_videos6 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / cursorAdded value: +{ + "default": "0", + "description": "From the previous response's next; omit on the first page.", + "maxLength": 2048, + "type": "string" +} - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / video_id / descriptionPrevious value: -"Numeric video ID from video search or detail."New value: +"Post id (videos[].id)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
sound_detail - Changed
sound_videos7 fields changed- added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-50; default 20."New value: +"Requested page size." - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Native pagination cursor; default 0."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / music_id / descriptionPrevious value: -"Numeric sound ID from search_sounds or video_detail.musicId."New value: +"Sound id (sound.id on a post, or sounds[].id)." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + }, + "videos": { + "items": { + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "videos", + "hasMore" + ], + "type": "object" +}
- Added
sticker_detail - Added
sticker_discover - Added
sticker_videos - Changed
topic_detail3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / query_id / descriptionPrevious value: -"CSI topic queryId returned by search_topics, browse_topics, trending_topics or related_topics. Not a video ID, username or keyword."New value: +"queryId from search_topics, browse_topics, trending_topics or related_topics." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "relatedProduct": { + "type": "object" + }, + "topCountries": { + "items": { + "type": "object" + }, + "type": "array" + }, + "topic": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "description": "TikTok's 0-100 popularity score.", + "type": "integer" + }, + "queryId": { + "description": "query_id input.", + "type": "string" + }, + "queryText": { + "type": "string" + }, + "searchVolume": { + "description": "TikTok's 7-day search popularity figure.", + "type": "integer" + }, + "trend7d": { + "description": "Daily readings, oldest first.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "videoCount": { + "description": "Videos TikTok matches to the search; 0 marks a content gap.", + "type": "integer" + } + }, + "required": [ + "queryId", + "queryText", + "searchVolume", + "videoCount" + ], + "type": "object" + } + }, + "required": [ + "topic" + ], + "type": "object" +}
- Changed
trending_searches4 fields changed- added
Input schema / properties / count / defaultAdded value: +10 - changed
Input schema / properties / count / descriptionPrevious value: -"Requested page size, 1-30; default 10. TikTok may return a different number."New value: +"Requested page size. TikTok may return a different number." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "searches": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "searches" + ], + "type": "object" +}
- Changed
trending_topics8 fields changed- added
Input schema / properties / category / defaultAdded value: +"all" - changed
Input schema / properties / category / descriptionPrevious value: -"Trending category tab."New value: +"Trending category tab. Use display names from list_channels.trendingCategories." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / limit / defaultAdded value: +20 - changed
Input schema / properties / limit / descriptionPrevious value: -"How many topics to return, 1-20. Defaults to 20."New value: +"Topics per page." - added
Input schema / properties / offset / defaultAdded value: +0 - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset. Defaults to 0."New value: +"From the previous response's next; omit on the first page." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "channel": { + "type": "string" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "tab": { + "type": "string" + }, + "topics": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "popularity": { + "description": "TikTok's 0-100 popularity score.", + "type": "integer" + }, + "queryId": { + "description": "query_id input.", + "type": "string" + }, + "queryText": { + "type": "string" + }, + "searchVolume": { + "description": "TikTok's 7-day search popularity figure.", + "type": "integer" + }, + "trend7d": { + "description": "Daily readings, oldest first.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "videoCount": { + "description": "Videos TikTok matches to the search; 0 marks a content gap.", + "type": "integer" + } + }, + "required": [ + "queryId", + "queryText", + "searchVolume", + "videoCount" + ], + "type": "object" + }, + "type": "array" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "topics", + "hasMore" + ], + "type": "object" +}
- Changed
user_profile3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / handle / descriptionPrevious value: -"The handle, with or without a leading @, e.g. 'pawpet05'."New value: +"Handle with or without @, e.g. pawpet05." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "bio": { + "type": "string" + }, + "bioLink": { + "type": "string" + }, + "followers": { + "type": "integer" + }, + "following": { + "type": "integer" + }, + "friends": { + "description": "Mutual follows.", + "type": "integer" + }, + "handle": { + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "joined": { + "description": "Account creation time, RFC 3339 UTC.", + "type": "string" + }, + "language": { + "type": "string" + }, + "likes": { + "description": "Total likes received.", + "type": "integer" + }, + "nickname": { + "type": "string" + }, + "private": { + "type": "boolean" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "region": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "shopSeller": { + "description": "Account is a TikTok Shop seller.", + "type": "boolean" + }, + "url": { + "type": "string" + }, + "verified": { + "type": "boolean" + }, + "videos": { + "type": "integer" + } + }, + "required": [ + "handle", + "followers", + "following", + "likes", + "videos" + ], + "type": "object" +}
- Added
user_profile_by_id - Changed
video_captions3 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / subtitle_url / descriptionPrevious value: -"Exact HTTPS TikTok CDN subtitle URL returned in subtitleInfos, not a video page URL."New value: +"Exact HTTPS TikTok CDN subtitle URL from subtitleInfos, not a video page URL." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "format": { + "type": "string" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "text": { + "description": "The WebVTT file as returned by TikTok.", + "type": "string" + } + }, + "required": [ + "format", + "text" + ], + "type": "object" +}
- Changed
video_comments8 fields changed- changed
Input schema / properties / aweme_id / descriptionPrevious value: -"The video's id, from search_videos or related_videos."New value: +"Post id (videos[].id)." - added
Input schema / properties / count / defaultAdded value: +20 - changed
Input schema / properties / count / descriptionPrevious value: -"How many comments to return, 1-50. Defaults to 20."New value: +"Comments per page." - added
Input schema / properties / cursor / defaultAdded value: +0 - changed
Input schema / properties / cursor / descriptionPrevious value: -"Pagination cursor. Defaults to 0; pass back nextCursor."New value: +"From the previous response's next; omit on the first page." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - added
Input schema / properties / sortAdded value: +{ + "default": "relevant", + "description": "Comment ordering. relevant is TikTok's ranking; newest is chronological.", + "enum": [ + "relevant", + "newest" + ], + "maxLength": 2048, + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "comments": { + "items": { + "properties": { + "author": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "id": { + "description": "comment_id input.", + "type": "string" + }, + "isCreator": { + "description": "Written by the video's creator.", + "type": "boolean" + }, + "likes": { + "type": "integer" + }, + "posted": { + "type": "string" + }, + "replies": { + "type": "integer" + }, + "text": { + "type": "string" + } + }, + "required": [ + "id", + "text", + "likes" + ], + "type": "object" + }, + "type": "array" + }, + "hasMore": { + "type": "boolean" + }, + "next": { + "description": "Arguments to add to this same call for the next page. Absent when there is no next page.", + "type": "object" + }, + "previous": { + "description": "Arguments for the page before this one, where TikTok pages both ways.", + "type": "object" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "total": { + "description": "TikTok's reported comment count.", + "type": "integer" + }, + "truncated": { + "properties": { + "note": { + "type": "string" + }, + "of": { + "type": "integer" + }, + "returned": { + "type": "integer" + } + }, + "required": [ + "returned", + "of", + "note" + ], + "type": "object" + } + }, + "required": [ + "comments", + "hasMore" + ], + "type": "object" +}
- Changed
video_detail3 fields changed- changed
Input schema / properties / aweme_id / descriptionPrevious value: -"The numeric video or photo post id."New value: +"Post id (videos[].id)." - added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "allowsAdUse": { + "description": "Creator lets brands run this post as an ad.", + "type": "boolean" + }, + "caption": { + "type": "string" + }, + "captions": { + "items": { + "properties": { + "language": { + "type": "string" + }, + "source": { + "description": "ASR = TikTok auto-captions; MT = machine translation; otherwise creator-provided.", + "type": "string" + }, + "url": { + "description": "WebVTT file for video_captions; expires after a few hours.", + "type": "string" + } + }, + "required": [ + "language", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "comments": { + "type": "integer" + }, + "creator": { + "properties": { + "followers": { + "type": "integer" + }, + "handle": { + "description": "TikTok @handle without the @.", + "type": "string" + }, + "id": { + "description": "Numeric user id (user_id inputs).", + "type": "string" + }, + "nickname": { + "type": "string" + }, + "secUid": { + "description": "secUid (sec_uid inputs).", + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "type": "object" + }, + "durationSec": { + "type": "number" + }, + "effects": { + "description": "Effects used (sticker_id input).", + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hashtags": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "imageCount": { + "description": "Slides in a photo post.", + "type": "integer" + }, + "isAd": { + "type": "boolean" + }, + "language": { + "type": "string" + }, + "likes": { + "type": "integer" + }, + "photoPost": { + "type": "boolean" + }, + "pinned": { + "type": "boolean" + }, + "place": { + "description": "Tagged location (place_id input).", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "posted": { + "description": "Upload time, RFC 3339 UTC.", + "type": "string" + }, + "products": { + "description": "TikTok Shop products linked from the post.", + "items": { + "properties": { + "id": { + "description": "TikTok Shop product_id.", + "type": "string" + }, + "name": { + "description": "Short name shown on the video's product link.", + "type": "string" + }, + "sellerId": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "saves": { + "type": "integer" + }, + "shares": { + "type": "integer" + }, + "sound": { + "properties": { + "author": { + "type": "string" + }, + "id": { + "description": "music_id input.", + "type": "string" + }, + "original": { + "description": "An original sound made by the poster, not a licensed track.", + "type": "boolean" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "url": { + "type": "string" + }, + "views": { + "type": "integer" + } + }, + "required": [ + "id", + "views", + "likes", + "comments", + "shares", + "saves" + ], + "type": "object" +}
- Changed
video_transcript4 fields changed- added
Input schema / properties / detailAdded value: +{ + "default": "compact", + "description": "full adds TikTok's raw payload (large).", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / language / descriptionPrevious value: -"Optional preferred caption language, e.g. en, es or eng-US."New value: +"Optional preferred caption language, e.g. en, es, or eng-US." - changed
Input schema / properties / video / descriptionPrevious value: -"Full https://www.tiktok.com/@creator/video/<id> URL or the numeric video id."New value: +"Post id or full https://www.tiktok.com/@creator/video/<id> URL." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "available": { + "description": "Caption languages on the video.", + "items": { + "type": "string" + }, + "type": "array" + }, + "language": { + "type": "string" + }, + "note": { + "type": "string" + }, + "raw": { + "description": "TikTok's full payload; present only with detail=full." + }, + "segments": { + "items": { + "properties": { + "end": { + "type": "number" + }, + "start": { + "type": "number" + }, + "text": { + "type": "string" + } + }, + "required": [ + "start", + "end", + "text" + ], + "type": "object" + }, + "type": "array" + }, + "source": { + "type": "string" + }, + "text": { + "type": "string" + }, + "trackSource": { + "type": "string" + }, + "video": { + "type": "object" + } + }, + "type": "object" +}
45 tool updates
- First observed
audience_demographics - First observed
browse_topics - First observed
comment_replies - First observed
content_guidance - First observed
creator_followers - First observed
creator_following - First observed
creator_playlists - First observed
creator_posts - First observed
creator_reposts - First observed
explore_categories - First observed
explore_videos - First observed
hashtag_detail - First observed
hashtag_videos - First observed
list_channels - First observed
list_languages - First observed
pick_comment_winners - First observed
place_detail - First observed
place_videos - First observed
playlist_videos - First observed
product_trend_check - First observed
recommended_videos - First observed
related_hashtags - First observed
related_queries - First observed
related_topics - First observed
related_videos - First observed
search_all - First observed
search_hashtags - First observed
search_live - First observed
search_photos - First observed
search_popularity - First observed
search_sounds - First observed
search_suggestions - First observed
search_topics - First observed
search_users - First observed
search_videos - First observed
similar_videos - First observed
sound_videos - First observed
topic_detail - First observed
trending_searches - First observed
trending_topics - First observed
user_profile - First observed
video_captions - First observed
video_comments - First observed
video_detail - First observed
video_transcript
Publisher details
- Operator
- TokConnect LLC · Publisher source
- Operator website
- https://tokconnect.com
- Vendor relationship
- Independent · Publisher source
- Documentation
- https://tokconnect.com/connect/
- Trust center
- Not available
- Restrictions
- Requires a TokConnect account (sign in with Google). New accounts get 50 free credits; one tool call uses one credit. Paid plans from $49/month add more credits. Connect with OAuth or an API key. · Publisher source
Related MCP Connectors
TikTok data for agents: videos, creators, comments, search, transcripts. 25 tools, pay per call.
Live TikTok data for AI agents: trends, posts, creators, comments, sounds, hooks, video analysis.
Social Expert by ForUsApps, LLC is a hosted TikTok research MCP connector for AI agents. Research video-format trends, posting times by audience market and timezone, content ideas and hooks, keywords and hashtags. Upload MP4/MOV drafts for timestamped video feedback and revisit saved reports. Requires a Social Expert account and OAuth. Free one-time allowances and paid monthly plans are available. Research and setup guide: https://socialexpert.app/tiktok-mcp — Does not provide bulk scraping, ads management, publishing or private follower analytics.
660+ data tools for agents: TikTok, Douyin, Instagram, YouTube, X, weather, GitHub. Pay per call.
Related MCP Servers
- AlicenseAqualityCmaintenanceLets an AI agent read public TikTok data with no API keys or developer account: search videos and hashtags, fetch profiles, recent videos and comments, discover creators posting about a topic, and transcribe videos through your own OpenAI-compatible speech-to-text endpoint. All popular MCP clients can launch it via uvx, and every tool returns structured output as a read-only operation.61MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to research TikTok data, including video and creator discovery, search trend analysis, content gap identification, and comment reading, through the TokConnect hosted service.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients and skill-aware agents to retrieve structured TikTok videos, profiles, hashtags, comments, followers, and related feeds without login. It supports natural-language requests for filtering, transcripts, downloads, and AI labels such as brand safety and sentiment.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to download TikTok videos without watermarks, analyze creator metrics and audience insights, track trending content and hashtags, and search videos, users, and sounds through RapidAPI integration.-
Glama MCP Gateway
Add one secure layer between your agents and this server.