SocialToAIStart freeConsole
POST/v1/call/douyin.kol_searchPreview

Douyin KOL search API (Xingtu)

Only on Douyin.

The Douyin KOL search API (Xingtu) searches Douyin creators on Xingtu by words in their name: Xingtu creator ID, name, location, content categories, followers. The creator ID the other Xingtu endpoints take comes from here. 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.

100 credits on sign-up, no card needed
3 creditsper call
Up to 20 per pageone page per call
2026-10-17last tested
889 Bsample response, 1 item

Last updated:

Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Request and response

curl https://api.socialtoai.com/v1/call/douyin.kol_search \  -H "Authorization: Bearer $SOCIALTOAI_KEY" \  -H "Content-Type: application/json" \  -d '{    "query": "美食"  }'
import osimport requestsresponse = requests.post(    "https://api.socialtoai.com/v1/call/douyin.kol_search",    headers={"Authorization": f"Bearer {os.environ['SOCIALTOAI_KEY']}"},    json={        "query": "美食",    },)print(response.json())
# Connected over MCP? Ask in plain words.Use the Douyin Xingtu creator search interface (douyin.kol_search) with query: 美食.# Your AI calls the call tool with:{  "query": "美食"}
Sign in to run3 creditsOpens in the Playground with these parameters after you sign in. It never runs by itself.
200 OK889 B3 credits
{  "op": "douyin.kol_search",  "platform": "douyin",  "status": "ok",  "items": [    {      "platform": "douyin",      "id": "…",      "ref": "…",      "approx": [],      "type": "entry",      "entry_type": "creator",      "title": "…",      "url": null,      "rank": null,      "heat": null,      "fields": {        "account_id": null,        "username": null,        "location": "…",        "categories": ["…"],        "subcategories": ["…"],        "followers": 48169      }    }  ],  "unavailable": ["fields.account_id", "fields.username"],  "page": {    "has_more": true,    "cursor": "cur_…",    "cursor_expires_at": "2026-10-12T22:36:50.000Z"  },  "cost_credits": 3}
entry_type
creator
account_id
null
username
null
location
…
followers
48169

Names and text were removed from the sample; the numbers are as recorded.

Sample data1 of the 20 items recorded

2 parameters.
1 required.

Send them as a JSON body with POST. Your key goes in the Authorization header, never in the URL.

NameTypeRequiredDefaultDescription
querystringRequired—Search terms, matched against creators' names
cursorstringOptional—Pass page.cursor from the last response to get the next page.

The fields of each item.
What Douyin cannot give is marked.

FieldTypeMeaning
items[].titlestringThe entry's title or name.
items[].urlstringA link that opens it; null where the platform's list has none.
items[].rankintegerPosition on a board, from 1.
items[].heatintegerThe platform's heat score.
items[].fields.account_idstringalways nullThe creator's account ID on the platform, which the platform's account calls take.
items[].fields.usernamestringalways nullThe creator's handle.
items[].fields.locationstringWhere the creator is based, in the platform's words.
items[].fields.categoriesstring[]Content categories, first level, in the platform's words.
items[].fields.subcategoriesstring[]Content categories, second level, in the platform's words.
items[].fields.followersintegerFollowers.
nullFields Douyin cannot give

Read null as “Douyin did not give this”, not as zero. These are always null on this call:

  • fields.account_idThe creator's account ID on the platform, which the platform's account calls take.
  • fields.usernameThe creator's handle.

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.

One call returns a page of up to 20 items. When page.has_more is true, send page.cursor back as cursor for the next page; each page costs 3 credits and a cursor works for 30 minutes.
A call that runs and finds nothing is a successful call: status is "empty", items is empty, and it costs 3 credits.

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.

  1. Search Douyin creators on Xingtu by words in their name: 美食.
    call {"op":"douyin.kol_search","query":"美食"}
    3 credits

These ready-made tools call it when they run.

Questions.
Short answers.

Everything on Douyin
Do I need a Douyin account or Douyin's own API access?
No. You only need a SocialToAI key. The call returns content and account information publicly visible on Douyin; you never sign in to Douyin or apply for anything there.
What does “Preview” mean here?
Preview: this interface is not marked stable yet, so its parameters and fields may still change. It is charged like any other call, and a failed call is not charged.

Your AI is one URL away
from all of social media.

100 credits on sign-up, no card needed