KUNXUN技术下放 · 人人可用

KUNXUN API 文档

统一接口目录与真寻配音 v2 接入示例。接口凭据须从账号中心获取并保存在服务端。

接口目录

服务Base URL能力主要接口
统一账号网关https://api.kunxun.top注册登录、用户资料、头像、文件空间、应用配置与通知/v3/auth/*、/v3/user/*、/v3/files/*、/v3/app/*
配音工具箱https://api.kunxun.top链接解析、任务状态、历史与结果下载/v3/tools/parse/start、/v3/tools/parse/status、/v3/tools/history、/v3/tools/download
小游戏服务https://api.kunxun.top游戏清单、资源、成绩上报与排行榜/v3/games/manifest、/v3/games/asset、/v3/games/report、/v3/games/scores
真寻配音 API v2https://api.kunxun.top/v2模型查询、文字配音、音频变声、人声分离与异步任务/models、/tts、/convert、/separate、/jobs/{job_id}
鉴权说明:网页登录态、网关用户令牌、客户端密钥和 v2 API 密钥用途不同。示例使用 YOUR_API_KEY 占位符;不要把真实密钥写入网页前端或公开仓库。

网关 v3 核心请求

客户端标识头为 X-Client-Platform 与 X-Client-Key。需要用户身份的请求还须带 Authorization: Bearer <用户令牌>。账号网页登录仍从统一账号中心完成。

方法与路径作用鉴权
GET /v3/ping检查网关在线状态无
POST /v3/auth/login客户端账号登录,返回用户令牌客户端标识头;表单字段 account、password
POST /v3/tools/parse/start提交链接解析任务;JSON 为 {"url":"...","type":"video"} 或 audio客户端标识头 + 用户令牌
GET /v3/tools/parse/status?id=...读取本人任务状态客户端标识头 + 用户令牌
GET /v3/tools/history读取账号近期解析记录客户端标识头 + 用户令牌
GET /v3/tools/download?id=...下载本人已完成任务的成品客户端标识头 + 用户令牌
GET /v3/games/manifest读取已发布游戏清单客户端标识头
GET /v3/games/scores?game_id=...读取公开排行榜客户端标识头
POST /v3/games/report上报本人游戏成绩客户端标识头 + 用户令牌
GET /v3/files/list?path=...
GET /v3/files/read?path=...
浏览或读取下载文件;游客读取受 IP 配额限制客户端标识头;登录令牌可选
POST /v3/files/upload向授权目录上传文件客户端标识头 + 用户令牌 + 目录写权限
任务提交是 POST;状态、历史和下载是 GET。后台管理接口需要额外管理员授权,不在公开客户端接口内。

真寻配音 API v2 — 构造请求示例

三种模式完整示例:文本配音 / 音频变声 / 人声分离  ·  更新时间 2026-08-11
1. 拿密钥→ 2. 查模型→ 3. 提交任务→ 4. 轮询结果→ 5. 下载音频

基础信息

项目值
Base URLhttps://api.kunxun.top/v2
鉴权方式请求头 Authorization: Bearer YOUR_API_KEY 或 X-API-Key: 你的密钥
密钥获取注册 zhenxun.kunxun.top 后,在「个人中心」复制(密钥以 kx_ 开头,长度 35 位)
任务模式异步:提交 → 返回 job_id → 轮询 GET /v2/jobs/{job_id} → 完成后拿下载 URL
响应格式成功 {"code": 0, ...};失败 {"status":"error","message":"..."} + HTTP 状态码
通用流程说明:三个模式都是「提交 → 轮询 → 下载」三步走。提交接口返回任务队列信息(job_id、queue_position 排队位置),之后每秒或每 3 秒轮询一次 /v2/jobs/{job_id},等 status 变成 succeeded 后,用返回的 result.audio_url(或顶层 audio_url)直接下载即可。任务处理需要时间(CPU 推理),大文件人声分离可能要等几分钟,属正常排队。

0. 先选模型

三种模式中,文本配音和音频变声需要指定模型,人声分离不需要模型。模型列表用下面这个接口拿(全部可用模型都会返回):

GET /v2/models 需密钥

curl -s https://api.kunxun.top/v2/models \
  -H "Authorization: Bearer YOUR_API_KEY" \

响应示例(返回 id 就是提交任务时要填的 model_id):

