Belin Doc IconBelin Doc

Belin Doc · 开放平台

翻译 API 接口文档

下面每个接口都是网页端同名能力的开放版——同样的模型、同样的额度、同样的产物,区别只是用一把 API 密钥代替了登录态。

请求前缀
https://belindoc.com/api
鉴权头
X-Api-Key
请求方式
POST · application/json
接口数
21
更新于
2026-09-04
目录
开始使用

快速开始

从一份 PDF 到一份译文,四步走完。视频翻译的调用形态与此相同。

  1. 01

    创建密钥

    登录 belindoc.com,点右上角头像 → 开发者中心 → 新建密钥。密钥以 ft_ 开头,完整值只在创建成功那一次显示。

  2. 02

    上传文件

    先获取一个预签名上传地址,再用 PUT 把文件直传上去。地址 10 分钟内有效,返回的 objectKey 下一步要用。

    bash
    # 1. 获取预签名上传地址(10 分钟内有效)
    curl -X POST https://belindoc.com/api/external/translate/batchPresignedUploadUrl \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"fileNameList": ["contract.pdf"]}'
    
    # → data[0].persignedUploadUrl / data[0].objectKey
    
    # 2. 用 PUT 把文件直传到该地址
    curl -X PUT "<persignedUploadUrl>" --upload-file contract.pdf
  3. 03

    提交翻译

    fileList、sourceLanguage、targetLanguage、model 必填。源语言传 AnyLanguage 即自动识别;模型名不要写死,以 getModelList 返回的为准。

    bash
    curl -X POST https://belindoc.com/api/external/translate/batchSubmitTranslateTask \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "fileList": [{ "fileName": "contract.pdf", "fileObjectKey": "<objectKey>" }],
        "sourceLanguage": "AnyLanguage",
        "targetLanguage": "zh-CN",
        "model": "Gemini-2.5-Flash"
      }'
    
    # → { "code": "200", "data": { "batchNo": "...", "fileList": [ ... ] } }
  4. 04

    轮询并下载

    按 batchNo 轮询到 status 为 3,再取下载地址。该接口返回的是 SSE 流,链接在 [DONE] 事件里。

    bash
    # 轮询任务:status = 3 表示译文已就绪
    curl -X POST https://belindoc.com/api/external/translate/searchTranslateFileByBatchNo \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"batchNo": "<batchNo>"}'
    
    # 取译文下载地址:SSE 响应,下载链接在 [DONE] 事件里
    curl -N -X POST https://belindoc.com/api/external/translate/getTranslateS3DownloadUrl \
      -H "X-Api-Key: $BELINDOC_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"translateOrderNo": "<translateOrderNo>", "urlType": 2}'
    
    # event:[DONE]
    # data:{"url":"https://..."}
开始使用

鉴权方式

开放接口都挂在 /external/ 下,仅凭密钥识别调用方。除此之外的入参、默认值、响应结构与网页端完全一致。

http
POST /api/external/translate/getModelList HTTP/1.1
Host: belindoc.com
Content-Type: application/json
X-Api-Key: ft_xxxxxxxxxxxxxxxxxxxxxxxx
language: zh

{}
json
{
  "code": "200",
  "msg": null,
  "requestId": "8f1c…",
  "data": { }
}
X-Api-Key 请求头
每个请求都要带上密钥。密钥缺失、被禁用、已过期或调用 IP 不在白名单内,都会在进入业务逻辑之前被挡下。
language 请求头
可选,决定响应里 msg 的语种,不传默认 en。取值为站点支持的 9 个语种:en、zh、zh-Hant、ja、ko、fr、ru、de、ar。
密钥只作用于个人账号
密钥永远解析成创建它的那个个人账号。文件走平台存储,任务扣的是该账号自己的额度——组织的私有空间不通过 API 访问。
统一响应结构
所有接口都用同一层包装。code 为 200 表示成功,其余都是业务错误,msg 里是对应语种的提示文案。
不需要 JWT,也不需要签名
网页端那套 token 与签名过滤器对 /external/ 全部放行。密钥是唯一凭证,请当成密码看待,只放在服务端。
/external/translate9 个接口

