# 抖音 星图达人连接用户来源 API (douyin.xingtu_touch_distribution)

- Canonical page: https://everyinfra.com/douyin-api/xingtu_touch_distribution
- Endpoint: POST /api/v1/social with {"platform": "douyin", "action": "xingtu_touch_distribution", "params": {...}}
- Price: $0.016 per call ($16 per 1,000 requests); failed and empty results are not charged
- Returns: single object
- Mode: sync; add "mode": "async" for slow tasks

想知道一个星图达人的连接用户集中在哪些内容类目，用星图达人连接用户来源：按 `douyin_id` 返回 `categories`，最多三层，每个类目带名称和数量，下一层放在子类目里，结构与上一层相同。从一级类目的数量比起，再往下钻到子类目，就能看出这批用户对应的内容分布。

整份结果只有 `creator_id`、`categories` 和 `platform` 三个字段，没有人数分档和排名，这些在连接用户结构那一页。存档时拿 `creator_id` 做键：它是星图商业达人的稳定 ID，和公开主页的 user_id、抖音号各是一套。

## Health

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

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| douyin_id | not declared | yes | not declared | 达人个人主页展示的抖音号（unique_id）；也可以直接填星图达人 ID（19 位数字，即 xingtu_creator_search 返回的 creator_id）。不是星图达人时返回空结果、不扣费。 |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| creator_id | 星图商业达人稳定 ID；不是公开主页 user_id 或抖音号。 |
| categories | xingtu_conversion_ability：带货品类分布 [{name 品类, share 占比（0–1）, sales_range_cny 销售额区间}]，有带货时才有；xingtu_touch_distribution：连接用户来源的内容类目，最多三层 [{name 类目, touch_count 数量, subcategories 下一层（同结构）}]。 |
| platform | 数据来源平台标识，与请求里的 platform 一致（如 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": "xingtu_touch_distribution",
  "params": {
    "douyin_id": "XiaoZhenlla"
  }
}'
```

```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": "xingtu_touch_distribution",
        "params": {
            "douyin_id": "XiaoZhenlla",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

No real sample for these example parameters yet: structure only, every value is a placeholder (…).

```text
{
  "id": "req_…",
  "platform": "douyin",
  "action": "xingtu_touch_distribution",
  "results": {
    "creator_id": …,
    "categories": …,
    "platform": …
  },
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### `categories` 最多有几层，怎么展开？

最多三层。每个类目带名称和数量，再往下一层的列表放在子类目里，结构和上一层一样，所以用同一个递归函数就能把整棵树遍历完。

### 只有抖音号能直接查吗？

能。`douyin_id` 填达人主页上展示的抖音号就行，不用先换成星图达人 ID；填 19 位数字的星图达人 ID 也可以。如果这个账号不是星图达人，返回空结果，不扣费。

### 要看连接用户的人数和排名，该用哪一页？

用连接用户结构那一页。来源这一页只返回类目树，不含人数分档、总数和排名；结构页给四档人数、占比、同行业中位数和总数排名，还有星图给的连接类型。两页的参数完全一样，只需要 `douyin_id`；两页返回的 `creator_id` 也相同，可以用它把两边的结果合并成一条记录。

## 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
