Extend API
Endpoint description
Extend continues an existing song from a chosen point in time and generates the following passage.
Endpoint: POST /api/music/extend
Billing: Paid, currently 0.6 ¥ per call by default. The amount actually charged follows the current back-office price configuration.
Max Mode / Variety: this endpoint supports the optional parameters max_mode and variety (0-4). With
max_mode on, this call is billed at 2× the price (0.6 → 1.2 ¥ per call); variety costs nothing extra. What
they mean and how to send them is in the "Advanced parameters" section of the
New API overview.
Wait times and timeouts (important): this is a synchronous endpoint — the order is only accepted and handed to generation when the response arrives. Measured, most requests return in 1-3 seconds, about 10% take longer than 30 seconds, and the longest is about 230 seconds. Set your client timeout to 300 seconds or more; no response does not mean nothing was generated, and do not retry immediately after a timeout (that duplicates the order and charges again). If the connection dropped, confirm later with
GET /api/music/songs. See "Wait times and timeout settings" in the New API overview.
Request parameters
Headers
| Parameter | Type | Required | Notes |
|---|---|---|---|
| Authorization | string | yes | Bearer YOUR_API_KEY |
| Content-Type | string | yes | application/json |
Body parameters
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
| model | string | no | suno-v6 | Customer-facing model name: suno-v6, suno-v6-wild or suno-v6-mini |
| audioId | string | yes | - | ID of the song to extend |
| prompt | string | yes | - | Extend description |
| continueAt | number | yes | - | Extend start point, in seconds. It must be greater than 0 and less than the source song's duration; leave at least 10 seconds after the start point, otherwise the result is only those few seconds |
| style | string | no | - | Style tags |
| negativeTags | string | no | - | Negative style tags |
| title | string | no | - | Title |
| sourceAudioUrl | string | no | - | Source audio URL |
| sourceFileName | string | no | - | Source file name |
| waitAudio | boolean | no | false | Whether to wait for the audio to finish |
Request example
curl -X POST https://www.suno-api.io/api/music/extend \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"audioId": "clip_id",
"prompt": "continue the chorus with more intensity",
"continueAt": 60,
"style": "Mandopop, rock",
"negativeTags": "noise",
"title": "Extended version",
"waitAudio": false
}'
Response
{
"code": 200,
"message": "success",
"data": {
"clips": [
{
"song_id": "extended_clip_id",
"song_title": "Extended version",
"status": "pending"
}
]
}
}
Compatible fields
The old field names are still accepted:
| New field | Compatible legacy field |
|---|---|
| audioId | song_id, audio_id |
| prompt | description |
| continueAt | start_time, continue_at |
| style | style_tags, tags |
| negativeTags | negative_tags |
| waitAudio | wait_audio |
Notes
- Do not start right at the end: the length of the extension is essentially "whatever remains after the start point". When the start point is too close to the end, the result is only a few seconds — measured, a 242-second song extended from second 240 produced just 2.7 seconds (and was still charged per call). Leave at least 10 seconds after the start point.
- Extend has no "source too short" threshold: measured, a 9.6-second clip extended from second 5 still produced a song normally, so a short source or a short remainder is not a reason for rejection.
- The start point must be greater than 0:
continueAt=0is accepted by the platform and then voided, without returning a failure reason, so start from just after the first second. - One call returns 2 results (billed as 2 songs); judge by the length of the
clipsarray. - The result is a new piece of work; the original song is unaffected.
Get an API key
Create an API key in the console after signing up. ¥0.6 per run returns 2 tracks, downloads are unlimited, and no phone number is required.
Get API key Back to overview