Suno · Music Generation

MIDI DownloadNEW

📌 What is thisDownload instrument MIDI (requires a clipId from "Get Instrument Stems" / gen_stem_all first).
💡 When to useUse to bring the AI arrangement into a DAW for melody editing / re-arranging. ⚠ The clipId must be a gen_stem_all result on YOUR account, or you get same_account_required.

Endpoints

UsageMethodPath
Submit taskPOST/api/cqt/generator/suno
Query ResultGET/api/cqt/info/suno?id={taskId}

Request Parameters

ParamTypeRequiredDescription
taskstringRequiredFixed value: mdi
clipIdstringRequiredMust be a clipId returned by gen_stem_all on your own account

Request Example

curl -X POST https://api.cqtai.com/api/cqt/generator/suno \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{ "task":"mdi", "clipId":"clip_stem_xyz" }'
# -> { "code":200, "data":"<taskId>" }

Response Example

{
  "code": 500,
  "msg": "same_account_required",
  "data": {
    "id": "f28f534a07994c199e5b0cee8e74dcbe",
    "taskType": "mdi",
    "status": "failed",
    "errorMsg": "same_account_required",
    "param": {
      "task": "mdi",
      "clipId": "217c547a-3aee-48db-9490-e4182566fe91"
    },
    "result": "任务失败",
    "createTime": "2026-07-09 14:13:36",
    "completeTime": "2026-07-09 14:13:45"
  }
}

Response Fields

FieldTypeDescription
codenumberStatus code; 200 = success, non-200 on failure (e.g. 500)
msgstringTop-level message; equals errorMsg on failure
data.idstringTask ID
data.taskTypestringTask type; always "mdi"
data.statusstringStatus: succeeded / failed
data.errorMsgstringFailure reason. same_account_required = clipId is not a gen_stem_all result on your account
data.paramobjectEcho of the request params you submitted
data.resultstring | objectOn failure the string "任务失败"; on success the MIDI result (success sample TBD)
data.createTime / completeTimestringTask submit time / completion time

Billing & Credits

2 credits (x your user rate). Auto-refunded on failure.