/t1/asr 异步提交:预备链(认证/能力位/解出/受理/配额/预扣)与同步端点同一函数——校验失败在本响应即时可见恒不产失败任务行;通过即落 media_tasks 行并后台执行,202 携 taskId/status=queued/pollIntervalMs;计费语义同同步径(成功即扣,断连照常产出照常扣费,有找回径不亏);params 快照恒不含用户内容
const url = 'https://api.tansr.com/t1/asr/tasks';const options = { method: 'POST', headers: { 'x-tansr-key-id': '<x-tansr-key-id>', 'x-tansr-key': '<x-tansr-key>', 'Content-Type': 'application/json' }, body: '{"model":"example","audio":"example","language":"example","diarize":true,"prompt":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.tansr.com/t1/asr/tasks \ --header 'Content-Type: application/json' \ --header 'x-tansr-key: <x-tansr-key>' \ --header 'x-tansr-key-id: <x-tansr-key-id>' \ --data '{ "model": "example", "audio": "example", "language": "example", "diarize": true, "prompt": "example" }'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”签名时间戳(unix 秒,十进制串;T-A34):与服务器时钟偏差 >300s → 401 signature_invalid
签名随机数(≥16 字符;T-A34):同 keyId 600s 窗内重现 → 401 nonce_replayed
请求签名(hex 小写;T-A34):HMAC-SHA256(K=sha256(SK 明文) 原始摘要, TWP1-HMAC-SHA256\n{METHOD}\n{path+query}\n{ts}\n{nonce}\n{sha256hex(rawBody)});三头须同现,在场恒校验;app signRequired 或 TANSR_API_TWP_REQUIRE_SIGNATURE=1 时未签名恒 401 signature_invalid
Request Bodyrequired
Section titled “Request Bodyrequired”object
语音转文字模型引用名(候选池收敛产物;池外/越权恒 403 model_not_authorized)。缺席 = 授权集顺位第一(与 bundle platformModels.speechToText 首行恒同);空授权集恒 asr_not_configured
单文件音频:data:audio/*;base64 URI 或 http(s) URL(服务端拉取,出网零信任 guard 径);mime ∈ audio/{wav,x-wav,mpeg,mp4,m4a,aac,ogg,webm,flac};原始音频 ≤ 24 MiB(JSON 体帽 32 MiB 是 base64 膨胀后口径;data URI 先按 base64 长度估、URL 按拉取流量计,超帽 413 payload_too_large detail{rawBytes,maxRawBytes,note});内容恒不落日志/库
语种提示(ISO 639-1 形如 zh/en;可选;家族/面档不受理则静默忽略)
说话人分离(仅 diarization 面档行受理;不受理的模型在场 true 即 400 可解释,恒不静默降级)
领域提示词(可选;恒不落日志/库)
Examplegenerated
{ "model": "example", "audio": "example", "language": "example", "diarize": true, "prompt": "example"}Responses
Section titled “Responses”已受理({taskId, status:“queued”, model, pollIntervalMs})
object
任务 id(ULID;GET /t1/{videogen,imagegen}/tasks/:id 找回锚)
生效模型引用名(同步端点 model 回显同语义;缺省径 = 顺位第一 canonical handle)
建议轮询间隔毫秒(服务端上游轮询同拍;更密只耗限额不提速)
找回窗截止(ISO;窗外查询恒 404。产出直链另受上游 ~24h 失效约束,及时转存)
Example
{ "status": "queued"}Asr_not_configured(平台面未开通 / 解出三闸 wire·价格·凭据任一不过 fail-closed)/ bad_request(audio 非 data:audio/* 或 http(s) / mime 容器不受理(detail.accepted)/ 超时长帽 / 非 diarize 行 diarize:true;原始音频 > 24 MiB 另走 413 payload_too_large(detail.rawBytes / maxRawBytes / note;FX-A-12 M-11))
object
object
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}App_key_invalid / 令牌无效或过期 / signature_invalid / nonce_replayed(T-A34)
object
object
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}Insufficient_balance(预扣 fail-closed 零上游)
object
object
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}Model_not_authorized(点名池外/越权,不泄露池存在性)/ forbidden(令牌径能力位 platform.* 未开,detail.capability)/ app_disabled / app_ip_denied
object
object
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}Rate_limited(key 级 60s 窗)/ asr_quota_exceeded(平台日顶或终端用户日配额档,UTC+8 日界,detail.limit/used)
object
object
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}Upstream_error(上游拒绝/形状非法;方言正文不透传,仅 detail.upstreamCode 机器码 + upstreamStatus)
object
object
错误码注册表单源派生(src/http/errors.ts ERROR_CODES;码稳定,消费方按码翻译)
object
Example
{ "error": { "code": "adjudicator_not_authorized" }}本文是否有帮助?
感谢反馈,我们会持续改进这篇文章。