# TikTok 音乐榜 API (tiktok.music_chart)

- Canonical page: https://everyinfra.com/tiktok-api/music_chart
- Endpoint: POST /api/v1/social with {"platform": "tiktok", "action": "music_chart", "params": {...}}
- Price: $0.000806 per call ($0.81 per 1,000 requests); failed and empty results are not charged
- Returns: list, default 50, max 50 per call (larger values are capped)
- Mode: sync; add "mode": "async" for slow tasks

TikTok 音乐榜一次给出整张榜单，默认 50 首，每首带 `rank` 名次、曲名、歌手、专辑、时长、用过这首音乐的视频数 `use_count`，以及试听链接 `audio_url`。它回答「现在 TikTok 上哪些歌最热、哪些在走红」，适合给短视频选配乐、观察榜单更替，或者把热歌接到视频侧，看它们是怎么被使用的。

`chart` 默认 `top50`，`viral50` 是近期在 TikTok 上走红的歌。按官方创作者学院的说明，Top 50 按创作量、播放量和互动计算，是美国的热门歌曲周榜，Viral 50 按全球互动选出上升最快的歌。榜单没有关键词和翻页参数，要按歌名、歌手查某一首，用音乐搜索那一页，它每页最多 20 首、需要翻页。

## Health

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

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| chart | enum: top50 / viral50 | no | not declared | 榜单：top50（TikTok 音乐 Top 50，默认）或 viral50（Viral 50，近期在 TikTok 上走红的歌）。一次给整榜 50 首。 |
| limit | integer (1–50) | no | 50 | 这次调用最多返回的条数，整数，1–50；不传按默认值，实际返回可能少于这个数。超过上限照收，按上限返回。 |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| rank | 名次，从 1 起（music_chart / shop_hot_products）。 |
| id | 该记录在原平台上的唯一标识。仅在同一平台内唯一，跨平台可能重复。 |
| url | 该记录在原平台上的可访问链接。 |
| title | 标题。平台无标题概念时（如纯文本帖）为 null。 |
| author_name | 评价人名字（shop_product_reviews），平台已打码，如 n**h。 |
| album | 专辑名（music_search / music_chart）；原声、没登记专辑的没有这个字段。 |
| language | 内容语言代码（如 zh、en），由平台判定，可能不准。 |
| duration_seconds | 时长，单位秒。非视频/音频内容为 null。 |
| duration_sec | platform-native meaning |
| use_count | 用过这首音乐的视频数（music_search / music_chart）。 |
| is_commercial | 是否 TikTok 商用曲库里的音乐（music_search / music_chart）。 |
| released_at | 音乐发行日期（music_search / music_chart）；原声、没登记发行日期的没有这个字段。 |
| cover_image_url | 视频封面图链接（带签名，会过期）。 |
| audio_url | 试听音频链接（music_search / music_chart），多为 60 秒片段，带签名、会过期。 |
| 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": "tiktok",
  "action": "music_chart",
  "params": {}
}'
```

```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": "tiktok",
        "action": "music_chart",
        "params": {},
    },
    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": "tiktok",
  "action": "music_chart",
  "results": [
    {
      "rank": …,
      "id": …,
      "url": …,
      "title": …,
      "author_name": …,
      "album": …,
      "language": …,
      "duration_seconds": …,
      "duration_sec": …,
      "use_count": …,
      "is_commercial": …,
      "released_at": …,
      "cover_image_url": …,
      "audio_url": …,
      "platform": …
    }
  ],
  "count": …,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### `top50` 和 `viral50` 该选哪张榜？

要看整体最热的歌选 `top50`，这是默认值；要看近期走红的歌选 `viral50`。两张榜都是一次给整榜 50 首，名次以 `rank` 为准，`limit` 传得再大也只按 50 条返回。

### 榜单里的歌怎么继续查用了它的视频？

榜单每行的 `id` 就是音乐 ID，把它填进「用某音乐的视频」那一页的音乐 ID 参数，就能读到用了这首歌的视频。比较几首歌的热度，可以先看每行的 `use_count`。

### `audio_url` 是整首歌的下载地址吗？

不是。它是试听链接，多为 60 秒片段，带签名、会过期。原声或没登记的歌不出现 `album` 和 `released_at`，读取前先判断字段在不在；`is_commercial` 标出这首歌是否属于 TikTok 商用曲库。

## Also

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