文档翻译

文档翻译主链路的全部接口:上传、提交、轮询、下载,外加模型与语言枚举——模型名和语言码请从这里取,别写死在代码里。

  • status:0 待处理 · 1 解析中 · 2 翻译中 · 3 已完成 · 4 失败 · 5 已取消
  • urlType:1 原文件 · 2 译文 · 3 横向对照 · 4 纵向对照 · -1 EPUB 预览
01

获取上传地址

POST

/external/translate/batchPresignedUploadUrl

批量换取文件的预签名上传地址。

入参

参数名类型必填说明
fileNameListarray[string]必填要获取上传地址的文件名

响应 · data

参数名类型说明
persignedUploadUrlstring预签名 PUT 地址,10 分钟内有效
objectKeystring提交翻译时要回传的存储键
fileNamestring原始文件名
storageTypenumber该文件所在的存储类型
例子
请求
{
  "fileNameList": ["contract.pdf"]
}
响应
{
  "code": "200",
  "data": [
    {
      "persignedUploadUrl": "https://s3.../contract.pdf?X-Amz-Signature=…",
      "objectKey": "translate/10086/2026/contract.pdf",
      "fileName": "contract.pdf",
      "storageType": 1
    }
  ]
}
02

识别扫描件

POST

/external/translate/isOcr

提交前判断上传的文件是不是扫描件,只在真的需要时才开 OCR。

入参

参数名类型必填说明
fileObjectKeystring必填预签名接口返回的 objectKey
storageTypenumber必填该文件所在的存储类型

响应 · data

参数名类型说明
isOcrnumber1 表示该文件是扫描件
isDoubleDecknumber1 表示该扫描件已带文本层
例子
请求
{
  "fileObjectKey": "translate/10086/2026/contract.pdf",
  "storageType": 1
}
响应
{
  "code": "200",
  "data": { "isOcr": 1, "isDoubleDeck": 0 }
}
03

提交翻译任务

POST

/external/translate/batchSubmitTranslateTask

提交批量翻译任务,返回 batchNo 与每个文件的订单号。

入参

参数名类型必填说明
fileListarray必填待翻译文件列表
fileNamestring必填原始文件名
fileObjectKeystring必填预签名接口返回的 objectKey
isOcrFilenumber1 表示该文件按扫描件处理,取自 isOcr 接口
sourceLanguagestring必填源语言码,AnyLanguage 为自动识别
targetLanguagestring必填目标语言码
modelstring必填模型版本号,取自 getModelList
isOcrnumber1 走 OCR,默认 0
isMathnumber1 保留公式排版,默认 0
translateStylenumber翻译风格预设
terminologyCollectionIdstring要应用的术语库 ID;术语库目前只能在网页端创建和管理,接口侧暂不提供

响应 · data

参数名类型说明
batchNostring提交时返回的批次号
fileListarray待翻译文件列表
balanceHintnumber1 表示剩余额度已不多
例子
请求
{
  "fileList": [
    { "fileName": "contract.pdf", "fileObjectKey": "translate/10086/2026/contract.pdf" }
  ],
  "sourceLanguage": "AnyLanguage",
  "targetLanguage": "zh-CN",
  "model": "Gemini-2.5-Flash",
  "isOcr": 0,
  "terminologyCollectionId": "66f1c2a4b8d3e5f7a9c1b2d3"
}
响应
{
  "code": "200",
  "data": {
    "batchNo": "B20260828173001",
    "fileList": [
      { "fileName": "contract.pdf", "fileObjectKey": "translate/10086/2026/contract.pdf" }
    ],
    "balanceHint": 0
  }
}
04

按批次号查任务

