所有请求走 HTTPS + JSON,鉴权统一用 Authorization: Bearer sk_live_xxx。
密钥在 控制台 里创建。
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx # 也支持 X-API-Key: sk_live_xxxxxxxxxxxxxxxx
密钥等同账号凭证,请放在服务端,不要写进前端代码或公开仓库。
用 type 决定调哪个能力:image 或 tts。
不传 type 时会按字段猜(有 prompt 走生图,有 text 走配音)。
curl -X POST https://api.xml8.cn/v1/generate \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"type": "image",
"prompt": "一只坐在窗边的猫,写实摄影,柔和自然光",
"model": "gpt-image-2.6-sunburst",
"size": "1024x1024",
"n": 1
}'
| 参数 | 类型 | 说明 |
|---|---|---|
| prompt | string · 必填 | 提示词 |
| model | string | 默认取后台配置;可用 /v1/models 查询 |
| size | string | auto / 1080p / 2k / 4k / 1024x1024,也可直接写宽x高(单边 ≤6000) |
| n | int | 1–10,按实际成功数量计费 |
| quality | string | auto / low / medium / high |
| output_format | string | png / jpeg / webp;2.6 模型另支持 gif |
| frame_count | int | GIF 帧数 2–64 |
| frame_duration_ms | int | GIF 每帧毫秒,20–2000,10 的倍数 |
| url | bool | true 时让上游返回在线地址而不是 Base64 |
{
"ok": true,
"type": "image",
"model": "gpt-image-2.6-sunburst",
"images": [
{"url": null, "b64": "iVBORw0KGgo...", "format": "png"}
],
"cost_cny": 0.01,
"request_id": "req_8f2c…",
"elapsed_ms": 41230
}
curl -X POST https://api.xml8.cn/v1/generate \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"type": "tts",
"text": "你好,欢迎使用项目狼 API 中转站。",
"voice": "female-shaonv",
"speed": 1.0,
"format": "mp3"
}'
| 参数 | 类型 | 说明 |
|---|---|---|
| text | string · 必填 | 最多 10000 字符,支持 <#1.5#> 停顿与 (laughs) 等语气词 |
| voice | string | 音色 ID,默认取后台配置;如 female-shaonv |
| speed | float | 0.5–2.0,默认 1 |
| pitch | int | -12–12,默认 0 |
| vol | float | 0–10,默认 1 |
| emotion | string | happy / sad / angry / fearful / disgusted / surprised / calm |
| format | string | mp3 / wav / flac / pcm |
| sample_rate | int | 8000 / 16000 / 24000 / 32000 / 44100 |
| subtitle | bool | true 时额外返回字幕文件地址 |
{
"ok": true,
"type": "tts",
"audio": "https://…/output.mp3",
"subtitle": null,
"chars": 17,
"voice": "female-shaonv",
"format": "mp3",
"request_id": "req_1a9d…",
"elapsed_ms": 1820
}
音频地址有效期 24 小时,请及时转存到自己服务器。
给一段公网可访问的音频,上游会复刻音色并返回 voice_id,
之后把它当普通音色用(voice 字段)即可。每次消耗 20000 字符额度,失败不扣费。
curl -X POST https://api.xml8.cn/v1/voice-clone \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"audio_url": "https://你的域名.com/uploads/sample.mp3",
"name": "我的声音",
"text": "欢迎使用声音克隆功能",
"accuracy": 0.9
}'
| 参数 | 类型 | 说明 |
|---|---|---|
| audio_url | string · 必填 | 公网可访问的 mp3 / m4a / wav,时长 10 秒 – 5 分钟 |
| name | string | 音色名称,30 字以内 |
| text | string | 试听文本,50 字以内 |
| accuracy | float | 0.7 / 0.8 / 0.9,越高越像,录音有底噪时用 0.7 更稳 |
| model | string | 必传:speech-2.5-hd-preview / speech-2.5-turbo-preview / speech-02-hd;不传上游会回「克隆服务暂时繁忙」 |
{
"ok": true,
"type": "clone",
"voice_id": "voice_cd635f6f...",
"name": "我的声音",
"demo": "https://…/demo.mp3",
"elapsed_ms": 42130
}
音频需要外网能直接访问;本站网页版会自动帮你上传并生成地址,接口版请自备可访问链接。
给已有的 OpenAI SDK / 客户端用,参数和上游保持一致,本站原样转发。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /v1/images/generations | JSON 文生图,返回上游原始结构(data[].b64_json 或 url) |
| POST | /v1/images/edits | multipart 图生图,整包透传 |
| POST | /v1/audio/speech | {input, voice, response_format} → 返回 JSON,audio 字段是音频地址 |
| POST | /v1/voice-clone | {audio_url, name, text, accuracy} → 返回 voice_id |
| GET | /v1/models | 模型列表 |
| GET | /v1/balance | 我的额度与上游余额 |
# Python / OpenAI SDK from openai import OpenAI client = OpenAI(api_key="sk_live_xxx", base_url="https://api.xml8.cn/v1", timeout=480.0, max_retries=0) r = client.images.generate(model="gpt-image-2.6-sunburst", prompt="赛博朋克城市夜景", size="1024x1024", n=1)
{
"ok": false,
"error": {"message": "user balance insufficient", "type": "upstream_error", "upstream_status": 429},
"request_id": "req_..."
}
| 状态码 | 含义 |
|---|---|
| 400 | 参数错误(缺 prompt / text、尺寸非法等) |
| 401 | 没带 Key 或 Key 无效 |
| 402 | 本站给这个 Key 设置的调用次数已用完 |
| 403 | Key 被禁用 |
| 429 | 请求太频繁,或上游余额不足 / 号池繁忙 |
| 5xx | 上游故障,稍后重试;不要盲目重复提交生图任务(可能已计费) |
生图(尤其 2K / 4K / GIF)可能耗时数分钟,客户端超时至少 480 秒; 中间不要挂 30 秒或 60 秒的短超时网关。配音一般 1–5 秒返回。