{
  "code": 0,
  "device": "cpu",
  "models": [
    {"id": "onimai_mahiro",  "label": "绪山真寻",   "backend": "rvc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_asahi",   "label": "旭",         "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_kaede",   "label": "枫",         "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_meiboli", "label": "美波里",     "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_miyo",    "label": "美夜",       "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_momiji",  "label": "椛",         "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_zhenxun", "label": "真寻(SVC)",  "backend": "svc", "sampling_rate": 40000, "available": true}
  ]
}
主模型「绪山真寻」的 id 是 onimai_mahiro(RVC 声线);其余为 SVC 声线。别用模型文件名当 id(如 onimai_mahiro_gpu_e500_s41500 是文件不是 id),填错会返回「模型不存在」。

1. 文本配音(TTS)

POST /v2/tts异步 输入文字 + 模型 + 高级参数,输出目标角色朗读的语音。

请求体支持 JSON 和 multipart/form-data 两种格式(客户端按自己习惯选一种)。

参数表(高级参数全部可选)

参数必填默认说明 / 可选值
text是—要合成的文字,≤ 5000 字
model_id是—角色模型 id,取自 GET /v2/models,如 onimai_mahiro
edge_voice否zh-CN-XiaoxiaoNeural朗读语音:zh-CN-XiaoxiaoNeural 晓晓(女) / zh-CN-YunxiNeural 云希(男) / zh-CN-XiaoyiNeural 晓伊(女) / zh-CN-YunjianNeural 云健(男) / ja-JP-NanamiNeural Nanami(日)
rate否+0%语速:-20% 慢20% / -10% 慢10% / +0% 正常 / +10% 快10% / +20% 快20%
pitch否+0Hz音调:-10Hz 低 / +0Hz 正常 / +10Hz 高
transpose否0升降调(半音),整数,范围 -24 ~ 24。正数变高、负数变低
f0_method否rmvpeF0 基频算法:pm / rmvpe(推荐)/ dio / harvest / crepe / crepe-tiny / parselmouth

方式 A:JSON 请求体(推荐给客户端)

curl -s -X POST https://api.kunxun.top/v2/tts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "你好呀,我是真寻!今天也要加油哦。",
    "model_id": "onimai_mahiro",
    "edge_voice": "zh-CN-XiaoxiaoNeural",
    "rate": "+0%",
    "pitch": "+0Hz",
    "transpose": 0,
    "f0_method": "rmvpe"
  }'

方式 B:multipart/form-data 请求体

curl -s -X POST https://api.kunxun.top/v2/tts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "text=你好呀,我是真寻!今天也要加油哦。" \
  -F "model_id=onimai_mahiro" \
  -F "edge_voice=zh-CN-XiaoxiaoNeural" \
  -F "rate=+0%" \
  -F "pitch=+0Hz" \
  -F "transpose=0" \
  -F "f0_method=rmvpe"

提交响应(拿到 job_id 去轮询)

{
  "job_id": "61b05bbc69364cddad1d0daf9069ea4f",
  "kind": "tts",
  "status": "queued",
  "stage": "等待中",
  "progress": 0,
  "queue_position": 1,
  "queue_waiting": 1,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "任务已加入队列",
  "result": {}
}

2. 音频变声(Convert)

POST /v2/convert异步 上传一段音频/视频,把里面的人声转换成目标角色声线。

注意:音频变声是文件上传,请求体必须是 multipart/form-data,不能是 JSON。

参数表

参数必填默认说明 / 可选值
audio是—音频文件(表单字段名 audio)。支持 wav/mp3/flac/m4a/ogg/aac/opus/aiff/wma/amr/ac3/ape;也支持视频 mp4/mov/avi/mkv/flv 等(自动提取音轨)
model_id是—角色模型 id,如 onimai_mahiro
transpose否0升降调(半音),整数,范围 -24 ~ 24
f0_method否rmvpeF0 算法:pm / rmvpe(推荐)/ dio / harvest / crepe / crepe-tiny / parselmouth

完整构造请求

curl -s -X POST https://api.kunxun.top/v2/convert \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "audio=@/path/to/input.mp3" \
  -F "model_id=onimai_mahiro" \
  -F "transpose=0" \
  -F "f0_method=rmvpe"

提交响应

{
  "job_id": "9c2e4f1a8b3d4c5e9f0a1b2c3d4e5f60",
  "kind": "convert",
  "status": "queued",
  "stage": "等待中",
  "progress": 0,
  "queue_position": 1,
  "queue_waiting": 0,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "任务已加入队列",
  "result": {}
}
变声任务耗时取决于音频长度:几十秒的短音频约 1~3 分钟,几分钟的长音频要排队更久(单 worker 顺序处理,前面有任务会排队)。上传前建议先压缩/裁剪,控制文件体积。