POST

/external/translate/searchTranslateFileByBatchNo

按批次号查该批全部任务,轮询进度用这个。

入参

参数名类型必填说明
batchNostring必填提交时返回的批次号

响应 · 任务对象

参数名类型说明
translateOrderNostring任务订单号
batchNostring提交时返回的批次号
sourceFileNamestring原始文件名
statusnumber任务状态,见上方图例
textNumbernumber本任务计费字符数
targetFileUrlstring译文文件地址
targetFileUrl2string国内兜底地址
xComparisonS3Urlstring横向对照文件
yComparisonS3Urlstring纵向对照文件
freeTranslateQuotanumber本次消耗的免费页数
walletTranslateQuotanumber本次消耗的付费页数
createTimenumber创建时间,毫秒时间戳
startTimenumber开始时间,毫秒时间戳
endTimenumber完成时间,毫秒时间戳
errorCodestringstatus 为 4 时的失败码
例子
请求
{
  "batchNo": "B20260828173001"
}
响应
{
  "code": "200",
  "data": [
    {
      "translateOrderNo": "T20260828173002",
      "batchNo": "B20260828173001",
      "sourceFileName": "contract.pdf",
      "status": 3,
      "textNumber": 4820,
      "targetFileUrl": "https://s3.../contract_zh-CN.pdf?X-Amz-Signature=…"
    }
  ]
}
05

分页查翻译记录

POST

/external/translate/searchTranslateFilePage

分页查询本账号的翻译记录。

入参

参数名类型必填说明
pageNumnumber必填页码,从 1 开始
pageSizenumber必填每页条数
statusnumber任务状态,见上方图例
fileTypestring按文件类型筛选,如 PDF
sourceFileNamestring按文件名筛选

响应 · data

参数名类型说明
recordsarray当前页数据
totalnumber总条数
currentnumber当前页码
pagesnumber总页数
06

查任务详情

POST

/external/translate/getTranslateFileDetail

按订单号查单个任务详情。

入参

参数名类型必填说明
translateOrderNostring必填任务订单号

响应 · 任务对象

参数名类型说明
translateOrderNostring任务订单号
batchNostring提交时返回的批次号
sourceFileNamestring原始文件名
statusnumber任务状态,见上方图例
textNumbernumber本任务计费字符数
targetFileUrlstring译文文件地址
targetFileUrl2string国内兜底地址
xComparisonS3Urlstring横向对照文件
yComparisonS3Urlstring纵向对照文件
freeTranslateQuotanumber本次消耗的免费页数
walletTranslateQuotanumber本次消耗的付费页数
createTimenumber创建时间,毫秒时间戳
startTimenumber开始时间,毫秒时间戳
endTimenumber完成时间,毫秒时间戳
errorCodestringstatus 为 4 时的失败码
07

获取下载地址

POST

/external/translate/getTranslateS3DownloadUrl

获取原文件、译文或对照文件的下载地址(SSE 响应)。

入参

参数名类型必填说明
translateOrderNostring必填任务订单号
urlTypenumber必填取哪一份文件,见上方图例
isWatermarknumber0 表示去水印,需权益支持

响应 · SSE 事件

参数名类型说明
urlstring下载地址,随 [DONE] 事件下发
url2string国内兜底地址,有则下发
例子
请求
{
  "translateOrderNo": "T20260828173002",
  "urlType": 2,
  "isWatermark": 0
}
响应
event:[PROCESS]
data:

event:[DONE]
data:{"translateOrderNo":"T20260828173002","url":"https://s3.../contract_zh-CN.pdf?X-Amz-Signature=…"}
08

查询可用模型

POST

/external/translate/getModelList

查询 model 可选值及各自的额度系数。

入参

无入参,传一个空 JSON 体即可。

响应 · data

参数名类型说明
versionstring提交时 model 要传的值
modelTypenumber内部模型族
vipTypenumber可用该模型的档位
coefficientnumber该模型的额度系数
groupTypenumber所属分组
09

