> ## Documentation Index
> Fetch the complete documentation index at: https://docs.snapgen.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Suno Stems

> Extract one stem, such as the lead vocal, from a Suno track. $0.15 per request.

`suno-stems` extracts one stem, such as the lead vocal or the drums, from one of your tracks.

| Property | Value |
| - | - |
| Model ID | `suno-stems` |
| Endpoint | `POST /v1/music/generations` (asynchronous task) |
| Group | Suno > Vocals & stems |
| Input | A track from one of your earlier tasks and a stem type |
| Result | Tracks in `result.tracks` with `audio_url` |
| Price | \$0.15 per request (15 credits) |

Confirm live rates on the [SnapGen models page](https://snapgen.org/models). Failed tasks are not charged.

<ParamField body="model" type="string" required>
  Set to `suno-stems`.
</ParamField>

<ParamField body="source_task_id" type="string" required>
  The `id` of your earlier task that holds the source track. It must be your own task, must have succeeded, and must come from a model listed in [Source tracks](#source-tracks).
</ParamField>

<ParamField body="source_index" type="integer" default="1">
  Position of the source track in that task's `result.tracks`, counting from `1` (up to `8`).
</ParamField>

<ParamField body="stem_type" type="string" default="lead_vocal">
  The stem to extract, such as `lead_vocal`, `backing_vocals`, `drum_kit`, `bass`, or `piano`. See [Stem types](#stem-types) for all values.
</ParamField>

<ParamField body="audio_format" type="string">
  Output format: `mp3`, `m4a`, or `wav`. The provider picks one if you omit it.
</ParamField>

<ParamField body="webhook" type="string">
  Optional public `https` URL that receives one signed event when the task finishes. See [Task webhooks](/api-reference/webhooks).
</ParamField>

<ParamField body="webhook_secret" type="string">
  Required with `webhook`: 16 to 256 characters, used to sign the delivery.
</ParamField>

## Source tracks

The source task must be your own succeeded task from one of these models:

[`suno-music`](/api-manual/audio/suno-music), [`suno-inspo`](/api-manual/audio/suno-inspo), [`suno-sounds`](/api-manual/audio/suno-sounds), [`suno-upload`](/api-manual/audio/suno-upload), [`suno-upload-cover`](/api-manual/audio/suno-upload-cover), [`suno-upload-extend`](/api-manual/audio/suno-upload-extend), [`suno-extend`](/api-manual/audio/suno-extend), [`suno-cover`](/api-manual/audio/suno-cover), [`suno-remaster`](/api-manual/audio/suno-remaster), [`suno-add-vocals`](/api-manual/audio/suno-add-vocals), [`suno-add-instrumental`](/api-manual/audio/suno-add-instrumental), [`suno-add-stem`](/api-manual/audio/suno-add-stem), [`suno-replace-section`](/api-manual/audio/suno-replace-section), [`suno-remove-section`](/api-manual/audio/suno-remove-section), [`suno-crop`](/api-manual/audio/suno-crop), [`suno-fade-in`](/api-manual/audio/suno-fade-in), [`suno-fade-out`](/api-manual/audio/suno-fade-out), [`suno-speed`](/api-manual/audio/suno-speed), [`suno-concat`](/api-manual/audio/suno-concat), [`suno-mashup`](/api-manual/audio/suno-mashup), [`suno-sample`](/api-manual/audio/suno-sample).

Send the task `id` as `source_task_id` and pick the track with `source_index`. Never send provider track or clip IDs. See [Reference earlier tasks](/api-reference/music-generations#reference-earlier-tasks).

## Request

```bash theme={null}
curl https://api.snapgen.org/v1/music/generations \
  -H "Authorization: Bearer $SNAPGEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-stems",
    "source_task_id": "task_2f8KcX1mQpR7vT0yZa9Lb3",
    "source_index": 1,
    "stem_type": "lead_vocal"
  }'
```

The response is HTTP `202` with a task object and a `Location: /v1/tasks/{id}` header. Poll [`GET /v1/tasks/{id}`](/api-reference/task-status) every 10 to 20 seconds until `status` is `succeeded` or `failed`.

## Result

`result.tracks[]` lists every track in its original order, each with its `index` and `audio_url`, plus `title`, `image_url`, `duration_seconds`, `lyrics`, and `tags` when the provider returns them. `result.urls` lists the audio URLs.

```json theme={null}
{
  "urls": [
    "https://cdn.example.com/music/night-drive.mp3"
  ],
  "tracks": [
    {
      "index": 1,
      "id": "clip_8f3a2c",
      "title": "Night Drive",
      "audio_url": "https://cdn.example.com/music/night-drive.mp3",
      "image_url": "https://cdn.example.com/music/night-drive.jpg",
      "duration_seconds": 184.6,
      "tags": "lo-fi, soft piano, rain"
    }
  ]
}
```

## Stem types

<Accordion title="All 97 stem_type values">
  `lead_vocal`, `drum_kit`, `bass`, `backing_vocals`, `piano`, `electric_guitar`, `percussion`, `string_section`, `synth`, `acoustic_guitar`, `sound_effects`, `synth_pad`, `synth_bass`, `guitar`, `brass_section`, `organ`, `electronic_drum_kit`, `lead_electric_guitar`, `synth_keys`, `rhythm_electric_guitar`, `electric_piano`, `upright_bass`, `keyboards`, `distorted_electric_guitar`, `kick`, `snare`, `risers`, `synth_strings`, `synth_lead`, `woodwinds`, `flute`, `harp`, `tambourine`, `trumpet`, `arpeggiator`, `accordion`, `fiddle`, `pedal_steel_guitar`, `synth_voice`, `violin`, `digital_piano`, `synth_brass`, `mandolin`, `choir`, `banjo`, `bells`, `clarinet`, `tenor_saxophone`, `trombone`, `shaker`, `french_horn`, `glockenspiel`, `electric_bass`, `cello`, `timpani`, `harmonica`, `marimba`, `vibraphone`, `lap_steel_guitar`, `saxophone`, `orchestra`, `horns`, `cymbals`, `hand_clap`, `oboe`, `celesta`, `congas`, `drone`, `alto_saxophone`, `double_bass`, `ukulele`, `harpsichord`, `baritone_saxophone`, `xylophone`, `tuba`, `bass_guitar`, `whistle`, `lead_guitar`, `rhodes`, `808`, `bongos`, `bassoon`, `cowbell`, `viola`, `sitar`, `steel_drums`, `piccolo`, `theremin`, `bagpipes`, `hi_hat`, `music_box`, `melodica`, `tabla`, `koto`, `djembe`, `taiko`, `didgeridoo`
</Accordion>

<Note>
  Result URLs are kept for about 72 hours. Download the files you want to keep.
  See [Music generation tasks](/api-reference/music-generations) for the task lifecycle, result fields, webhooks, and errors.
</Note>
