/v1/call/douyin.kol_audiencePreviewDouyin KOL audience API (Xingtu)
Only on Douyin.
The Douyin KOL audience API (Xingtu) returns who follows a Douyin creator, by Xingtu creator ID: followers and share in each segment by gender, age, province, city, city tier, interest, device, consumer group, purchase category and purchase amount. One call costs 3 credits ($0.006 to $0.01 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.kol_audience \ -H "Authorization: Bearer $SOCIALTOAI_KEY" \ -H "Content-Type: application/json" \ -d '{ "id": "6763236383382306828" }'import osimport requestsresponse = requests.post( "https://api.socialtoai.com/v1/call/douyin.kol_audience", headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"}, json={ "id": "6763236383382306828", },)print(response.json())# Connected over MCP? Ask in plain words.Use the Douyin Xingtu creator audience interface (douyin.kol_audience) with id: 6763236383382306828.# Your AI calls the call tool with:{ "id": "6763236383382306828"}{ "op": "douyin.kol_audience", "platform": "douyin", "status": "ok", "items": [ { "platform": "douyin", "id": "…", "ref": "…", "approx": [], "type": "entry", "entry_type": "audience", "title": null, "url": null, "rank": null, "heat": null, "fields": { "measured_at": null, "gender": [ { "name": "male", "share": 0.8084018682929753, "count": 20914248 }, { "name": "female", "share": 0.19159813170702464, "count": 4956855 } ], "age": [ { "name": "18-23", "share": 0.02613169810130031, "count": 669976 }, { "name": "24-30", "share": 0.11262389160089727, "count": 2887501 } ], "province": [ { "name": "福建", "share": 0.034598226662216194, "count": 845507 }, { "name": "香港", "share": 0.001540805252634323, "count": 37654 } ], "city": [ { "name": "北京", "share": 0.14657726964471665, "count": 751515 }, { "name": "上海", "share": 0.12174096383309756, "count": 624177 } ], "interest": [ { "name": "二次元", "share": 0.022866163075920397, "count": 471117 }, { "name": "随拍", "share": 0.5770495394947144, "count": 11889089 } ], "device": [ { "name": "其他", "share": 0.1350657086683392, "count": 3500022 }, { "name": "华为", "share": 0.24915854592413617, "count": 6456564 } ], "city_tier": [ { "name": "二线", "share": 0.18540551970015773, "count": 4530677 }, { "name": "五线", "share": 0.10928394606430417, "count": 2670526 } ], "crowd": [ { "name": "Z世代", "share": 0.015066702484682015, "count": 328216 }, { "name": "资深中产", "share": 0.16493764562162405, "count": 3593034 } ], "purchase_category": [ { "name": "其他", "share": 0.35668521581357804, "count": 3854685 }, { "name": "服饰内衣", "share": 0.20722439582025148, "count": 2239467 } ], "purchase_amount": [ { "name": "50-100", "share": 0.23128677093645555, "count": 2497497 }, { "name": "0-50", "share": 0.3880473446209439, "count": 4190240 } ] } } ], "unavailable": ["fields.measured_at"], "cost_credits": 3}- entry_type
- audience
- measured_at
null
Names and text were removed from the sample; the numbers are as recorded.
1 parameter.
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 |
|---|---|---|---|---|
| id | string | Required | — | Xingtu creator ID, a string of digits; not the Douyin account ID: take it from the Xingtu creator search |
Where to get what you send.
idXingtu creator ID, a string of digits; not the Douyin account ID: take it from the Xingtu creator search (e.g. 6763236383382306828)
Every item these return carries its ref; send it as it is:
kol_searchXingtu creator search
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.measured_at | stringalways null | The day the figures are for, as the start of that day in China time (UTC+8). |
| items[].fields.gender | array | By gender: name, share, count. |
| items[].fields.age | array | By age group: name, share, count. |
| items[].fields.province | array | By province: name, share, count. |
| items[].fields.city | array | By city, the largest only: name, share, count. |
| items[].fields.interest | array | By interest: name, share, count. |
| items[].fields.device | array | By phone brand: name, share, count. |
| items[].fields.city_tier | array | By city tier: name, share, count. |
| items[].fields.crowd | array | By the consumer groups the platform sorts people into: name, share, count. |
| items[].fields.purchase_category | array | By category of goods bought: name, share, count. |
| items[].fields.purchase_amount | array | By amount spent per order: name, share, count. |
nullFields Douyin cannot giveRead null as “Douyin did not give this”, not as zero. These are always null on this call:
fields.measured_atThe day the figures are for, as the start of that day in China time (UTC+8).
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 follows a Douyin creator, by Xingtu creator ID: 6763236383382306828.
3 creditscall {"op":"douyin.kol_audience","id":"6763236383382306828"}Search Douyin creators on Xingtu by words in their name: 美食, then for the first 3: get who follows a Douyin creator, by Xingtu creator ID.
12 creditscall {"op":"douyin.kol_search","query":"美食"}call {"op":"douyin.kol_audience","id":"<ref>"} × 3