查询支持语种

POST

/external/translate/getLanguageEnum

查询 79 个支持的语言代码及其各语种译名。

入参

无入参,传一个空 JSON 体即可。

响应 · data

参数名类型说明
{locale}object语种 → 语言码 → 该语种下的译名
例子
响应
{
  "code": "200",
  "data": {
    "en": {
      "AnyLanguage": "Any language",
      "zh-CN": "Simplified Chinese",
      "…": "…"
    },
    "zh": {
      "AnyLanguage": "任意语言",
      "zh-CN": "简体中文",
      "…": "…"
    },
    "…": {}
  }
}
/external/videoTranslate10 个接口

视频翻译

视频翻译的完整闭环:先试算额度,提交后跟进度,再取字幕改完回传重新生成。

  • status:0 未开始 · 1 进行中 · 2 成功 · 3 失败 · 4 已取消
  • step:1 语音识别 · 2 字幕翻译 · 3 语音生成
  • stepStatus:0 未开始 · 1 进行中 · 2 完成 · 3 失败
  • subtitleType:0 不嵌字幕 · 1 译文字幕 · 2 原文字幕 · 3 双字幕
01

获取上传地址

POST

/external/videoTranslate/batchPresignedUploadUrl

批量换取视频的预签名上传地址。

入参

参数名类型必填说明
fileNameListarray[string]必填要获取上传地址的文件名

响应 · data

参数名类型说明
persignedUploadUrlstring预签名 PUT 地址,10 分钟内有效
objectKeystring提交翻译时要回传的存储键
fileNamestring原始文件名
02

提交视频翻译

POST

/external/videoTranslate/submitVideoTranslate

提交视频翻译任务,videoTaskParam 里带音色、字幕与字体设置。

入参

参数名类型必填说明
sourceLanguagestring必填源语言码,AnyLanguage 为自动识别
targetLanguagestring必填目标语言码
sourceFileObjectKeystring必填已上传视频的 objectKey
videoFileNamestring必填原始视频文件名
videoTaskParamobject必填音色、字幕与字体设置
voiceRolestring配音音色,clone 为复刻原声
subtitleTypenumber嵌入哪种字幕,见上方图例
videoTaskParam 的其余字段(25 项,均可省略)
参数名类型说明
recognTypenumber语音识别引擎,默认 12,保持默认即可
modelNamestring识别模型,默认 tiny
splitTypestring切分方式,默认 all
isCudaboolean是否启用 GPU 加速,默认 false
translateTypenumber字幕翻译引擎,默认 14,保持默认即可
ttsTypenumber语音合成引擎,默认 15,保持默认即可
voiceRatestring配音语速,如 +10%,默认 +0%
volumestring配音音量,如 +10%,默认 +0%
pitchstring配音音调,如 +5Hz,默认 +0Hz
voiceAutorateboolean配音时长自动对齐原声,默认 true
videoAutorateboolean画面时长自动对齐配音,默认 true
appendVideoboolean时长不足时循环补足画面,默认 true
isSeparateboolean单独输出人声与背景音,默认 false
onlyVideoboolean只产出视频,不产出字幕文件,默认 false
fontsizenumber字幕字号,默认 14
fontnamestring字幕字体名,不传用服务端默认
fontcolorstring字幕文字颜色,#RRGGBB 或 ASS 色值
fontboldboolean字幕是否加粗
subtitlePosYnumber字幕底边距画面底边的百分比,0-90,不传为底部
subtitlePosXnumber字幕水平中心距画面左边的百分比,5-95,50 为居中
fontbordercolorstring字幕描边颜色,#RRGGBB / #RRGGBBAA / ASS 色值
backgroundcolorstring字幕背景框颜色,#RRGGBB / #RRGGBBAA / ASS 色值
outlinenumber描边宽度 0-10,0 为关闭描边
shadownumber阴影大小 0-10,0 为关闭阴影
borderStylenumber边框样式:1 普通描边/阴影,3 逐行矩形背景框

