Suno · Music
Extend Song
📌 What is this:Continue an existing song to make it longer.
💡 When to use:Use when a song is too short or you want to add a chorus.
Endpoints
| Usage | Method | Path |
|---|---|---|
| Submit task | POST | /api/cqt/generator/suno |
| Query Result | GET | /api/cqt/info/suno?id={taskId} |
Request Parameters
| Param | Type | Required | Description |
|---|---|---|---|
| task | string | Required | Fixed value: extend |
| model | string | Required | Model version |
| clipId | string | Required | ID of the clip to extend |
| continueAt | number | — | Second to continue from |
Advanced Parameters (optional)
| Param | Type | Description |
|---|---|---|
| styleWeight | number(0~1) | Style weight; higher sticks closer to tags |
| audioWeight | number(0~1) | Original-audio influence weight (for audio-based tasks) |
| weirdnessConstraint | number(0~1) | Creativity / weirdness; higher is bolder |
| personaId | string | Voice persona ID (sing with a persona) |
| artistClipId | string | Reference clip ID for style |
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":"extend", "model":"v55", "clipId":"6e1f9e23-09f6-43d2-812a-59a154459082", "continueAt":30 }'
# -> { "code":200, "data":"<taskId>" }Response Example
{
"code": 200,
"msg": "success",
"data": {
"id": "95605f2d10624032baabc3b1db41a7e8",
"taskType": "extend",
"status": "succeeded",
"errorMsg": "",
"param": {
"task": "extend",
"model": "chirp-v55",
"clipId": "6e1f9e23-09f6-43d2-812a-59a154459082",
"continueAt": 30
},
"result": [
{
"id": "3c7a9faf-81b4-4bc1-8ee1-1bfc8f07c176",
"title": "",
"handle": "ernabillstbwsd",
"status": "complete",
"user_id": "f04d4d05-dd5c-4f54-ac37-3357099b2ce1",
"metadata": {
"tags": "",
"task": "extend",
"type": "gen",
"prompt": "",
"duration": 73.68,
"is_remix": true,
"continue_at": 30,
"edited_clip_id": "6e1f9e23-09f6-43d2-812a-59a154459082",
"history": [
{ "id": "6e1f9e23-09f6-43d2-812a-59a154459082", "type": "gen", "source": "ios", "continue_at": 30 }
],
"make_instrumental": false,
"uses_latest_model": true
},
"audio_url": "https://cdn1.suno.ai/3c7a9faf-81b4-4bc1-8ee1-1bfc8f07c176.mp3",
"video_url": "https://cdn1.suno.ai/3c7a9faf-81b4-4bc1-8ee1-1bfc8f07c176.mp4",
"image_url": "https://cdn2.suno.ai/image_3c7a9faf-81b4-4bc1-8ee1-1bfc8f07c176.jpeg",
"image_large_url": "https://cdn2.suno.ai/image_large_3c7a9faf-81b4-4bc1-8ee1-1bfc8f07c176.jpeg",
"clip_roots": {
"clips": [
{
"id": "6e1f9e23-09f6-43d2-812a-59a154459082",
"title": "Książę z Mroczną Przeszłością",
"image_url": "https://cdn2.suno.ai/image_6e1f9e23-09f6-43d2-812a-59a154459082.jpeg",
"user_handle": "ernabillstbwsd",
"user_display_name": "ernabillstbwsd"
}
],
"clip_attribution_type": "remix"
},
"media_urls": [
{ "url": "https://d2lwuy8qc234o3.cloudfront.net/1/clip/3c7a9faf-81b4-4bc1-8ee1-1bfc8f07c176.m4a", "delivery": "progressive", "content_type": "m4a-opus" },
{ "url": "https://cdn1.suno.ai/3c7a9faf-81b4-4bc1-8ee1-1bfc8f07c176.mp3", "delivery": "progressive", "content_type": "mp3" }
],
"model_name": "chirp-fenix",
"batch_index": 0,
"created_at": "2026-07-08T06:41:34.279Z",
"major_model_version": "v5.5"
},
{
"id": "c01622cb-8159-4865-91af-754ed215b51c",
"title": "",
"status": "complete",
"metadata": {
"task": "extend",
"duration": 44.4,
"is_remix": true,
"continue_at": 30,
"avg_bpm": 83.99,
"history": [
{ "id": "6e1f9e23-09f6-43d2-812a-59a154459082", "type": "gen", "continue_at": 30 }
]
},
"audio_url": "https://cdn1.suno.ai/c01622cb-8159-4865-91af-754ed215b51c.mp3",
"video_url": "https://cdn1.suno.ai/c01622cb-8159-4865-91af-754ed215b51c.mp4",
"image_url": "https://cdn2.suno.ai/image_c01622cb-8159-4865-91af-754ed215b51c.jpeg",
"model_name": "chirp-fenix",
"batch_index": 1,
"major_model_version": "v5.5"
}
],
"createTime": "2026-07-08 14:41:32",
"completeTime": "2026-07-08 14:43:08"
}
}Response Fields
| Field | Type | Description |
|---|---|---|
| code | number | Status code; 200 = success |
| msg | string | Message |
| data.id | string | Task ID (the taskId returned on submit; used to poll) |
| data.taskType | string | Task type; matches the submitted task |
| data.status | string | Status: pending / succeeded / failed |
| data.errorMsg | string | Failure reason; empty on success |
| data.param | object | Echo of the request params you submitted |
| data.result | array | Results; returns 2 candidate clips |
| data.result[].id | string | The generated clipId; reusable for further extend / cover, etc. |
| data.result[].audio_url | string | Audio file URL (mp3) |
| data.result[].video_url | string | Video file URL (mp4); may be empty, re-query later |
| data.result[].image_url | string | Cover image URL (image_large_url is the large one) |
| data.result[].title | string | Song title |
| data.result[].status | string | Clip status; "complete" = ready to download |
| data.result[].metadata.duration | number | Total audio duration (seconds) |
| data.result[].metadata.tags | string | Style tags |
| data.result[].metadata.continue_at | number | Second in the source song where the continuation starts |
| data.result[].metadata.history | array | Lineage: which clip and second this continues from |
| data.result[].metadata.is_remix | bool | Whether it is a remix; always true for extend |
| data.result[].clip_roots | object | Source (parent) clip info: title / cover / author |
| data.result[].media_urls | array | Multi-format audio URLs (m4a-opus / mp3) |
| data.result[].batch_index | number | Candidate index (0, 1) |
| data.result[].major_model_version | string | Model version used, e.g. v4.5 / v5.5 |
| data.createTime / completeTime | string | Task submit time / completion time |
| 其它字段 | — | action_config / model_badges / secondary_badges / ownership / avatar_image_url, etc. are for Suno UI and can be ignored |
Billing & Credits
30 credits (x your user rate). Auto-refunded on failure.