TikTok API endpoint
Returns the app's "music choices" list: the recommended sounds it offers on the video-creation page. The upstream is `/aweme/v1/music/choices/`; each `music_list` entry is the same full sound object the chart routes return (title, album, artists, covers, play URL, duration, ...). Measured 2026-10-21: 56,078 B / 6 full sound objects on one call and 7 on later calls (the same six at the front), and the payload carries NO paging fields (no cursor/has_more), so this is a one-shot recommendation list. The measured `item_id`, `music_id`, `count` and `scene` parameters did not deterministically change the list — the recommendations rotate — so none is exposed.
/tiktok/mobile/music/choicesThe "music choices" list TikTok offers on the video-creation page: a small set of recommended sounds for the video
being made. The upstream is GET /aweme/v1/music/choices/, captured from the running 47.4.3 app and reproduced
end-to-end against the live gateway.
What a sound carries. Each music_list entry is the same full sound object the chart routes return: title,
album, artists (with avatars), cover/cover_medium/cover_large, play URL, duration and the sound's playback
metadata.
One-shot. The measured payload carries no paging fields (no cursor, no has_more), so this is a single
recommendation page. The recommended set rotates between calls — measured 6 sounds on one call and 7 on later calls
with the same six at the front — and the app-side item_id, music_id, count and scene parameters were each
measured and did not deterministically change it. The endpoint therefore takes no parameters rather than exposing
controls that don't work.
It answers on the core
aggr16-normal.tiktokv.us / api16-normal-useast5.tiktokv.us pair.
Query parameters: none.
Errors:
Measured 2026-10-21:
| call | result |
|---|---|
| bare | 56,078 B; 6 full sound objects (first title "One Call Away") |
| later bare calls | 7 sounds, the same six at the front |
item_id / music_id / count / scene (each) | no deterministic change to the recommended set |
| shipped-service canary | sounds=6 first="One Call Away" |
Example request:
GET /api/v1/tiktok/mobile/music/choices
Example response (truncated):
{
"code": 200,
"msg": "OK",
"data": {
"music_list": [
{
"id": 6353936740163521282,
"title": "One Call Away",
"album": "One Call Away",
"duration": 30,
"artists": [{"name": "...", "avatar": {"url_list": ["https://p16-...tiktokcdn-us.com/..."]}}],
"play_url": {"uri": "...", "url_list": ["..."]},
"cover_large": {"url_list": ["..."]}
}
],
"status_code": 0,
"status_msg": ""
}
}
Notes for callers:
/api/v1/tiktok/mobile/music/trending or /api/v1/tiktok/mobile/music/pick for the charts, and
/api/v1/tiktok/mobile/music/posts for the videos using one sound./api/v1/tiktok/mobile/music/detail.| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/tiktok/mobile/music/choices" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"music_list": [
{
"id": 6353936740163522000,
"title": "One Call Away",
"album": "One Call Away",
"duration": 30,
"artists": [
{
"name": "...",
"avatar": {
"url_list": [
"https://p16-...tiktokcdn-us.com/..."
]
}
}
],
"play_url": {
"uri": "...",
"url_list": [
"..."
]
},
"cover_large": {
"url_list": [
"..."
]
}
}
],
"status_code": 0,
"status_msg": ""
}
}Request schema
No body schema
Response schema
#/definitions/tiktokmobile.musicChoicesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| extra | unknown | No | ||||
| log_pb | unknown | No | ||||
| music_list | array | No | ||||
| status_code | integer | No | 0 | |||
| status_msg | string | No |
| Status | Description | Schema |
|---|---|---|
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/tiktok/mobile/music/choices" \
-H "x-api-key: $CRAWLORA_API_KEY"