# 抖音 音乐详情 API (douyin.music_detail)

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

抖音音乐详情读一首音乐或原声的资料：标题 `title`、作者 `author_name`、时长、封面、播放地址 `audio_url` 和歌词文件 `lyric_url`。其中 `use_count` 是用这段音乐发过的作品数，就是抖音音乐页上的「N 人使用」。

`music_id` 是纯数字，取自音乐搜索结果行里的 `id`，也可以直接传 douyin.com/music/ 后面带 ID 的链接。`audio_url` 可能会过期，要留存请及时下载；`lyric_url` 只有平台给了才有。

## Health

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

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| music_id | not declared | yes | not declared | 抖音音乐 ID，纯数字（如 7699717253151558410），取自 music_search 返回行的 id；也收 douyin.com/music/<ID> 链接。 |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| id | 该记录在原平台上的唯一标识。仅在同一平台内唯一，跨平台可能重复。 |
| url | 该记录在原平台上的可访问链接。 |
| title | 标题。平台无标题概念时（如纯文本帖）为 null。 |
| author_name | 作者昵称（显示名）。 |
| duration_seconds | 时长，单位秒。非视频/音频内容为 null。 |
| duration_sec | 视频时长（秒）。 |
| use_count | 用这段音乐发过的作品数（music_search、music_detail），即抖音音乐页上的「N 人使用」。 |
| cover_image_url | 封面图链接：search / user_posts 是作品封面，music_search / music_detail 是音乐封面，billboard_topic_hot 是话题配图。 |
| audio_url | 音频地址：transcript 是视频音轨（mp3），music_search、music_detail 是这段音乐的播放地址；可能会过期。 |
| lyric_url | 歌词文件链接（music_search、music_detail，平台给了才有）。 |
| 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": "music_detail",
  "params": {
    "music_id": "7699717253151558410"
  }
}'
```

```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": "music_detail",
        "params": {
            "music_id": "7699717253151558410",
        },
    },
    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": "music_detail",
  "results": {
    "id": …,
    "url": …,
    "title": …,
    "author_name": …,
    "duration_seconds": …,
    "duration_sec": …,
    "use_count": …,
    "cover_image_url": …,
    "audio_url": …,
    "lyric_url": …,
    "platform": …
  },
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### `music_id` 从哪里来？

先用音乐搜索按歌名、歌手或原声名查，结果行里的 `id` 就是 `music_id`，纯数字，如 7699717253151558410。手里只有音乐页链接时，直接传 douyin.com/music/<ID> 形式的链接也行。

### `use_count` 能用来看什么？

它是用这段音乐发过的作品数，和抖音音乐页上显示的「N 人使用」是同一个数。选配乐时可以对几首候选各读一次再比较，也可以按固定间隔重复读同一首，看使用量怎么变化。

### 音乐详情和音乐搜索的返回有什么不同？

歌曲信息的字段基本一致：`title`、`author_name`、`use_count`、`audio_url`、`lyric_url` 等都有。区别是搜索那一页多一个标签字段 tags，而且能翻页；详情这一页只返回一个对象，不翻页，也没有标签。

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