响应 · 任务对象

参数名类型说明
videoTranslateOrderNostring视频任务订单号
videoFileNamestring原始视频文件名
videoDurationnumber视频时长,单位秒
statusnumber任务状态,见上方图例
stepnumber当前处理环节,见上方图例
stepStatusnumber当前环节的状态,见上方图例
targetFileUrlstring译文文件地址
sourceSubtitlesUrlstring原文字幕文件地址
targetSubtitlesUrlstring译文字幕文件地址
freeTranslateQuotanumber本次消耗的免费页数
walletTranslateQuotanumber本次消耗的付费页数
errorMessagestring任务失败时的原因
例子
请求
{
  "sourceLanguage": "ja",
  "targetLanguage": "zh-CN",
  "sourceFileObjectKey": "video/10086/2026/lecture.mp4",
  "videoFileName": "lecture.mp4",
  "videoTaskParam": { "voiceRole": "clone", "subtitleType": 1 }
}
03

试算视频额度

POST

/external/videoTranslate/videoTranslateQuotaCalculate

提交前按时长、音色、字幕类型试算额度消耗。

入参

参数名类型必填说明
videoDurationnumber必填视频时长,单位秒
voiceRolestring必填配音音色,clone 为复刻原声
subtitleTypenumber必填嵌入哪种字幕,见上方图例

响应 · data

参数名类型说明
translateQuotanumber本次总计消耗额度
videoDurationTranslateQuotanumber按时长折算的额度
thirtySecondQuotanumber每 30 秒的额度
quotaCoefficientnumber在基准之上的系数
04

分页查视频记录

POST

/external/videoTranslate/searchVideoTranslatePage

分页查询本账号的视频翻译记录。

入参

参数名类型必填说明
pageNumnumber必填页码,从 1 开始
pageSizenumber必填每页条数
statusnumber任务状态,见上方图例

响应 · data

参数名类型说明
recordsarray当前页数据
totalnumber总条数
currentnumber当前页码
pagesnumber总页数
05

查任务详情

POST

/external/videoTranslate/getVideoTranslateDetail

查询单个视频任务,含进度与产物地址。

入参

参数名类型必填说明
videoTranslateOrderNostring必填视频任务订单号

响应 · 任务对象

参数名类型说明
videoTranslateOrderNostring视频任务订单号
videoFileNamestring原始视频文件名
videoDurationnumber视频时长,单位秒
statusnumber任务状态,见上方图例
stepnumber当前处理环节,见上方图例
stepStatusnumber当前环节的状态,见上方图例
targetFileUrlstring译文文件地址
sourceSubtitlesUrlstring原文字幕文件地址
targetSubtitlesUrlstring译文字幕文件地址
freeTranslateQuotanumber本次消耗的免费页数
walletTranslateQuotanumber本次消耗的付费页数
errorMessagestring任务失败时的原因
06

取消视频任务

POST

/external/videoTranslate/cancelVideoTranslateHistory

取消尚未完成的视频任务。

入参

参数名类型必填说明
videoTranslateOrderNostring必填视频任务订单号
07

获取字幕文件

POST

/external/videoTranslate/getVideoTranslateSubtitles

取回原文与译文字幕,供外部编辑。

入参

参数名类型必填说明
videoTranslateOrderNostring必填视频任务订单号

响应 · data

参数名类型说明
sourceSubtitlesUrlstring原文字幕文件地址
targetSubtitlesUrlstring译文字幕文件地址
08

提交字幕改写

POST

/external/videoTranslate/submitVideoRewrite

回传编辑后的字幕,按新字幕重新生成视频。

入参

