# Douyin Creator search API (douyin.creator_search)

- Canonical page: https://everyinfra.com/en/douyin-api/creator_search
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "douyin", "action": "creator_search", "params": {...}}
- Price: $0.000556 per call ($0.56 per 1,000 requests); failed calls and empty results are not charged
- Returns: list, default 20, max 20 per call
- Mode: sync; add "mode": "async" for slow tasks

Douyin Creator search finds accounts by `keyword` and returns each one's nickname, Douyin ID, profile link, avatar, follower count, gender, verification status and whether it is live right now. It is where creator campaigns, competitor mapping and influencer shortlists start: pass a result's `user_id` (the secUid) to follow-up capabilities; `uid` is the same account's numeric ID.

Narrow candidates by followers with `follower_range` and by account kind with `user_type` (general, business or verified individual). Results are candidates, not exact identity matches: accounts with the same or similar names can appear, so check the profile before you reach out. `is_live` reflects the moment of the call.

## Health

- Live health (24h percent, hourly and daily trends): https://api.everyinfra.com/api/v1/social/availability?platform=douyin&action=creator_search

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| keyword | not declared | yes | not declared | A creator nickname, Douyin ID, or related search phrase used for account discovery. It does not run the video `search` action or guarantee an exact identity match. |
| follower_range | enum: 100k_to_1m / 10k_to_100k / 1k_to_10k / over_1m / under_1k | no | not declared | Filters `creator_search` by an account's follower-count band. Use `under_1k`, `1k_to_10k`, `10k_to_100k`, `100k_to_1m`, or `over_1m`; omit it to leave the band unrestricted. |
| user_type | enum: business / general / verified_individual | no | not declared | Filters `creator_search` by account category: `general`, `business`, or `verified_individual`. It is not a buyer category or proof of legal identity. |
| limit | integer (1–20) | no | 20 | The most rows to return in this call, an integer from 1 to 20. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge. |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| user_id | User's unique ID on the platform. |
| douyin_id | Douyin ID: the searchable ID the account holder chooses. |
| nickname | Display name of the account. |
| url | Link to the record on the platform. |
| avatar_url | Avatar image link. Some platforms return sized CDN links that can expire. |
| follower_count | Followers. null means not disclosed, not 0. |
| gender | Gender as shown on the account. |
| is_verified | Whether the platform verified the account. null means it cannot be determined. |
| verify_reason | Verification note as written (profile, creator_search), for business or individual verification; empty or absent for unverified accounts. |
| is_live | Whether the account was live at the moment of the call; a point-in-time state. |
| uid | Numeric user ID (profile / creator_search). user_id is the secUid; both identify the same account. |
| source_keyword | The search term this row matched. |
| platform | Source platform identifier, the same as platform in the request (for example xiaohongshu, tiktok). |

## Example

```bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "douyin",
  "action": "creator_search",
  "params": {
    "keyword": "美食"
  }
}'
```

```python
import os
import requests

response = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}"},
    json={
        "platform": "douyin",
        "action": "creator_search",
        "params": {
            "keyword": "美食",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

Real response to the example request above, captured 2026-10-24T18:28:34Z. `results` and `count` are real with personal information (names, handles, avatars, profile links, contact details) removed. `id`, `billing` and `quota` differ on every call, so only their shape is shown.

```text
{
  "id": "req_…",
  "platform": "douyin",
  "action": "creator_search",
  "results": [
    {
      "user_id": "•••",
      "douyin_id": "•••",
      "nickname": "•••",
      "url": "https://www.douyin.com/•••",
      "avatar_url": "•••",
      "follower_count": 1299670,
      "gender": 0,
      "is_verified": false,
      "verify_reason": "",
      "is_live": 0,
      "uid": "•••",
      "source_keyword": "美食",
      "platform": "douyin"
    }
  ],
  "count": 1,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### Is every result the person I searched for?

Not necessarily. Creator search returns accounts related to the keyword, and accounts with the same or similar nicknames can appear. Before you rely on a match, open its `url` to check the profile, compare the `douyin_id`, and for verified accounts read `verify_reason`.

### How do I find creators of the right size?

Set `follower_range` to `under_1k`, `1k_to_10k`, `10k_to_100k`, `100k_to_1m` or `over_1m` to keep accounts in that band; leave it out for no limit. Add `user_type` to leave out business accounts or keep only verified individuals.

### What can I look up once I have a creator?

Pass the `user_id` from a result to Douyin Posts by user, Creator audience and Creator growth trend to see what the account posts, who follows it and how fast it grows before you decide to work with it.

## Also

- Capability catalog (no key): https://api.everyinfra.com/api/v1/social/catalog?platform=douyin
- OpenAPI: https://everyinfra.com/openapi.json · Agents guide: https://everyinfra.com/agents.md
