文字转语音:input ≤ 面档 maxChars(计费字符口径:1 汉字计 2,其余计 1;缺省帽 2000);voice 缺席 = 面档 defaultVoice,非面档音色 400 携可选音色表;format 家族不受理按面档回落(dashscope 恒 wav 24k;minimax mp3 32k);speed 仅有位家族受理;model 缺席 = 授权集顺位第一(bundle platformModels.textToSpeech 首行同源);产物 URL 托管形(恒 https,~24h 及时转存)或 b64 内联形二选一(平台不落盘不转存),outputHosting 定性;按上游报量字符结算 per_10k_chars(purpose=tts,billedChars);owner 与终端用户日字符配额;令牌径受能力位 platform.textToSpeech 闸;合成文本恒不落日志
const url = 'https://api.tansr.com/t1/tts';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","input":"example","voice":"example","format":"wav","speed":1}'};
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/tts \ --header 'Content-Type: application/json' \ --header 'x-tansr-key: <x-tansr-key>' \ --header 'x-tansr-key-id: <x-tansr-key-id>' \ --data '{ "model": "example", "input": "example", "voice": "example", "format": "wav", "speed": 1 }'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.textToSpeech 首行恒同);空授权集恒 tts_not_configured
合成文本(≤ 面档 maxChars,平台缺省帽 2000;字符口径同上游计费:1 个汉字计 2,其余各计 1;超帽 400 携 maxChars/chars;恒不落日志/库)
音色 id(缺席 = 面档 defaultVoice;非面档音色 → 400 携可选音色表)
语速倍率(仅面档 speed 域在场的家族受理,域外 400;dashscope 无位在场即 400)
Responses
Section titled “Responses”语音产物(成功即扣;x-tansr-cost/x-tansr-balance 头)
object
请求 model 回显(缺省径 = 生效模型 canonical handle)
产物(url 与 b64 恒二选一在场;端侧按 url ?? b64 取用)
object
托管直链(dashscope 域内 OSS ~24h;D-A12 恒 https;及时转存)
Base64 音频(内联形:minimax hex→base64)
Audio/wav | audio/mpeg
音频时长毫秒(minimax extra_info.audio_length 随报;dashscope 缺席)
采样率(dashscope 24000 / minimax 32000)
计费字符数 = 上游报量(usage.characters / extra_info.usage_characters;汉字计 2 其余计 1);缺报回落输入计费字符估算并标 estimated
售价 DECIMAL 串(成功即扣;同 x-tansr-cost 头)
Example
{ "audio": { "format": "wav" }, "outputHosting": "domestic"}Tts_not_configured(平台面未开通 / 解出三闸 wire·价格·凭据任一不过 fail-closed)/ bad_request(input 空白或超面档 maxChars(detail.maxChars/chars,汉字计 2)/ 非面档音色(detail.voices/defaultVoice)/ speed 域外或家族无位)
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 窗)/ tts_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" }}本文是否有帮助?
感谢反馈,我们会持续改进这篇文章。