把 YouTube、TikTok、Instagram、Facebook、X、小红书、B站、微博、抖音等 1000+ 站点的公开帖子链接,变成结构化 JSON 和视频、图片、音频的直链。四个同步端点:单条提取、按页批量、字幕、YouTube 代理下载。结果在同一个 HTTP 响应里返回,只有成功的请求计费,$0.004/次起。
| 端点 | 用途 | 价格 |
|---|---|---|
| POST /v1/media/extract | 提取单条帖子 | $0.004 / 次 |
| POST /v1/media/playlist | 批量:主页 / 频道 / 播放列表 / 话题 | $0.02 / 页 |
| POST /v1/media/subtitles | 获取字幕(YouTube、B站) | $0.004 / 次 |
| POST /v1/media/youtube-download | YouTube 下载链接(代理) | $0.012 / 次 |
只有成功的请求计费;失败(400 / 429 / 502 / 503 / 504)一律不扣费。批量端点每次调用返回一页,按页计费。下载返回的文件(包括 YouTube 代理链接)不再另外收费。
cURL:提取一条帖子。Python:提取 → 选最高画质 → 带 headers 下载 → 音视频分轨时用 ffmpeg 合并。Node.js:按 next_cursor 逐页拉取一个主页。
curl https://api.apimodels.app/v1/media/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://www.tiktok.com/@creator/video/VIDEO_ID" }'成功时返回 { "code": 200, "msg": "success", "data": { ... } }。data.model 恒为 media-downloader,data.endpoint 标明是哪个端点(post / playlist / subtitles / youtube),其余字段见下面各端点。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| x-apimodels-request-id | 是 | header | 这次请求的 id。用 GET /v1/records/{id} 查它的实际扣费。 |
| x-apimodels-cost | 否 | header | 成功时这次实际扣的美元金额(已含账户折扣)。 |
提取单条帖子 · $0.004 / 次
1000+ 站点的单条公开帖子(YouTube、TikTok、Instagram、Facebook、X、小红书、B站、微博、抖音等),youtu.be、vt.tiktok.com 这类短链直接传。返回文案、作者、数据,以及帖子里每个媒体文件和它的各档画质。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| url | 是 | string | 一条帖子的链接。短链(youtu.be、vt.tiktok.com 等)直接传。 |
curl https://api.apimodels.app/v1/media/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://www.tiktok.com/@creator/video/VIDEO_ID" }'结构取自实际调用,取值和链接换成了占位符;没有的字段不会出现。
{
"code": 200,
"msg": "success",
"data": {
"model": "media-downloader",
"endpoint": "post",
"site": "youtube",
"id": "VIDEO_ID",
"title": "Video title",
"text": "Caption or description of the post",
"post_url": "https://www.youtube.com/watch?v=VIDEO_ID",
"author": { "username": "creator", "display_name": "Creator Name" },
"stats": { "view_count": 1024 },
"medias": [
{
"media_type": "video",
"resource_url": "https://...",
"preview_url": "https://...",
"duration": 19,
"variants": [
{
"quality": 1080,
"quality_label": "1080p",
"video_url": "https://...",
"video_ext": "mp4",
"video_filesize": 5242880,
"audio_url": "https://...",
"audio_ext": "m4a"
},
{
"quality": 360,
"quality_label": "360p",
"video_url": "https://...",
"video_ext": "mp4",
"is_default": true
}
]
},
{
"media_type": "audio",
"resource_url": "https://...",
"duration": 19
}
]
}
}| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| site | 是 | string | 帖子所在平台,如 youtube。 |
| id | 否 | string | 帖子在该平台的 id。 |
| title / text | 否 | string | 标题和文案 / 简介(平台有才返回)。 |
| post_url | 否 | string | 帖子的规范链接。 |
| created_at | 否 | string | 发布时间,格式按平台原样,各站不同。 |
| author | 否 | object | username、display_name(有时还有 id)。 |
| stats | 否 | object | 平台公开的计数,例如 view_count。 |
| medias[] | 是 | array | 帖子里的每个文件一项,字段见下表。 |
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| media_type | 是 | string | video | image | audio | live | file |
| resource_url | 否 | string | 文件直链。有时效,拿到就下载。 |
| preview_url | 否 | string | 封面 / 缩略图。 |
| duration | 否 | number | 时长(秒),视频和音频才有。 |
| headers | 否 | object | 下载这个文件时要带上的请求头(例如 Referer)。只在需要时出现。 |
| variants[] | 否 | array | 可选画质:quality(数字,如 1080)、quality_label(如 "1080p")、video_url、video_ext、video_filesize(字节,已知时)、audio_url / audio_ext(音频是单独一轨时才有)、is_default。 |
批量:主页 / 频道 / 播放列表 / 话题 · $0.02 / 页
一次调用返回一页。把上一页的 next_cursor 作为 cursor 传回去取下一页,has_more 为 false 时停止。支持:YouTube 频道、Shorts、播放列表、话题;Instagram 主页、话题;X;TikTok 主页、话题;抖音;B站;微博。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| url | 是 | string | 主页、频道、播放列表或话题的链接。 |
| cursor | 否 | string | 上一页返回的 next_cursor。第一页不传。 |
curl https://api.apimodels.app/v1/media/playlist \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://www.youtube.com/@channel/videos" }'
# next page: add "cursor": "<next_cursor from the previous response>"{
"code": 200,
"msg": "success",
"data": {
"model": "media-downloader",
"endpoint": "playlist",
"site": "youtube",
"profile": { "username": "@channel" },
"posts": [
{
"id": "VIDEO_ID",
"title": "Video title",
"created_at": "3 days ago",
"medias": [
{
"media_type": "video",
"resource_url": "https://...",
"preview_url": "https://...",
"duration": 1215
}
]
}
],
"has_more": true,
"next_cursor": "NEXT_CURSOR"
}
}| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| site | 是 | string | 平台。 |
| posts[] | 是 | array | 这一页的帖子,结构同单条提取,但通常字段更少(例如没有 variants)。要某一条的全部画质,再对它调一次 /v1/media/extract。 |
| has_more | 是 | boolean | 还有没有下一页。 |
| next_cursor | 否 | string | 下一页的 cursor。 |
| profile | 否 | object | username、display_name、avatar_url、post_count,平台提供多少给多少。 |
翻页:同一个 url 加上 cursor 再发一次,直到 has_more 为 false。每一页都是一次 $0.02 的请求,所以循环里给页数设个上限,就等于给花费设了上限。
获取字幕(YouTube、B站) · $0.004 / 次
YouTube 或 B站视频上的全部字幕轨。YouTube 提供 srt、vtt、json3;B站返回 json(BCC 格式)。自动生成的字幕在 language_name 里带「(auto-generated)」。链接有时效(B站约 30 分钟)。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| url | 是 | string | YouTube 或 B站视频链接。 |
curl https://api.apimodels.app/v1/media/subtitles \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://www.youtube.com/watch?v=VIDEO_ID" }'{
"code": 200,
"msg": "success",
"data": {
"model": "media-downloader",
"endpoint": "subtitles",
"site": "youtube",
"id": "VIDEO_ID",
"title": "Video title",
"duration": 19,
"thumbnail_url": "https://...",
"subtitles": [
{
"language_name": "English",
"language_tag": "en",
"urls": [
{ "format": "srt", "url": "https://..." },
{ "format": "vtt", "url": "https://..." },
{ "format": "json3", "url": "https://..." }
]
}
]
}
}| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| site / id / title | 否 | string | 平台、视频 id、标题。 |
| duration | 否 | number | 视频时长(秒)。 |
| thumbnail_url | 否 | string | 封面图。 |
| subtitles[] | 是 | array | 每条字幕轨:language_name(自动生成的带「(auto-generated)」)、language_tag(如 en)、urls[] { format, url }。 |
格式:YouTube 有 srt、vtt、json3;B站是 json(BCC 格式)。字幕链接有时效,B站约 30 分钟,拿到就下载。
YouTube 下载链接(代理) · $0.012 / 次
经临时代理提供的 YouTube 文件:resource_proxy_url 是一个完整的较低画质文件或音频,variants 里的 video_proxy_url / audio_proxy_url 最高 1080p(音视频分轨,需要合并)。链接最长 1 小时有效,支持 HTTP Range 断点续传。超过 3 GiB 的文件不提供。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| url | 是 | string | youtube.com 或 youtu.be 链接。 |
curl https://api.apimodels.app/v1/media/youtube-download \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://youtu.be/VIDEO_ID" }'{
"code": 200,
"msg": "success",
"data": {
"model": "media-downloader",
"endpoint": "youtube",
"site": "youtube",
"id": "VIDEO_ID",
"title": "Video title",
"medias": [
{
"media_type": "video",
"duration": 19,
"resource_proxy_url": "https://...",
"variants": [
{
"quality": 1080,
"quality_label": "1080p",
"video_ext": "mp4",
"video_proxy_url": "https://...",
"audio_ext": "m4a",
"audio_proxy_url": "https://..."
}
]
}
]
}
}| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| medias[].resource_proxy_url | 否 | string | 一个完整的较低画质文件,或音频。 |
| variants[].video_proxy_url | 否 | string | 该画质的视频轨,最高 1080p。 |
| variants[].audio_proxy_url | 否 | string | 配套的音频轨,与视频轨合并后得到完整文件。 |
| HTTP | 含义 | 扣费 | 怎么办 |
|---|---|---|---|
| 400 | 内容拿不到或请求不对:error_code 如 content_deleted(已删除)、unsupported_site(站点不支持)、invalid_url(链接无效);缺 url 或 url 不是 http(s) 链接也是 400。 | 否 | 看 retryable:true 可重试,false 就换链接 |
| 401 | API Key 缺失或无效 | 否 | 检查 Authorization 头 |
| 402 | 余额不足 | 否 | 充值后重试 |
| 429 | 请求太频繁 | 否 | 稍等后重试 |
| 502 / 503 / 504 | 临时故障或超时(youtube-download 的 proxy_unavailable 也是 503) | 否 | 重试 |
400 的响应体:
{
"code": 400,
"msg": "This content has been deleted or doesn't exist.",
"error_code": "content_deleted",
"retryable": false
}ffmpeg -i video.mp4 -i audio.m4a -c copy out.mp4扩展名以 video_ext / audio_ext 为准;如果视频是 webm,把输出改成 out.mkv。只有 video_url 的画质本身就是完整文件,不用合并。
带上 Authorization: Bearer <API Key>,向 https://api.apimodels.app/v1/media/extract 发 POST {"url": "<帖子链接>"}。结果同步返回:data.medias[] 里每个文件都有 resource_url,视频还有按画质列出的 variants[]。挑好要的文件立刻下载,medias[].headers 有值时一起带上。要最高 1080p、断了能续传的 YouTube 链接,改调 /v1/media/youtube-download($0.012/次);extract 是 $0.004/次。
用频道、主页、播放列表或话题的链接调 /v1/media/playlist,之后把 cursor 设成 next_cursor 继续调,直到 has_more 为 false。每次调用返回一页,$0.02/页。页里的条目字段比单条提取少,需要某条的全部画质时,再对它调一次 /v1/media/extract($0.004)。
把视频链接 POST 到 /v1/media/subtitles($0.004/次)。data.subtitles[] 里每条字幕轨按格式列出 urls[]:YouTube 有 srt、vtt、json3,B站是 json(BCC)。自动生成的字幕在 language_name 里带「(auto-generated)」。链接会过期(B站约 30 分钟),拿到就下载。
都不扣费。400 带 error_code(content_deleted、unsupported_site、invalid_url)和 retryable,只有 retryable 为 true 才值得重试。429 和 502 / 503 / 504 是临时的,稍等后重试即可,youtube-download 返回 503 + proxy_unavailable 也一样。401 是 API Key 缺失或错误,402 是余额不足。