Transcript API
提交公开可访问的媒体 URL,跟踪异步任务状态,并通过统一 API 获取结构化转录、章节、翻译以及 SRT、VTT 字幕文件。
REST + JSON · UTF-8 · UTC / ISO 8601 · 支持 200+ 语言
快速开始
一个转录请求分为三个步骤。接口会立即返回,任务在后台异步处理。
- 通过
POST /transcriptions创建任务。 - 轮询返回的
poll_url,并遵循retry_after指定的间隔。 - 获取结构化结果和短期有效的字幕下载 URL。
身份验证
所有 OpenAPI 请求都通过 Bearer API Key 鉴权,不接受网站 Cookie 或登录 Token。
HTTP 请求头
Authorization: Bearer $VT_API_KEY
| 请求头 | 必填 | 说明 |
|---|---|---|
Authorization | 是 | Bearer API Key。 |
Content-Type | POST 请求 | 必须为 application/json。 |
Idempotency-Key | POST 请求 | 一次逻辑创建操作的稳定标识。 |
X-Request-ID | 否 | 客户端链路标识,服务端会原样返回或自动生成。 |
幂等请求
每次逻辑创建操作都应使用稳定的 Idempotency-Key,避免网络重试产生重复计费任务。
| 请求 | 结果 |
|---|---|
| 相同 Key 和相同请求体 | 返回原任务,HTTP 200。 |
| 相同 Key 和不同请求体 | 返回 HTTP 409 idempotency_conflict。 |
来源与格式
请提供公开可访问的 HTTP 或 HTTPS URL。OpenAPI 不支持文件上传。
| 来源 | 支持示例 |
|---|---|
| 平台链接 | YouTube、TikTok、Instagram、Facebook、X、Bilibili |
| 云盘链接 | Google Drive、Dropbox |
| 文件直链 | MP3、MP4、M4A、WAV、WebM、MOV、AVI、OGG、AAC |
能力与计费
用量按照媒体时长向上取整计算:
billable_minutes = ceil(duration_seconds / 60)
| 功能 | 说明 | 额度用量 |
|---|---|---|
| 转录 | 返回全文、检测语言、带时间轴的片段和可选说话人。 | 1 API Quota / 1 分钟 |
| YouTube、 TikTok、 Instagram、 Facebook、 X、 Bilibili、 Vimeo | 直接通过受支持的平台 URL 转录媒体内容。 | 免费(限时) |
| 说话人识别 | 识别并标记转录中的不同说话人。 | 免费(限时) |
| 语言检测 | 自动检测媒体的源语言。 | 免费(限时) |
| 时间戳 | 返回带时间轴的片段,用于定位内容和同步字幕。 | 免费(限时) |
| 字幕(SRT/VTT) | 生成 SRT、VTT 字幕文件的签名下载 URL。 | 免费(限时) |
| 章节 | 生成带标题和摘要的有序章节区间。 | 1 API Quota / 1 分钟 |
| 翻译 | 生成翻译全文和对齐片段。 | 1 API Quota / 1 分钟 |
任务生命周期
queuedprocessingsucceededpartial_succeededfailedcancelled创建转录任务
POST
/transcriptions通过公开媒体 URL 创建异步转录任务。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
source_url | string | 是 | 公开媒体直链或支持的平台链接。 |
language | string | 否 | 源语言代码,默认为自动检测。 |
speaker_diarization | boolean | 否 | 在支持时识别说话人。 |
features.chapters | boolean | 否 | 生成章节。 |
features.translation | object | 否 | 传入时启用翻译。 |
cURL
curl --request POST "https://videotranscriber.ai/openapi/v1/transcriptions" \
--header "Authorization: Bearer $VT_API_KEY" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: transcribe-order-0001" \
--data '{
"source_url": "https://example.com/media/demo.mp4",
"language": "auto",
"speaker_diarization": true,
"features": {
"chapters": true,
"translation": {"target_language": "es"}
}
}'
响应
{
"request_id": "tr_01JEXAMPLE",
"status": "queued",
"poll_url": "/transcriptions/tr_01JEXAMPLE",
"retry_after": 5
}
查询转录任务
GET
/transcriptions/{request_id}查询任务状态、各能力状态、用量、错误和结果可用性。
cURL
curl --request GET \
"https://videotranscriber.ai/openapi/v1/transcriptions/$REQUEST_ID" \
--header "Authorization: Bearer $VT_API_KEY"
获取任务结果
GET
/transcriptions/{request_id}/result获取成功能力的结构化结果,以及 SRT、VTT 文件的签名下载 URL。
cURL
curl --request GET \
"https://videotranscriber.ai/openapi/v1/transcriptions/$REQUEST_ID/result" \
--header "Authorization: Bearer $VT_API_KEY"
响应数据结构
JSON 使用 UTF-8 编码。时间轴字段统一使用秒并允许小数。客户端必须忽略未知响应字段。
| 数据结构 | 内容 |
|---|---|
| Transcript | 检测语言、全文、时长、时间轴片段和可选说话人。 |
| Chapters | 按顺序返回包含开始、结束、标题和摘要的章节区间。 |
| Translation | 源语言、目标语言、翻译全文和对齐片段。 |
未启用说话人识别,或供应商未返回可靠说话人标签时,speaker 字段为 null。
错误处理
请求级失败使用 HTTP 状态码和稳定的英文 error.code。不要根据 error.message 编写分支逻辑。
错误响应
{
"error": {
"code": "invalid_request",
"message": "The request body is invalid.",
"retryable": false
},
"request_id": "req_01JEXAMPLE"
}
| HTTP 状态码 | 含义 |
|---|---|
| 400 | 请求无效或输入不受支持。 |
| 401 | API Key 缺失或无效。 |
| 409 | 幂等冲突。 |
| 429 | 达到速率或额度限制。 |
| 500 / 503 | 服务端或供应商临时失败。 |
限制与重试
请遵循 API 返回的速率限制和重试响应头:
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-After
保留与安全
| 资源 | 保留时间 |
|---|---|
| 结果 | 从结果生成之日起保留 30 天。 |
| 下载 URL | 私有签名地址,有效期最长一小时。 |
| 任务记录 | 按 UTC 保留创建月份和下一个自然月。 |