Separation (vocal & backing split) API

Updated 2026-09-18 · Suno-API team

Endpoint description

Separation splits an existing song into vocals, backing or multi-track results. The recommended integration flow is:

  1. If the source audio is not a song generated on this platform, call the upload source audio API first.
  2. Call POST /api/music/separate to submit the separation task.
  3. Poll the separation result with the song query API.
  4. Use the download endpoints to download the audio file of each separation result.

Endpoint: POST /api/music/separate

Billing: Paid. stem_mode=two currently defaults to 0.6 ¥ per call; stem_mode=twelve is a multi-track split and currently defaults to 3.0 ¥ per call. The amount actually charged follows the back-office price configuration.

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.

Authentication

Parameter Type Required Notes
Authorization string yes Bearer YOUR_API_KEY
Content-Type string yes application/json

Request parameters

Parameter Type Required Default Notes
song_id string yes - ID of the source song to separate
stem_mode string yes - Separation mode: two or twelve
source_audio_url string no - Source audio URL
source_file_name string no - Source audio file name
source_title string no - Source song title

About stem_mode

Value Entries returned Notes
two 4 Two-track separation: vocals + backing. One submission produces 2 versions × 2 tracks
twelve 24 Multi-track split: 2 versions × 12 tracks; track names are in the table below

About separation

Separation is an independent fixed capability; there is no need to fill in or choose a song generation model. The customer simply submits the source song and stem_mode; the server handles the rest according to the mode.

Where the counts come from: one submission produces 2 versions (two results from the same batch of material), so the count is 2 × the track count of that mode: 4 for two, 24 for twelve. Always go by the actual length of the clips array in the response; do not hard-code a loop over a fixed count (individual tracks may fail while the successful ones are returned as usual).

Which tracks each mode returns

The 12 tracks of twelve mode (the names are fixed by the platform; the order may vary):

# Track title Notes
1 (Vocals) Lead vocals
2 (Backing Vocals) Harmonies / backing vocals
3 (Drums) Drum kit
4 (Bass) Bass
5 (Guitar) Guitar
6 (Keyboard) Keyboards / piano
7 (Percussion) Percussion
8 (Strings) Strings
9 (Synth) Synth
10 (FX) Sound effects / ambience
11 (Brass) Brass
12 (Woodwinds) Woodwinds

two mode returns two tracks, (Vocals) and (Instrumental), each in 2 versions. The track titles for both two and twelve are fixed names (they do not carry the source song name), so do not expect to see which song it was from the title.

Track titles cannot be used as unique keys. The two versions contain tracks with the same name (for example two (Vocals), two (Strings)), and one separation returns many tracks. Always use song_id as the identifier and song_title for display only; do not use array indexes either (the order may change).

Request examples

Vocal / backing separation (stem_mode: "two")

curl -X POST https://www.suno-api.io/api/music/separate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "source_clip_id",
    "stem_mode": "two",
    "source_audio_url": "https://example.com/source.mp3",
    "source_file_name": "source.mp3",
    "source_title": "Source Song"
  }'

Multi-track split (stem_mode: "twelve")

curl -X POST https://www.suno-api.io/api/music/separate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "source_clip_id",
    "stem_mode": "twelve",
    "source_audio_url": "https://example.com/source.mp3"
  }'

Response

On success an array of separation results is usually returned. Each separation result is an independent song clip and must keep being queried until status becomes a completed state.

{
  "code": 200,
  "message": "success",
  "data": {
    "clips": [
      {
        "song_id": "stem_clip_id_1",
        "song_title": "(Vocals)",
        "status": "pending",
        "generation_type": "separate",
        "created_at": "2026-06-06T10:00:00Z"
      },
      {
        "song_id": "stem_clip_id_2",
        "song_title": "(Instrumental)",
        "status": "pending",
        "generation_type": "separate",
        "created_at": "2026-06-06T10:00:00Z"
      }
    ]
  }
}

The above shows only 2 of the 4 entries for two mode; in practice 4 are returned (2 versions × {(Vocals), (Instrumental)}); twelve mode returns 24. The real count is the length of the clips array.

Customers usually only need to save clips[].song_id; later queries and downloads revolve around those IDs.

Notes

Querying separation results

After a successful submission, query the results with clips[].song_id via POST /api/music/query.

curl -X POST https://www.suno-api.io/api/music/query \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_ids": "stem_clip_id_1,stem_clip_id_2"
  }'

Example of a completed query:

[
  {
    "song_id": "stem_clip_id_1",
    "song_title": "(Vocals)",
    "status": "complete",
    "audio_url": "https://...",
    "cover_url": "https://...",
    "duration": 180.5,
    "generation_type": "separate",
    "stem_from_id": "source_clip_id"
  }
]

Downloading stem files

Once a separation result is complete, you can download a single stem file with the download endpoint.

Endpoint: POST /api/music/download-file

curl -X POST https://www.suno-api.io/api/music/download-file \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "stem_clip_id_1",
    "kind": "audio"
  }' \
  --output stem.mp3

kind supports:

kind Notes
audio / song / music Download the MP3 audio
cover / image Download the cover
wav Download the WAV audio
video / mp4 Download the video

To package the related assets of one separation result, call:

curl -X POST https://www.suno-api.io/api/music/download-all \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "stem_clip_id_1"
  }' \
  --output stem-resources.zip

Status values

Status Notes
pending Submitted, waiting to be processed
queued Queued
generating / processing Being processed
complete / completed Completed
error / failed Failed; check error_message

Common errors

HTTP status Notes Suggested handling
400 Wrong parameters, for example a missing song_id or stem_mode Check the request parameters
401 The API key is invalid or missing Check Authorization
402 Insufficient balance Top up and retry
409 The source song cannot be processed for now Check song_id or retry later
500/503 Temporary service or platform problem Retry later or contact technical support

Compatibility notes

Older documentation used single-object examples such as success/task_id/vocals_url/instrumental_url. The current separation API works with the clips[] song array: every separation result has its own song_id, and later queries and downloads revolve around those song_id values.

Related pages

NextVocal removal API

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