参数名类型必填说明
videoTranslateOrderNostring必填视频任务订单号
sourceSubtitlesTxtstring必填编辑后的原文字幕
targetSubtitlesTxtstring必填编辑后的译文字幕
videoTaskParamobject音色、字幕与字体设置
videoTaskParam 的其余字段(25 项,均可省略)
参数名类型说明
recognTypenumber语音识别引擎,默认 12,保持默认即可
modelNamestring识别模型,默认 tiny
splitTypestring切分方式,默认 all
isCudaboolean是否启用 GPU 加速,默认 false
translateTypenumber字幕翻译引擎,默认 14,保持默认即可
ttsTypenumber语音合成引擎,默认 15,保持默认即可
voiceRatestring配音语速,如 +10%,默认 +0%
volumestring配音音量,如 +10%,默认 +0%
pitchstring配音音调,如 +5Hz,默认 +0Hz
voiceAutorateboolean配音时长自动对齐原声,默认 true
videoAutorateboolean画面时长自动对齐配音,默认 true
appendVideoboolean时长不足时循环补足画面,默认 true
isSeparateboolean单独输出人声与背景音,默认 false
onlyVideoboolean只产出视频,不产出字幕文件,默认 false
fontsizenumber字幕字号,默认 14
fontnamestring字幕字体名,不传用服务端默认
fontcolorstring字幕文字颜色,#RRGGBB 或 ASS 色值
fontboldboolean字幕是否加粗
subtitlePosYnumber字幕底边距画面底边的百分比,0-90,不传为底部
subtitlePosXnumber字幕水平中心距画面左边的百分比,5-95,50 为居中
fontbordercolorstring字幕描边颜色,#RRGGBB / #RRGGBBAA / ASS 色值
backgroundcolorstring字幕背景框颜色,#RRGGBB / #RRGGBBAA / ASS 色值
outlinenumber描边宽度 0-10,0 为关闭描边
shadownumber阴影大小 0-10,0 为关闭阴影
borderStylenumber边框样式:1 普通描边/阴影,3 逐行矩形背景框

响应 · data

参数名类型说明
videoTranslateRewriteOrderNostring字幕改写任务订单号
statusnumber任务状态,见上方图例
targetFileUrlstring译文文件地址
09

查字幕改写进度

POST

/external/videoTranslate/getVideoTranslateRewriteDetail

查询字幕改写任务的进度。

入参

参数名类型必填说明
videoTranslateRewriteOrderNostring必填字幕改写任务订单号

响应 · data

参数名类型说明
statusnumber任务状态,见上方图例
targetFileUrlstring译文文件地址
targetSubtitlesUrlstring译文字幕文件地址
errorMessagestring任务失败时的原因
10

试算字幕改写额度

POST

/external/videoTranslate/videoTranslateRewriteQuotaCalculate

试算字幕改写重新生成视频的额度消耗。

入参

参数名类型必填说明
videoTranslateRewriteOrderNostring必填字幕改写任务订单号

响应 · data

参数名类型说明
translateQuotanumber本次总计消耗额度
quotaCoefficientnumber在基准之上的系数
/external/user2 个接口

账户信息

密钥背后那个账号的额度与套餐。提交前先查余额,比等接口报错再补救省事。

  • subscriptionStatus:1 待处理 · 2 订阅中 · 3 已退订 · 4 已取消
  • interval:1 日 · 2 周 · 3 月 · 4 年
01

查询剩余额度

POST

/external/user/getMyWalletInfo

查询该密钥所属账号的钱包:页数额度、OCR 额度、去水印次数与邀请奖励余额。

入参

无入参,传一个空 JSON 体即可。

响应 · data

