开发者 API · v1

将字幕翻译
接入你的工作流。

让 Premiere Pro 插件和自定义工具调用与网站相同的 Basic 和 Plus 翻译服务。

快速开始

创建密钥后,下载 Node.js 示例。它会估算费用、提交任务、轮询状态并保存翻译后的 SRT。需要 Node.js 20 或更高版本,无需安装其他依赖。

export AST_BASE_URL='https://your-website-origin'
export AST_API_KEY='ast_YOUR_API_KEY'
node translate-subtitle.mjs input.srt zh plus translated.srt my-job-001
# 在最后添加 true 参数可下载双语字幕:
node translate-subtitle.mjs input.srt zh plus bilingual.srt my-job-001 true

将基础 URL 替换为本站地址,并将下载的脚本放在 SRT 文件旁。必须明确选择 basic 或 plus。网络故障后重试时,沿用相同的任务键、输入和选项。使用相同任务键再次下载会复用已有翻译;请选择尚不存在的输出文件名。

身份验证

打开控制台 → 安全设置 → API 密钥。为密钥命名并创建,之后可随时重新查看和复制完整密钥,也可在同一页面撤销。

Authorization: Bearer ast_YOUR_API_KEY

以本站地址作为基础 URL。全部 6 个接口都需要有效密钥。每个账户最多可有 5 个有效密钥。API 密钥可访问该账户通过 API 创建的翻译任务及积分余额。

请使用你自己账户的密钥,妥善保管,不要将共享密钥打包进发布的插件。接口不接受 Cookie 身份验证,也不接受 URL 查询参数中的密钥。

六个接口

方法路径用途
GET/api/v1/capabilities语言、模型档位和限制
GET/api/v1/credits积分余额
POST/api/v1/translations/estimate估算费用
POST/api/v1/translations创建任务
GET/api/v1/translations/{taskId}任务状态和进度
GET/api/v1/translations/{taskId}/result下载 SRT

JSON 成功响应将结果放在 { "data": ... } 中。成功下载翻译结果时,响应始终为 SRT。

估算与提交

两个 POST 接口接受相同的 JSON 请求体。请发送 Content-Type: application/json。

{
  "fileName": "interview.srt",
  "subtitle": "1\n00:00:01,000 --> 00:00:03,000\nHello!\n",
  "targetLanguage": "zh",
  "modelTier": "plus"
}

subtitle、targetLanguage 和 modelTier 为必填项。必须明确选择 basic 或 plus;省略 modelTier 会返回 400 INVALID_REQUEST。源语言会自动识别。目标语言代码可从 /api/v1/capabilities 获取。

可选的 glossary 条目包含 source 和 target。可选的 characters 条目还可包含 gender(male 或 female)及 aliases(别名列表)。准确的数据结构请参阅 OpenAPI 规范。未知字段会被拒绝。

先向 /api/v1/translations/estimate 发送 POST 请求。响应包含 creditCost、availableCredits、sufficientCredits 和字幕条目数量。估算不会创建任务或预留积分。

创建任务

curl "$AST_BASE_URL/api/v1/translations" \
  -H "Authorization: Bearer $AST_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: premiere-sequence-123-zh-v1' \
  --data-binary @request.json

将 JSON 请求体保存为 request.json。把两个环境变量分别设为本站地址和你的 API 密钥。

新任务返回 202 Accepted,包含 data.id、data.creditCost、data.statusUrl 和 data.resultUrl。Location 响应头指向任务状态接口。

{
  "data": {
    "id": "6f476119-c02f-49a9-b61f-2b3327bd318c",
    "status": "pending",
    "fileName": "interview.srt",
    "modelTier": "plus",
    "targetLanguage": "zh",
    "creditCost": "1.00",
    "statusUrl": "/api/v1/translations/6f476119-c02f-49a9-b61f-2b3327bd318c",
    "resultUrl": "/api/v1/translations/6f476119-c02f-49a9-b61f-2b3327bd318c/result"
  }
}

每次计划执行的新翻译都应生成一个 Idempotency-Key,重试时保持不变。相同请求返回同一个任务,HTTP 状态码为 200。使用同一键发送不同请求体会返回 409。幂等键属于账户,更换 API 密钥后仍然有效。

该请求头允许 1–128 个字母、数字、点、下划线、冒号或连字符。重复请求对应的任务若已过期或删除,会返回 410。只有在确实要创建另一个计费任务时,才使用新键。

进度与结果

每隔5 秒轮询一次状态 URL。状态为 pending、processing、completed 或 failed。progress 为百分比,无法获取时为 null;errorCode 说明任务失败原因。

