TTS / ASR API 在线文档

基础地址:https://api.janat.cn

鉴权方式:Authorization: Bearer sk_xxx

计费方式:TTS 按文本字符数,ASR 按音频时长

QPS 限制:默认每 IP 5 次/秒,支持套餐扩展

接口列表

默认音色示例

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

请求参数

单文件最大 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 返回字段

{
  "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 计费规则

ASR 错误码

错误码 HTTP 说明
UNAUTHORIZED401缺少 Bearer API Key
INSUFFICIENT_BALANCE402余额不足
AUDIO_TOO_LARGE413音频超过 10MB
INVALID_CONTENT_TYPE415未使用 multipart/form-data
AUDIO_REQUIRED422缺少音频文件
AUDIO_UPLOAD_FAILED422音频上传失败
INVALID_AUDIO_FORMAT422音频格式不支持
INVALID_LANG422识别语言不支持
EMPTY_AUDIO422音频文件为空
EMPTY_TRANSCRIPT422未识别到有效语音内容(不计费)
UPSTREAM_REJECTED502上游识别服务返回失败
UPSTREAM_ERROR502上游识别服务不可用
ASR_BILLING_FAILED500识别成功但扣费失败

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

文档入口