参数名类型说明
userIdnumber该密钥所属的账号 ID
translateQuotanumber剩余可用页数额度
advancedTranslateQuotanumber剩余高级模型额度
ocrTranslateQuotanumber剩余 OCR 额度
accelerationCardNumbernumber剩余加速卡数量
totalFreeTranslateQuotanumber本周期发放的免费页数
useFreeTranslateQuotanumber本周期已用的免费页数
totalFreeOcrTranslateQuotanumber本周期发放的免费 OCR 页数
useFreeOcrTranslateQuotanumber本周期已用的免费 OCR 页数
freeWatermarkQuotanumber剩余去水印次数
daysFreeWatermarkQuotanumber每日发放的去水印次数
usedDaysFreeWatermarkQuotanumber今日已用的去水印次数
rewardBalancenumber邀请奖励余额
rewardTotalnumber累计获得的邀请奖励
例子
请求
{}
响应
{
  "code": "200",
  "data": {
    "userId": 10086,
    "translateQuota": 12000,
    "advancedTranslateQuota": 0,
    "ocrTranslateQuota": 800,
    "totalFreeTranslateQuota": 500,
    "useFreeTranslateQuota": 132
  }
}
02

查询当前套餐

POST

/external/user/getMySubscriptionInfo

查询该密钥所属账号的套餐:档位、当前周期,以及它给到的并发数、文件大小与视频时长上限。

入参

无入参,传一个空 JSON 体即可。

响应 · data

参数名类型说明
vipNamestring套餐名称
vipTypenumber套餐档位
subscriptionStatusnumber订阅状态,见上方图例
intervalnumber订阅周期,见上方图例
startTimenumber本期开始时间,毫秒时间戳
endTimenumber本期结束时间,毫秒时间戳
translateQuotanumber每期发放的页数额度
advancedTranslateQuotanumber每期发放的高级模型额度
freeTranslateQuotanumber每个周期发放的免费页数
freeTranslateQuotaIntervalnumber免费页数的重置周期:1 日 · 2 周 · 3 月
concurrenceTasknumber文档任务的并发上限
uploadFileSizenumber单个文件大小上限,单位 MB
videoDurationLimitnumber视频时长上限,单位分钟
videoTranslateConcurrencynumber视频任务的并发上限
videoFileSizenumber视频文件大小上限,单位 MB
附录

错误码

密钥层面的失败同样返回 HTTP 200,业务码放在响应体里。下面这几个是接入方必须处理的。

错误码含义处理建议
30306无效的 API 密钥检查密钥是否完整复制(含 ft_ 前缀)。已删除的密钥同样返回这个码。
30307密钥已被禁用在开发者中心里重新启用,或换一把密钥。
30308密钥已过期把过期时间往后调,或新建一把密钥。
30309调用 IP 不在白名单内把服务器的出口 IP 加进该密钥的白名单,或直接清空白名单。
30312密钥被管理员封禁联系客服处理,这一条在开发者中心里解不开。

翻译本身的报错——额度不足、文件不支持、重复提交等——有各自的错误码,且 msg 会按 language 头返回对应语种。分支判断请认 code,别认 msg。

附录

额度与限制

接口只是换一种调用方式,不是另一个产品。下面这些规则与网页端完全一致。

同一份额度,不单独计费
接口调用扣的是与网页端同一份页数、视频额度,模型系数也相同,没有单独的接口价。
水印口径一致
免费额度下 PDF 译文带水印,与浏览器里拿到的完全一样,走接口不会去掉。
只有提交类接口计次
密钥的调用次数只在 batchSubmitTranslateTask、submitVideoTranslate、submitVideoRewrite 上累加,查询类接口随便轮询不计次。
同一账号串行提交
提交按账号加锁。上一次提交还在受理时再发一次,会返回重复任务的错误码——稍等重试即可,不要并行猛发。
OCR 默认关闭
只有扫描件才需要传 isOcr。OCR 会在页数额度之外再扣一份 OCR 子额度,文本版 PDF 开着它等于双份消耗——拿不准就先调 isOcr 接口验一下。

不想自己接 HTTP?

同一套能力也以 MCP 工具的形式开放,AI 助手可以直接调用,一行 HTTP 代码都不用写。