Skip to content

生成音乐回调 ​

当音频生成完成时,系统会调用此回调通知结果。

当您向Suno API提交音乐生成任务时,可以使用 callBackUrl 参数设置回调URL。任务完成时,系统将自动向您指定的地址推送结果。

回调机制概述 ​

[]

Webhook 安全性:为确保回调请求的真实性和完整性,我们强烈建议您实现 webhook 签名验证。请参阅我们的 Webhook 校验指南 了解详细实现步骤。

回调时机 ​

系统将在以下情况发送回调通知:

  • 音乐生成任务成功完成
  • 音乐生成任务失败
  • 任务处理过程中发生错误

回调可能在 text、first、complete 阶段发送,只有 complete 一定会发送,请以 complete 为最终结果。

回调方式 ​

  • HTTP方法: POST
  • 内容类型: application/json
  • 超时设置: 15秒

回调请求格式 ​

任务完成时,系统将以下格式向您的 callBackUrl 发送POST请求:

完成成功回调 ​

json
{
  "code": 200,
  "msg": "All generated successfully.",
  "data": {
    "callbackType": "complete",
    "task_id": "2fac****9f72",
    "data": [
      {
        "id": "e231****-****-****-****-****8cadc7dc",
        "audio_url": "https://example.cn/****.mp3",
        "stream_audio_url": "https://example.cn/****",
        "image_url": "https://example.cn/****.jpeg",
        "prompt": "[Verse] 夜晚城市 灯火辉煌",
        "model_name": "chirp-v4-5",
        "title": "钢铁侠",
        "createTime": 1786343609818,
        "duration": 198.44,
        "tags": "electrifying, rock",
        "source_audio_url":"https://example.cn/****.mp3",
        "source_image_url":"https://example.cn/****.jpeg",
        "source_stream_audio_url":"https://example.cn/****"
      },
      {
        "id": "e231****-****-****-****-****8cadc7dc",
        "audio_url": "https://example.cn/****.mp3",
        "stream_audio_url": "https://example.cn/****",
        "image_url": "https://example.cn/****.jpeg",
        "prompt": "[Verse] 夜晚城市 灯火辉煌",
        "model_name": "chirp-v4-5",
        "title": "钢铁侠",
        "createTime": 1786343609818,
        "duration": 198.44,
        "tags": "electrifying, rock",
        "source_audio_url":"https://example.cn/****.mp3",
        "source_image_url":"https://example.cn/****.jpeg",
        "source_stream_audio_url":"https://example.cn/****"
      }
    ]
  }
}

第一首成功回调 ​

json
{
  "code": 200,
  "msg": "First audio generated successfully.",
  "data": {
    "callbackType": "first",
    "task_id": "2fac****9f72",
    "data": [
      {
        "id": "e231****-****-****-****-****8cadc7dc",
        "audio_url": "https://example.cn/****.mp3",
        "stream_audio_url": "https://example.cn/****",
        "image_url": "https://example.cn/****.jpeg",
        "prompt": "[Verse] 夜晚城市 灯火辉煌",
        "model_name": "chirp-v4-5",
        "title": "钢铁侠",
        "createTime": 1786343609818,
        "duration": 198.44,
        "source_audio_url":"https://example.cn/****.mp3",
        "source_image_url":"https://example.cn/****.jpeg",
        "source_stream_audio_url":"https://example.cn/****"
      }
    ]
  }
}

文本生成回调 ​

json
{
  "code": 200,
  "msg": "Text generated successfully.",
  "data": {
    "callbackType": "text",
    "task_id": "2fac****9f72",
    "data": [
      {
        "id": "e231****-****-****-****-****8cadc7dc",
        "audio_url": "",
        "stream_audio_url": "https://example.cn/****",
        "image_url": "https://example.cn/****.jpeg",
        "prompt": "[Verse] 夜晚城市 灯火辉煌",
        "model_name": "chirp-v4-5",
        "title": "钢铁侠",
        "createTime": 1786343609818,
        "tags": "electrifying, rock",
        "source_image_url":"https://example.cn/****.jpeg",
        "source_stream_audio_url":"https://example.cn/****"
      },
      {
        "id": "e231****-****-****-****-****8cadc7dc",
        "audio_url": "",
        "stream_audio_url": "https://example.cn/****",
        "image_url": "https://example.cn/****.jpeg",
        "prompt": "[Verse] 夜晚城市 灯火辉煌",
        "model_name": "chirp-v4-5",
        "title": "钢铁侠",
        "createTime": 1786343609818,
        "tags": "electrifying, rock",
        "source_image_url":"https://example.cn/****.jpeg",
        "source_stream_audio_url":"https://example.cn/****"
      }
    ]
  }
}

