Skip to content
curl -X POST https://api.wxiai.com/xai/v1/tts \
  -H "Authorization: Bearer $WXIAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "你好,这是一段语音合成测试。",
    "voice_id": "eve",
    "language": "zh"
  }' \
  --output speech.mp3
curl -X POST https://api.wxiai.com/xai/v1/tts \
  -H "Authorization: Bearer $WXIAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Crystal clear audio at maximum quality.",
    "voice_id": "rex",
    "language": "en",
    "output_format": {
      "codec": "mp3",
      "sample_rate": 44100,
      "bit_rate": 192000
    },
    "speed": 1.2
  }' \
  --output speech.mp3
curl https://api.wxiai.com/xai/v1/tts/voices \
  -H "Authorization: Bearer $WXIAI_API_KEY"
# 成功时返回的是音频二进制流(Content-Type 如 audio/mpeg),不是 JSON。
# 用 curl 的 --output 存文件,或让 SDK 直接写文件。
#
# 传了 with_timestamps: true 时才改成返回 JSON:
# { "audio": "<base64>", "content_type": "audio/mpeg",
#   "duration": 0.92, "audio_timestamps": {...} }
{
  "code": "invalid-argument",
  "error": "language is required"
}
原生透传层

文生音 TTS

把文本合成为语音,直接返回音频流。请求体原样转发给 Grok,报错是官方原文。

POST/xai/v1/tts

端点 ​

http
POST /xai/v1/tts
GET  /xai/v1/tts/voices              # 音色列表
GET  /xai/v1/tts/voices/{voice_id}   # 单个音色详情
WSS  /xai/v1/tts                     # 流式合成,见总览

这是 原生透传路径。同一能力在 OpenAI 兼容层的写法见 文生音 TTS(OpenAI 兼容)。

同字段的无前缀路径

/v1/tts 用的是完全相同的字段名(不转换),区别只是报错会被包成 OpenAI 信封 {"error":{"message":...}}。

  • 想要 xAI 原文报错 → 用本页的 /xai/v1/tts
  • 想要统一错误格式、又不想改字段名 → 用 /v1/tts

请求 ​

bash
curl -X POST https://api.wxiai.com/xai/v1/tts \
  -H "Authorization: Bearer $WXIAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "你好,这是一段语音合成测试。",
    "voice_id": "eve",
    "language": "zh"
  }' \
  --output speech.mp3

请求参数 ​

参数必填说明
text是要合成的文本,最长 15,000 字符。支持语音标签
language是BCP-47 语言码(en、zh、pt-BR)或 auto 自动识别。大小写不敏感
voice_id否音色 ID,不传默认 eve。大小写不敏感
speed否语速倍率,0.7–1.5,默认 1.0
output_format否输出编码,见总览。不传默认 MP3 / 24 kHz / 128 kbps
with_timestamps否为 true 时返回 JSON 信封,含 base64 音频 + 逐字符时间戳
text_normalization否为 true 时先把数字、缩写、符号转成口语形式再合成
optimize_streaming_latency否流式合成的延迟档位:0(默认,不做优化、音质最好)、1(首包更小、块边界有轻微音质损失)。官方指南另提到 2
replace否发音替换表,见 TTS 总览

原生路径不认 OpenAI 的字段名

input、voice、response_format 只兼容层有效。原生层写它们会被原样转发给 Grok 并报缺字段。

官方字段是 text、voice_id、output_format。

返回 ​

成功时返回音频二进制流,Content-Type 取决于 output_format.codec:

  • curl 用 --output speech.mp3 存文件
  • 别用 response.json(),会解析失败

例外:传了 with_timestamps: true 时改成返回 application/json:

json
{
  "audio": "<base64 音频>",
  "content_type": "audio/mpeg",
  "duration": 0.92,
  "audio_timestamps": {
    "graph_chars": ["H", "e", "l", "l", "o"],
    "graph_times": [
      [0.00, 0.06], [0.06, 0.12], [0.12, 0.18], [0.18, 0.24], [0.24, 0.34]
    ]
  }
}

graph_chars[i] 与 graph_times[i] 按下标一一对应。按下标遍历 graph_chars,不要用下标去切原始文本——开了 text_normalization 时一个符号可能被读成好几个词,时间只记在它的第一个字符上。

音色 ​

说明
默认音色eve
内置音色至少 26 个,常用示例值:eve、ara、rex、leo
大小写不敏感,eve / Eve / EVE 都能用
bash
curl https://api.wxiai.com/xai/v1/tts/voices \
  -H "Authorization: Bearer $WXIAI_API_KEY"

返回每个音色的 voice_id、name、language。完整清单、语言表、语音标签、输出格式、发音替换与自定义音色见音频处理总览。

这一层的注意点 ​

  • language 是必填的:不传直接报参数错误。不想指定就传 auto。
  • voice_id 不是 voice:写错了在原生层是「字段缺失」,不是「音色不存在」。
  • 传了 text 之外的字段不会本地报错:原生层不做校验,错误由 Grok 返回。
  • url 类参数没有:TTS 是同步返回音频流,不产生临时链接。

相关页 ​

基于 Apache-2.0 许可发布