3. 人声分离(Separate)

POST /v2/separate异步 上传一段混合音频,分离出人声轨和伴奏轨。

特殊:人声分离不需要选模型!它跟角色声线无关,只做「人声 / 伴奏」拆分,所以参数里没有 model_id。

参数表

参数必填默认说明 / 可选值
audio是—音频/视频文件(表单字段名 audio),支持格式同上
strength否0.85分离强度,小数,范围 0.15 ~ 1.0。越大分离越干净,但可能损失细节;一般 0.85 即可

完整构造请求

curl -s -X POST https://api.kunxun.top/v2/separate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "audio=@/path/to/song.mp3" \
  -F "strength=0.85"

提交响应

{
  "job_id": "7d8e9f0a1b2c3d4e5f60718293a4b5c6d",
  "kind": "separate",
  "status": "queued",
  "stage": "等待中",
  "progress": 0,
  "queue_position": 1,
  "queue_waiting": 0,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "任务已加入队列",
  "result": {}
}
分离完成后的结果里,result.vocals_url 是人声轨、result.background_url 是伴奏轨,两个都可以下载。人声分离是最重的任务(大文件几分钟),务必控制上传体积。

4. 轮询任务结果(三个模式通用)

GET /v2/jobs/{job_id}需密钥 用提交时返回的 job_id 轮询。建议每 2~3 秒查一次,直到 status 变为 succeeded 或 failed。

状态含义:queued 排队中 / running 处理中(progress 是百分比,stage 是当前阶段描述)/ succeeded 完成 / failed 失败(看 message)。

curl 示例

curl -s https://api.kunxun.top/v2/jobs/61b05bbc69364cddad1d0daf9069ea4f \
  -H "Authorization: Bearer YOUR_API_KEY" \

完成响应(succeeded)

{
  "job_id": "61b05bbc69364cddad1d0daf9069ea4f",
  "kind": "tts",
  "status": "succeeded",
  "stage": "完成",
  "progress": 100,
  "elapsed_seconds": 16.85,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "绪山真寻配音生成完成",
  "result": {
    "audio_url": "https://api.kunxun.top/outputs/61b05bbc69364cddad1d0daf9069ea4f.onimai_mahiro.tts.wav",
    "vocals_url": null,
    "background_url": null,
    "duration_seconds": 1.88,
    "model_id": "onimai_mahiro",
    "model_name": "绪山真寻"
  },
  "audio_url": "https://api.kunxun.top/outputs/61b05bbc69364cddad1d0daf9069ea4f.onimai_mahiro.tts.wav"
}

三个模式拿结果的字段对照

模式成功后拿哪个字段说明
文本配音result.audio_url 或 audio_url最终配音 WAV
音频变声result.audio_url 或 audio_url转换后 WAV
人声分离result.vocals_url(人声)+ result.background_url(伴奏)两条轨分开下载

Python 轮询示例(客户端常用)

import time
import urllib.request, json

KEY = "YOUR_API_KEY"
BASE = "https://api.kunxun.top/v2"

def poll(job_id, timeout=600):
    url = BASE + "/jobs/" + job_id
    req = urllib.request.Request(url, headers={"Authorization": "Bearer " + KEY})
    start = time.time()
    while time.time() - start < timeout:
        with urllib.request.urlopen(req, timeout=30) as resp:
            data = json.loads(resp.read().decode())
        if data["status"] in ("succeeded", "failed", "error"):
            return data
        time.sleep(3)
    raise TimeoutError("任务超时")

5. 常见错误与排查

HTTP错误 message原因 / 处理
401Invalid or missing API key密钥没传、格式不对或已失效。检查 Authorization: Bearer 头
403无权查看该任务job_id 不属于当前密钥对应的账号
404任务不存在或已过期job_id 拼错,或任务已清理
404模型不存在model_id 填错。用 GET /v2/models 拿真实 id
400文字太长 / 请输入要合成的文字text 为空或超过 5000 字
400不支持的格式上传文件扩展名不在支持列表
400上传音频为空上传了空文件
429今日配额已用完每天有配额上限(GET /v2/me 可查 used/limit),明天再试
422validation error参数类型不对(如 transpose 传了非数字)

其他注意