文档错误处理

错误处理

查看错误响应结构和全部错误码,区分请求被拒绝与转录失败,并判断哪些情况可以重试。

先区分请求错误和转录失败:请求错误发生在调用API时,表示请求未被接受;转录失败则表示请求已被接受,但后续处理出错,任务的status变为failed。

读取错误响应

/v1接口拒绝请求时,统一返回以下结构:

{
  "error": {
    "code": "insufficient_minutes",
    "message": "Not enough minutes",
    "retryable": false,
    "action_url": "https://transcript1.com/dashboard/billing",
    "minutes_needed": 20,
    "minutes_remaining": 3
  }
}

用code判断如何处理错误。message可以展示给用户,但文案可能调整,不要依赖它做逻辑判断。retryable为true表示原请求稍后重试有可能成功。

部分错误还会在同一错误对象中提供补充字段:

字段对应错误码说明
action_urlinsufficient_minutes前往购买套餐或充值的链接。
minutes_needed、minutes_remaininginsufficient_minutes分别是本次请求所需分钟数和当前可用分钟数。所需时长尚不确定时,minutes_needed为null。
supported_platformsunsupported_platform可用的platform值:["youtube", "x", "tiktok", "instagram", "facebook", "bluesky", "twitch", "dailymotion", "pinterest", "linkedin", "snapchat"]。
missing_chunksupload_incomplete服务器尚未收到的分块索引,需要补传。
max_bytesmedia_too_large当前允许上传的最大文件字节数。
paramsinvalid_request请求体或查询参数校验失败时,按字段列出具体问题的对象。

请求被拒绝时的错误码

HTTP状态码code能否直接重试原因和处理方式
400、422invalid_request否请求参数或请求体字段缺失、值无效,或请求体不是合法JSON。例如,diarize不能与source: "captions"一起使用,reuse_recent不能与webhook_url一起使用。
422invalid_url否链接无效,或填写的platform与链接不一致。请使用YouTube、X、TikTok、Instagram、Facebook、Bluesky或来源与转录设置中其他支持的平台链接。
422unsupported_platform否platform填入了不支持的平台。
422unsupported_media否文件后缀不在支持列表中。
401unauthorized否未提供认证凭据,或凭据无效、过期、已撤销;上传Token无效或过期也会返回此错误。
403insufficient_scope否OAuth Token没有所需的transcriptions:read或transcriptions:write权限。
403email_not_verified否邮箱尚未验证,验证后才能创建转录任务。
402insufficient_minutes否可用分钟数为0,或不足以完成本次转录。
402no_active_plan否没有生效中的付费套餐,却尝试充值。只有控制台的计费接口会返回此错误,转录接口不会。
404not_found否找不到该转录任务,或任务属于另一个团队。
409upload_incomplete否分块尚未传齐。补传缺失分块,再调用完成上传接口。
409invalid_state否任务已不在等待上传的状态,不能继续传分块或确认上传完成。
409idempotency_conflict否同一个Idempotency-Key已用于参数不同的请求。
413media_too_large否文件大小超出当前上限,详见文件上传。
413invalid_request否JSON请求体超过1MB。超限的是上传文件时,错误码为media_too_large。
429rate_limited是每分钟请求数超限。按Retry-After指定的秒数等待后重试。
429too_many_active_jobs是同时处理的转录任务或尚未完成的上传数量超限。按Retry-After指定的秒数等待后重试。
500internal_error是服务内部出错,稍后重试。
503service_unavailable是transcript1暂时无法提供服务,稍后重试。

浏览器用登录Cookie认证、而非Bearer凭据时,API还会校验请求来源。来自其他站点的请求返回403 forbidden_origin。通过Authorization请求头认证的API调用不受这项检查影响。

所有429响应都会带上Retry-After,告诉客户端需要等待多少秒。各项配额见计费与限制。

什么时候重试

  • 只有retryable为true才直接重试,对应rate_limited、too_many_active_jobs、internal_error和service_unavailable。有Retry-After时按它等待;没有时,逐步延长重试间隔。
  • 重试POST /v1/transcriptions务必沿用原来的Idempotency-Key,避免首次请求其实已成功,却因再次创建任务而重复扣费。
  • 遇到其他错误码,先解决问题,再发送请求。

转录过程中失败

请求成功返回,不代表转录一定成功。任务后续失败时,status会变为failed,转录对象中会带有error: { "code", "message" }。轮询状态或收到transcription.failedWebhook后,读取error判断原因。

error.code失败原因是否需要重新提交
media_unavailable视频不存在或已无法访问。不要直接重试,先检查URL。
media_private视频已设为私有。不要直接重试,改用公开帖子,或公开、非公开(unlisted)的YouTube视频。
login_required必须登录平台账号才能访问。这是永久性失败,不会重试。
no_audio视频不含音轨。这是永久性失败,不会重试。
age_restricted视频受年龄限制。重试原链接无效,改为上传文件。
live_stream直播仍在进行,或尚未开始。等直播结束后再提交。
no_captions选择了captions,但没有可用字幕。改用source: "auto"或"stt"。
media_too_long音频或视频超过语音转文字的5小时上限。先拆分录音或视频,再分别提交。
unsupported_media文件无法读取,或不含音轨。改传受支持的文件。
no_speech未检测到语音。不要重试。
unsupported_language不支持录音中的语言。先将language改为支持的语言代码或"auto"。
insufficient_minutes转录扣费前,可用分钟数已用完。充值后再提交。
fetch_failed多次获取音频或视频均失败。可以稍后重新提交。
transcription_failed语音转文字已尝试多次,仍未成功。可以稍后重新提交。

如果转录失败或被取消,就不会扣费;此前为该任务扣除的分钟数会退还。

最后更新 2026年10月19日