v1
服务在线
变更日志 返回 kemo

快速开始

四步跑通第一首生成。

第 1 步 · 获取 API Key

联系站点管理员获取,或在密钥管理页自助创建。Key 形如 kemo_xxxxxxxx。

密钥安全:Key 等同于账户的支付权限,切勿放在前端代码或公开仓库。 泄露后请立即吊销并重新生成。

第 2 步 · 设置基础地址与认证

BASE="https://kemo.net.cn/functions/v1/kemo-music-api"
KEY="kemo_你的密钥"

所有需要认证的接口都通过请求头携带 Bearer Token:

Authorization: Bearer kemo_你的密钥

第 3 步 · 生成你的第一首歌

curl -X POST "$BASE/v1/music/generate" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "一首宁静的原声吉他旋律配柔和人声,民谣风格",
    "lyrics": "[Verse]\n晚风穿过旧巷口\n[Chorus]\n灯火还亮着\n"
  }'

响应(任务已创建,生成在后台进行):

{
  "data": {
    "task_id": "41d04fb6-969f-4acc-8f65-38092c79ef2f",
    "status": "PENDING",
    "backend": "minimax",
    "model": "music-3.0",
    "cost": { "credits": 5 },
    "poll": "/v1/music/tasks/41d04fb6-969f-4acc-8f65-38092c79ef2f",
    "created_at": "2026-10-23T02:10:23.993Z"
  }
}

backend 是实际命中的引擎。如果第一个引擎限流或余额不足, 网关会自动降级到下一个——这个过程对客户端完全透明,你只会看到最终成功的那个引擎名。

第 4 步 · 查询结果

curl "$BASE/v1/music/tasks/41d04fb6-969f-4acc-8f65-38092c79ef2f" \
  -H "Authorization: Bearer $KEY"

生成中:

{
  "data": {
    "task_id": "41d04fb6-...",
    "status": "PENDING",
    "result": { "audio_urls": [], "duration": null, "title": null, "cover_url": null }
  }
}

完成:

{
  "data": {
    "task_id": "41d04fb6-...",
    "status": "SUCCESS",
    "backend": "minimax",
    "result": {
      "audio_urls": ["https://kemo.net.cn/storage/v1/object/public/audio/xxx.mp3"],
      "duration": 180,
      "title": "晚风穿过旧巷口",
      "cover_url": "https://kemo.net.cn/storage/v1/object/public/audio/xxx.jpg"
    },
    "error": null,
    "cost": { "credits": 5 }
  }
}

轮询建议

阶段建议间隔说明
0 ~ 30 秒每 2 秒短音频通常在此区间完成
30 秒 ~ 2 分钟每 5 秒避免高频轮询触发限流
超过 5 分钟每 15 秒可视为异常,联系管理员

任务终态为 SUCCESS 或 FAILED 后请停止轮询。 FAILED 时 error 字段会给出完整原因。

其他语言示例

Node.js

const r = await fetch(`${BASE}/v1/music/generate`, {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    prompt: '一首宁静的原声吉他旋律配柔和人声,民谣风格',
    lyrics: '[Verse]\n晚风穿过旧巷口\n'
  })
});
const { data } = await r.json();
console.log('任务ID:', data.task_id);

Python

import requests, time

r = requests.post(
    f"{BASE}/v1/music/generate",
    headers={"Authorization": f"Bearer {KEY}"},
    json={"prompt": "一首宁静的原声吉他旋律", "lyrics": "[Verse]\n晚风穿过旧巷口\n"},
)
task = r.json()["data"]["task_id"]

while True:
    s = requests.get(f"{BASE}/v1/music/tasks/{task}",
                     headers={"Authorization": f"Bearer {KEY}"}).json()["data"]
    if s["status"] == "SUCCESS":
        print("音频:", s["result"]["audio_urls"][0]); break
    if s["status"] == "FAILED":
        print("失败:", s["error"]); break
    time.sleep(3)

PHP

$ch = curl_init($BASE . '/v1/music/generate');
curl_setopt($ch, CURLOPT_URL, $BASE . '/v1/music/generate');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'prompt' => '一首宁静的原声吉他旋律',
    'lyrics' => '[Verse]\n晚风穿过旧巷口\n',
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $KEY,
    'Content-Type: application/json',
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
echo '任务ID: ' . $result['data']['task_id'];
kemo Music API · 聚合多引擎音乐生成 · 文档随实现同步更新
最后更新:2026-10-23 · 有问题请联系站点管理员