/v1/call/douyin.keyword_audiencePreviewDouyin trend-index keyword audience API
Only on Douyin.
The Douyin trend-index keyword audience API returns who is behind a keyword on Douyin over a date range, from the platform's own keyword tool: the share and TGI of each age group, gender, province, city, city tier and interest. One call costs 2 credits ($0.004 to $0.0067 depending on the pack); failed calls are free. Call it over HTTP or from your AI client over MCP. Last tested 2026-10-17.
Last updated:
Request and response
curl https://api.socialtoai.com/v1/call/douyin.keyword_audience \ -H "Authorization: Bearer $SOCIALTOAI_KEY" \ -H "Content-Type: application/json" \ -d '{ "keyword": "咖啡", "since": "2026-09-01T00:00:00Z", "until": "2026-09-30T00:00:00Z" }'import osimport requestsresponse = requests.post( "https://api.socialtoai.com/v1/call/douyin.keyword_audience", headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"}, json={ "keyword": "咖啡", "since": "2026-09-01T00:00:00Z", "until": "2026-09-30T00:00:00Z", },)print(response.json())# Connected over MCP? Ask in plain words.Use the Douyin trend-index keyword audience interface (douyin.keyword_audience) with keyword: 咖啡, since: 2026-09-01T00:00:00Z, until: 2026-09-30T00:00:00Z.# Your AI calls the call tool with:{ "keyword": "咖啡", "since": "2026-09-01T00:00:00Z", "until": "2026-09-30T00:00:00Z"}{ "op": "douyin.keyword_audience", "platform": "douyin", "status": "ok", "items": [ { "platform": "douyin", "id": "咖啡", "ref": "咖啡", "approx": [], "type": "entry", "entry_type": "keyword_audience", "title": "咖啡", "url": null, "rank": null, "heat": null, "fields": { "age": [ { "label": "18-23", "share": 0.1968, "tgi": 174.17389307762207 }, { "label": "24-30", "share": 0.2233, "tgi": 173.71695132383041 } ], "gender": [ { "label": "男", "share": 0.47, "tgi": 98.27023904973254 }, { "label": "女", "share": 0.53, "tgi": 101.58569115669054 } ], "province": [ { "label": "北京", "share": 0.0221, "tgi": 120.01085780496312 }, { "label": "天津", "share": 0.0121, "tgi": 105.42964416985868 } ], "city": [ { "label": "上海", "share": 0.0245, "tgi": 125.4042968127423 }, { "label": "广州", "share": 0.0237, "tgi": 117.79286978677968 } ], "city_tier": [ { "label": "一线城市", "share": 0.08856723771604946, "tgi": 114.35574144488798 }, { "label": "新一线城市", "share": 0.19688659709388875, "tgi": 103.66957853814951 } ], "interest": [ { "label": "时尚", "share": 0.15486799847286528, "tgi": 111.80033780828992 }, { "label": "美食", "share": 0.10207902382205732, "tgi": 113.58111661037135 } ] } } ], "unavailable": [], "cost_credits": 2}- entry_type
- keyword_audience
Names and text were removed from the sample; the numbers are as recorded.
3 parameters.
All required.
Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| keyword | string | Required | — | One keyword; letter case does not matter |
| since | datetime | Required | — | The first day counted: the China-time (UTC+8) calendar day this moment falls on |
| until | datetime | Required | — | The last day counted, read the same way; the platform publishes a day or two late |
The fields of each item.
What Douyin cannot give is marked.
| Field | Type | Meaning |
|---|---|---|
| items[].title | string | The entry's title or name. |
| items[].url | string | A link that opens it; null where the platform's list has none. |
| items[].rank | integer | Position on a board, from 1. |
| items[].heat | integer | The platform's heat score. |
| items[].fields.age | array | By age group: label, share, tgi. tgi says how over-represented the group is; 100 is average. |
| items[].fields.gender | array | By gender: label, share, tgi. |
| items[].fields.province | array | By province: label, share, tgi. |
| items[].fields.city | array | By city, the largest only, so the shares do not add up to 1: label, share, tgi. |
| items[].fields.city_tier | array | By city tier: label, share, tgi. |
| items[].fields.interest | array | By interest. One person can have several, so the shares do not add up to 1: label, share, tgi. |
nullFields Douyin cannot giveDouyin gives every field of this call. Where one item lacks a value, that field is null.
Every item also has platform, id, ref, approx and type; the response around the items is the same on every call. Response format
What to expect.
1 call per second per key, 5 after a purchase; going over is not charged. Rate limits
A failed call costs 0 credits and is never retried on its own. Error codes
Once connected over MCP, these questions use it.
Get who is behind a keyword on Douyin over a date range, from the platform's own keyword tool (keyword: 咖啡, since: 2026-09-01T00:00:00Z, until: 2026-09-30T00:00:00Z).
2 creditscall {"op":"douyin.keyword_audience","keyword":"咖啡","since":"2026-09-01T00:00:00Z","until":"2026-09-30T00:00:00Z"}