Cover from a source clip API
Endpoint description
Cover from a source clip reuses a source clip you have already uploaded, or one that already exists, and generates a new cover version from it.
Endpoint: POST /api/music/generate-from-source
Billing: Paid, currently 0.6 ¥ per call by default. Uploading the source audio itself is free; the charge applies when you generate a cover from the source clip. 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.
Recommended usage: this is step 2 of the "two-step cover". In step 1, upload with the upload source audio API (free) and take the
clip_id; in step 2, call this endpoint to start the cover. That way the audio only appears in the free step: if the upload goes wrong, just retry — nothing is charged — while the request body of the charged step is only a few hundred bytes, so it can hardly fail because the transfer was cut. The one-shot upload-then-cover API puts the whole audio into the request body, so once the audio is over about 8 MB it easily gets truncated in transit and returnsunexpected end of JSON input(see "Large files and truncated requests" on that page).Besides, the same
clip_idcan be reused for extend, replace-section, separation and other follow-up actions, so there is no need to upload the audio again.
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 |
| sourceClipId | string | yes | - | Source clip ID; you can use the clip_id returned by upload source audio, the real song_id of a song you already have, or the real song_id returned once an enhanced upload completes |
| sourceAudioUrl | string | no | - | Source audio URL |
| sourceTitle | string | no | - | Source audio title |
| prompt | string | no | - | New lyrics or the creative direction |
| customMode | boolean | no | true | Whether to use custom mode |
| style | string | no | - | Style tags |
| title | string | no | - | Title |
| negativeTags | string | no | - | Negative style |
| instrumental | boolean | no | false | Whether the song is instrumental |
| waitAudio | boolean | no | false | Whether to wait for the audio to complete |
| vocalGender | string | no | - | Vocal gender |
| lyricsMode | string | no | - | Lyrics mode |
| weirdnessConstraint | number | no | - | Weirdness |
| styleWeight | number | no | - | Style influence weight |
| audio_weight | number | no | - | Influence weight of the reference audio, range 0.0-1.0; can only be sent when a source clip or reference audio is provided |
weirdnessConstraint, styleWeight and audio_weight all take a decimal ratio from 0.0 to 1.0, not a percentage integer; 50%, for example, is 0.5. 0 is a valid value — only omitting the field means "not specified". audio_weight maps to Suno's metadata.control_sliders.audio_weight and controls how far the result leans on the reference audio; it may only be carried when the request contains a valid sourceClipId or reference audio, so do not send it for ordinary text-only generation. With customMode=true, put the new lyrics in prompt and provide both style and title; with customMode=false, put the creative description in prompt. instrumental and waitAudio must use the JSON booleans true/false.
This endpoint returns asynchronously by default. While the returned status is pending, an empty audio_url is normal; wait until it completes before using the audio address. sourceClipId must be a real source song/clip ID — do not use a task_id, a client_request_id or a pending: placeholder ID.
What kind of ID is sourceClipId
sourceClipId is the real Suno clip identifier used as the source of this cover. The platform's customer-facing song object normally names this identifier song_id, while the cover request parameters keep the name sourceClipId; here the two mean the same real song ID.
If the source is an enhanced upload, query the enhanced upload task first and wait until status becomes completed, then put the returned real song_id into sourceClipId. It is recommended to also put that result's audio_url and title into sourceAudioUrl and sourceTitle.
Do not put an enhanced upload's task_id, client_request_id or pending:enhanced-upload:* placeholder ID into sourceClipId.
Request example
curl -X POST https://www.suno-api.io/api/music/generate-from-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"sourceClipId": "uploaded_or_existing_clip_id",
"sourceAudioUrl": "https://example.com/source.mp3",
"sourceTitle": "Original audio title",
"prompt": "New lyrics or creative direction",
"customMode": true,
"style": "Mandopop, warm vocal",
"title": "Cover title",
"negativeTags": "noise",
"audio_weight": 0.5,
"instrumental": false,
"waitAudio": false
}'
Response
{
"code": 200,
"message": "success",
"data": {
"clips": [
{
"song_id": "new_clip_id",
"song_title": "Cover title",
"status": "pending"
}
],
"source_update": {}
}
}
Notes
This endpoint tries to handle which account the source clip belongs to. If the source clip cannot be used directly, the server may re-upload it based on the source audio information and then generate.
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