失败回调 ​

json
{
  "code": 400,
  "msg": "...",
  "data": {
    "callbackType": "complete",
    "task_id": "2fac****9f72"
  }
}

失败时 code 不为 200,callbackType 为 "complete",不含 data.data。请先判断 code 再读取 data.data。

状态码说明 ​

code(integer,必填) ​

回调状态码,表示任务处理结果:

200 表示成功;其他值表示失败(例如 501)。

msg(string,必填) ​

状态消息,用于提供更详细的处理结果描述。

data.callbackType(string,必填) ​

回调类型,表示生成阶段:

  • text: 文本生成完成
  • first: 第一首完成
  • complete: 全部完成

data.task_id(string, 必填) ​

任务 ID,与提交任务时返回的 task_id 一致。

data.data(array) ​

生成的音频数据数组,成功时返回

data.data[].id(string) ​

音频唯一标识。

data.data[].audio_url(string) ​

音频文件 URL。

data.data[].stream_audio_url(string) ​

流式音频 URL。

data.data[].image_url(string) ​

封面图片 URL。

data.data[].prompt(string) ​

生成提示词或歌词。

data.data[].model_name(string) ​

用于生成音频的模型名称。

data.data[].title(string) ​

音乐标题。

data.data[].tags(string) ​

音乐标签。

data.data[].createTime(integer) ​

创建时间,使用 Unix 时间戳表示,单位为毫秒。

data.data[].duration(number) ​

音频时长,单位为秒。

data.data[].source_audio_url(string) ​

源音频文件URL。

data.data[].source_image_url(string) ​

源封面图片URL。

data.data[].source_stream_audio_url(string) ​

源流式音频URL。

回调接收示例 ​

以下是常用编程语言接收回调的示例代码:

Node.js ​

javascript
const express = require('express');
const app = express();

app.use(express.json());

app.post('/suno-callback', (req, res) => {
  const { code, msg, data } = req.body;
  
  console.log('收到回调:', {
    taskId: data.task_id,
    status: code,
    message: msg,
    callbackType: data.callbackType
  });
  
  if (code === 200) {
    // ... 处理逻辑 ...
  }
  
  res.status(200).json({ status: 'received' });
});

app.listen(3000, () => {
  console.log('回调服务器运行在端口3000');
});

Python ​

python
from flask import Flask, request, jsonify
import json

app = Flask(__name__)

@app.route('/suno-callback', methods=['POST'])
def handle_callback():
    data = request.json
    # ... 处理逻辑 ...
    return jsonify({'status': 'received'}), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)

最佳实践 ​

TIP

回调URL配置建议 ​

  1. 使用HTTPS: 确保回调URL使用HTTPS协议以保证数据传输安全
  2. 验证来源: 在回调处理中验证请求来源的合法性
  3. 幂等处理: 同一task_id可能收到多次回调,确保处理逻辑是幂等的
  4. 快速响应: 回调处理应尽快返回200状态码以避免超时
  5. 异步处理: 复杂的业务逻辑应异步处理以避免阻塞回调响应
  6. 状态跟踪: 根据callbackType区分不同的生成阶段,合理安排业务逻辑

WARNING

重要提醒 ​

  • 回调URL必须是公开可访问的地址
  • 服务器必须在15秒内响应,否则将被认为超时
  • 如果连续3次重试失败,系统将停止发送回调
  • 请确保回调处理逻辑的稳定性,避免因异常导致回调失败
  • 注意处理不同callbackType的回调,特别是complete类型的最终结果

故障排查 ​

如果您未收到回调通知,请检查以下内容:

网络连接问题 - 确认回调URL可以从公网访问 - 检查防火墙设置,确保入站请求未被阻止 - 验证域名解析是否正确
服务器响应问题 - 确保服务器在15秒内返回HTTP 200状态码 - 检查服务器日志是否有错误消息 - 验证接口路径和HTTP方法是否正确
内容格式问题 - 确认收到的POST请求体为JSON格式 - 检查Content-Type是否为application/json - 验证JSON解析是否正确
回调类型处理 - 确认正确处理不同的callbackType - 检查是否遗漏了complete类型的最终结果处理 - 验证音频数据解析是否正确

ModelFold — 一个 API,接入所有主流 AI 模型。