TTS / ASR API 在线文档
基础地址:https://api.janat.cn
鉴权方式:Authorization: Bearer sk_xxx
计费方式:TTS 按文本字符数,ASR 按音频时长
QPS 限制:默认每 IP 5 次/秒,支持套餐扩展
接口列表
- POST /api/register
- POST /api/login
- GET /api/me
- POST /api/password
- GET /api/packages
- POST /api/recharge
- GET /api/usage
- GET /api/logs
- POST /api/apikey/regenerate
- POST /api/tts
- POST /api/tts/clone
- POST /api/asr
- POST /api/asr/kk
默认音色示例
curl --request POST \ --url https://api.janat.cn/api/tts \ --header 'Authorization: Bearer sk_xxx' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'text=你好,这是默认音色测试' \ --data-urlencode 'speed=1.0' \ --output output.wav
ASR 语音识别接口
两个接口共用 Authorization: Bearer sk_xxx 鉴权,与 TTS 共用同一套账号、套餐和余额,请求体必须是 multipart/form-data。
| 接口 | 语言 | 支持的音频格式 |
|---|---|---|
| POST /api/asr | 由 lang 指定,默认 zh,可选 zh / kk / kz / ru / en |
wav、mp3、m4a、aac、flac、ogg、amr、webm |
| POST /api/asr/kk | 固定哈萨克语,不接受 lang 参数 |
仅 wav、mp3 |
请求参数
audio:音频文件,必填,字段名也可以使用filelang:识别语言,仅/api/asr支持,可选
单文件最大 10MB,建议音频时长控制在 10 分钟以内。
调用示例
curl --request POST \ --url https://api.janat.cn/api/asr \ --header 'Authorization: Bearer sk_xxx' \ --form 'lang=zh' \ --form 'audio=@/path/to/audio.wav'
哈萨克语识别固定使用 POST /api/asr/kk,只接受 wav、mp3,请求字段为 audio。
curl --request POST \ --url https://api.janat.cn/api/asr/kk \ --header 'Authorization: Bearer sk_xxx' \ --form 'audio=@/path/to/kazakh.wav'
ASR 返回字段
text:识别出的文本lang:本次使用的识别语言duration_seconds:音频实际时长(秒)billed_seconds:计费秒数,向上取整amount:本次扣费金额balance_after:扣费后的余额selected_speed:上游自动降速重试最终采用的语速档位,通常为 1.0request_id:请求追踪号,同时出现在响应头X-Request-Id
{
"code": 0,
"message": "ok",
"data": {
"text": "识别出来的文本",
"lang": "zh",
"duration_seconds": 5.98,
"billed_seconds": 6,
"amount": "0.0600",
"balance_after": "0.9400",
"selected_speed": 1.0,
"request_id": "1c864ace95ae19a14443b6923cc20dd4"
}
}
响应头包含 X-Request-Id、X-Gateway: php-asr-gateway、X-Billed-Amount。
ASR 计费规则
- 按音频时长计费,时长以上游识别服务返回的
durationSeconds为准 - 公式:
金额 = 计费秒数 / 60 * 每分钟单价,默认0.6000 元 / 分钟 - 计费秒数向上取整,最少按 1 秒计费
- 识别结果为空时返回
EMPTY_TRANSCRIPT,本次不计费 - 调用日志中的
request_chars/billable_chars在 ASR 记录里表示音频秒数 - 每次调用都会写入扣费流水,可在控制台"用量"和"最近调用日志"查看
ASR 错误码
| 错误码 | HTTP | 说明 |
|---|---|---|
| UNAUTHORIZED | 401 | 缺少 Bearer API Key |
| INSUFFICIENT_BALANCE | 402 | 余额不足 |
| AUDIO_TOO_LARGE | 413 | 音频超过 10MB |
| INVALID_CONTENT_TYPE | 415 | 未使用 multipart/form-data |
| AUDIO_REQUIRED | 422 | 缺少音频文件 |
| AUDIO_UPLOAD_FAILED | 422 | 音频上传失败 |
| INVALID_AUDIO_FORMAT | 422 | 音频格式不支持 |
| INVALID_LANG | 422 | 识别语言不支持 |
| EMPTY_AUDIO | 422 | 音频文件为空 |
| EMPTY_TRANSCRIPT | 422 | 未识别到有效语音内容(不计费) |
| UPSTREAM_REJECTED | 502 | 上游识别服务返回失败 |
| UPSTREAM_ERROR | 502 | 上游识别服务不可用 |
| ASR_BILLING_FAILED | 500 | 识别成功但扣费失败 |
ASR Python 示例
import requests
with open("/path/to/audio.wav", "rb") as f:
resp = requests.post(
"https://api.janat.cn/api/asr",
data={"lang": "zh"},
files={"audio": ("audio.wav", f, "audio/wav")},
headers={"Authorization": "Bearer sk_xxx"},
timeout=300,
)
resp.raise_for_status()
payload = resp.json()["data"]
print(payload["text"], payload["amount"], payload["balance_after"])
克隆音色示例
curl --request POST \ --url https://api.janat.cn/api/tts/clone \ --header 'Authorization: Bearer sk_xxx' \ --form 'text=你好,这是克隆音色测试' \ --form 'speed=1.0' \ --form 'ref_text=你好,这是参考音频文本' \ --form 'ref_audio=@/path/to/ref.wav' \ --output clone_output.wav