curl --fail "$AST_BASE_URL/api/v1/translations/$TASK_ID" \
  -H "Authorization: Bearer $AST_API_KEY"

将 TASK_ID 设为提交响应中的 data.id。进度响应包含上述任务字段,以及 progress 和 errorCode,这两项均可能为 null。状态为 failed 时应停止轮询并显示错误。只有明确要重新翻译时,才使用新任务键。

完成后,向结果 URL 发送 GET 请求,将响应文本保存为 SRT 文件。响应类型为 application/x-subrip; charset=utf-8。省略 includeOriginal 或将其设为 false 时只返回译文。添加 ?includeOriginal=true 可获取双语字幕,每条字幕先显示原文,再显示译文。

curl --fail "$AST_BASE_URL/api/v1/translations/$TASK_ID/result?includeOriginal=true" \
  -H "Authorization: Bearer $AST_API_KEY" \
  --output translated-bilingual.srt

不支持 format 参数,传入会返回 400 INVALID_REQUEST。错误响应为 JSON。过早请求结果会返回 409 TRANSLATION_NOT_READY,并附带 Retry-After: 5。翻译失败时返回 409 TRANSLATION_FAILED。

请及时下载已完成的结果。网站的删除和保留规则也适用于 API 任务。任务不存在或无权访问时返回 404。API 任务也会显示在你的字幕历史记录中。

积分与限制

API 翻译使用账户现有积分,并遵循网站的模型档位定价和最低扣费规则,没有额外的 API 附加费。请为每个文件调用估算接口;估算不会锁定价格。任务被接受后的 creditCost 即为预留积分数量。

任务等待或处理中会预留积分,成功完成后只计费一次。即使排队期间超过积分原有效期,已预留积分仍可用于该任务。任务失败或删除后会释放预留:未过期积分恢复为可用余额,已过期积分不会恢复有效。失败任务不收取翻译费用。余额接口以十进制字符串返回 availableCredits、reservedCredits 和 totalCredits(可用积分加预留积分)。

{ "data": { "availableCredits": "9.00", "reservedCredits": "1.00", "totalCredits": "10.00" } }
  • 每个账户每 60 秒窗口最多 60 次请求,所有密钥共享配额。
  • 每个窗口最多 10 次 POST 请求,估算和提交共享配额。
  • 最多同时有 3 个等待或处理中的 API 任务。
  • 每个任务只能提交一个文件和一种目标语言。
  • UTF-8 字幕文本最大 1 MiB;JSON 请求体最大 2 MiB;最多 5,000 条字幕。
  • 单条字幕的文本长度遵循网站设置,默认最多 500 个字符。
  • 最多 200 个术语条目、100 个角色,每个角色最多 20 个别名。术语和名称最多 200 个字符。

从 /api/v1/capabilities 获取当前限制。响应包含 X-RateLimit-Limit、X-RateLimit-Remaining 和 X-RateLimit-Reset(Unix 秒时间戳)。收到 429 响应时,请遵循 Retry-After。翻译完成时间取决于队列和输入内容。

错误与重试

{
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "Your account does not have enough available credits."
  },
  "requestId": "..."
}

400:输入无效。401:密钥无效或已撤销。402:积分不足。404:任务不存在或无权访问。409:幂等键冲突、翻译未完成或失败。410:重复请求对应的任务已过期。413:输入过大。415:需要 JSON。422:字幕被拒绝。429:超过请求次数或活动任务限制。502:结果不完整。503:服务、模型或队列不可用。

遇到网络错误或临时服务器故障时,请使用相同的 Idempotency-Key 和请求体重试。若响应包含 Retry-After,请等待指定时长。翻译任务进入最终失败状态后,如需重新翻译,应使用新键。联系支持时请提供 X-Request-Id 和任务 ID。

Premiere Pro 工作流

  1. 选择或导出 SRT 文件。
  2. 估算费用,并使用选定的目标语言提交任务。
  3. 显示任务进度,然后保存翻译后的 SRT。
  4. 将文件导入 Premiere,并放到字幕轨道上。

在 UXP 清单的网络权限中声明本站地址,并为 SRT 读写申请文件访问权限。公开接口支持使用 Bearer 身份验证的 CORS 请求,无需 Cookie。

使用带编号的 SRT 字幕条目,时间戳格式为 HH:MM:SS,mmm,文本不能为空,条目之间用空行分隔。现有字幕清理规则仍然适用:会删除格式标签、重新编号,并可能过滤重叠的次要叠加文本。保留条目的时间戳不会改变。SRT 不携带 Premiere 的样式。

自动访问已有字幕轨道的能力需要针对你的 Premiere 版本单独验证。API 接受字幕文本;提交音频内容前,请先将其转录为字幕。