Vocal & Instrument Stem Separation
Use Suno’s official get‑stem API to split tracks created on our platform into clean vocal, accompaniment, or per‑instrument stems with state‑of‑the‑art source‑separation AI.
Usage Guide
- Separate a platform‑generated mix into vocal, instrumental, and individual instrument components.
- Two processing modes are available:
separate_vocal— 2‑stem splitsplit_stem— up to 12‑stem split
- Ideal for karaoke creation, remixes, sample extraction, or detailed post‑production.
- Best results on professionally mixed AI tracks with clear vocal and instrumental layers.
- Billing notice: Each call consumes credits; re‑calling the same track is charged again (no server‑side caching).
- Pricing: Check current per‑call credit costs at https://app.apikley.ru/billing.
Parameter Reference
| Name | Type | Description |
|---|---|---|
taskId | string | ID of the original music‑generation task |
audioId | string | Which audio variation to process when multiple versions exist |
type | string | Required. Separation mode: separate_vocal or split_stem |
Developer Notes
- All returned audio‑file URLs remain accessible for 14 days.
- Separation quality depends on the complexity and mixing of the original track.
separate_vocalreturns 2 stems — vocals + instrumental.split_stemreturns up to 12 independent stems — vocals, backing vocals, drums, bass, guitar, keyboard, strings, brass, woodwinds, percussion, synth, FX/other.- Billing: Every request is charged. Re‑submitting the same track triggers a new credit deduction (no server‑side caching).
Rate limits and quotas are enforced by Apikley and may differ from upstream providers.
OpenAPI
suno-api/suno-api.json post /api/v1/vocal-removal/generate
Copy
openapi: 3.0.0
info:
title: Suno API
description: Apikley Suno API Documentation
version: 1.0.0
contact:
name: Technical Support
email: [email protected]
servers:
- url: https://api.apikley.ru
description: API Server
security:
- BearerAuth: []
paths:
/api/v1/vocal-removal/generate:
post:
summary: Separate Vocals from Music
description: >-
Separate music into vocal, instrumental, and individual instrument
tracks using advanced audio processing technology.
### Usage Guide
- Use this endpoint to split audio into vocal, instrumental, and
individual instrument components
- Supports two separation types: vocal separation and instrument
separation
- Ideal for remixing, karaoke tracks, or isolating specific instruments
for further processing
- Works best with professionally recorded music with clear vocal and
instrument parts
### Separation Type Details
- `separate_vocal` (default): Separate vocals and accompaniment,
generating vocal and instrumental tracks
- `split_stem`: Separate various instrument sounds, generating vocals,
backing vocals, drums, bass, guitar, keyboard, strings, brass,
woodwinds, percussion, synthesizer, effects, and other tracks
### Parameter Details
- `taskId` identifies the original music generation task
- `audioId` specifies which audio track to process when multiple
variations exist
- `type` specifies the separation type, with options `separate_vocal` or
`split_stem`, default value is `separate_vocal`
### Developer Notes
- All audio file URLs are retained for 14 days
- Separation quality depends on the complexity and mixing of the
original audio
- `separate_vocal` type returns vocal and instrumental tracks
- `split_stem` type returns multiple independent instrument tracks,
including vocals, backing vocals, drums, bass, guitar, keyboard,
percussion, strings, synthesizer, effects, brass, woodwinds, etc.
operationId: separate-vocals
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- taskId
- audioId
- callBackUrl
properties:
taskId:
type: string
description: >-
Unique identifier of the music generation task. This should
be a taskId returned from either the "Generate Music" or
"Extend Music" endpoints.
example: 5c79****be8e
audioId:
type: string
description: >-
Unique identifier of the specific audio track to process for
vocal separation. This ID is returned in the callback data
after music generation completes.
example: e231****-****-****-****-****8cadc7dc
type:
type: string
enum:
- separate_vocal
- split_stem
default: separate_vocal
description: >-
Separation type with the following options:
- **separate_vocal**: Separate vocals and accompaniment,
generating vocal and instrumental tracks
- **split_stem**: Separate various instrument sounds,
generating vocals, backing vocals, drums, bass, guitar,
keyboard, strings, brass, woodwinds, percussion,
synthesizer, effects, and other tracks
example: separate_vocal
callBackUrl:
type: string
format: uri
description: >-
The URL to receive vocal separation task completion updates.
Required for all vocal separation requests.
- System will POST task status and results to this URL when
vocal separation completes
- Callback content varies based on the type parameter:
separate_vocal returns vocals and accompaniment, split_stem
returns multiple instrument tracks
- Your callback endpoint should accept POST requests with
JSON payload containing separated audio file links
- For detailed callback format and implementation guide, see
[Vocal Separation
Callbacks](https://docs.apikley.ru/suno-api/separate-vocals-callbacks)
- Alternatively, use the Get Vocal Separation Details
endpoint to poll task status
example: https://api.example.com/callback
responses:
'200':
description: Request successful
content:
application/json:
schema:
allOf:
- type: object
properties:
code:
type: integer
enum:
- 200
- 400
- 401
- 402
- 404
- 409
- 422
- 429
- 455
- 500
description: >-
Response status code
- **200**: Success - Request has been processed
successfully
- **400**: Format Error - The parameter is not in a
valid JSON format
- **401**: Unauthorized - Authentication credentials
are missing or invalid
- **402**: Insufficient Credits - Account does not
have enough credits to perform the operation
- **404**: Not Found - The requested resource or
endpoint does not exist
- **409**: Conflict - WAV record already exists
- **422**: Validation Error - The request parameters
failed validation checks
- **429**: Rate Limited - Request limit has been
exceeded for this resource
- **455**: Service Unavailable - System is currently
undergoing maintenance
- **500**: Server Error - An unexpected error occurred
while processing the request
msg:
type: string
description: Error message when code != 200
example: success
- type: object
properties:
data:
type: object
properties:
taskId:
type: string
description: Task ID for tracking task status
example: 5c79****be8e
'500':
$ref: '#/components/responses/Error'
callbacks:
vocalRemovalGenerated:
'{$request.body#/callBackUrl}':
post:
description: >-
System will call this callback when vocal separation is
complete. Callback data structure varies based on the type
parameter specified in the request.
### separate_vocal Type Callback Example
```json
{
"code": 200,
"msg": "vocal separation generated successfully.",
"data": {
"task_id": "3e63b4cc88d52611159371f6af5571e7",
"vocal_separation_info": {
"instrumental_url": "https://file.aiquickdraw.com/s/d92a13bf-c6f4-4ade-bb47-f69738435528_Instrumental.mp3",
"origin_url": "",
"vocal_url": "https://file.aiquickdraw.com/s/3d7021c9-fa8b-4eda-91d1-3b9297ddb172_Vocals.mp3"
}
}
}
```
### split_stem Type Callback Example
```json
{
"code": 200,
"msg": "vocal separation generated successfully.",
"data": {
"task_id": "e649edb7abfd759285bd41a47a634b10",
"vocal_separation_info": {
"origin_url": "",
"backing_vocals_url": "https://file.aiquickdraw.com/s/aadc51a3-4c88-4c8e-a4c8-e867c539673d_Backing_Vocals.mp3",
"bass_url": "https://file.aiquickdraw.com/s/a3c2da5a-b364-4422-adb5-2692b9c26d33_Bass.mp3",
"brass_url": "https://file.aiquickdraw.com/s/334b2d23-0c65-4a04-92c7-22f828afdd44_Brass.mp3",
"drums_url": "https://file.aiquickdraw.com/s/ac75c5ea-ac77-4ad2-b7d9-66e140b78e44_Drums.mp3",
"fx_url": "https://file.aiquickdraw.com/s/a8822c73-6629-4089-8f2a-d19f41f0007d_FX.mp3",
"guitar_url": "https://file.aiquickdraw.com/s/064dd08e-d5d2-4201-9058-c5c40fb695b4_Guitar.mp3",
"keyboard_url": "https://file.aiquickdraw.com/s/adc934e0-df7d-45da-8220-1dba160d74e0_Keyboard.mp3",
"percussion_url": "https://file.aiquickdraw.com/s/0f70884d-047c-41f1-a6d0-7044618b7dc6_Percussion.mp3",
"strings_url": "https://file.aiquickdraw.com/s/49829425-a5b0-424e-857a-75d4c63a426b_Strings.mp3",
"synth_url": "https://file.aiquickdraw.com/s/56b2d94a-eb92-4d21-bc43-3460de0c8348_Synth.mp3",
"vocal_url": "https://file.aiquickdraw.com/s/07420749-29a2-4054-9b62-e6a6f8b90ccb_Vocals.mp3",
"woodwinds_url": "https://file.aiquickdraw.com/s/d81545b1-6f94-4388-9785-1aaa6ecabb02_Woodwinds.mp3"
}
}
}
```
requestBody:
content:
application/json:
schema:
allOf:
- type: object
properties:
code:
type: integer
enum:
- 200
- 500
description: >-
Response status code
- **200**: Success - Request has been processed
successfully
- **500**: Internal Error - Please try again
later.
msg:
type: string
description: Error message when code != 200
example: success
- type: object
properties:
data:
type: object
properties:
taskId:
type: string
description: Task ID for tracking task status
example: 5c79****be8e
type: object
properties:
code:
type: integer
description: Status code
example: 200
msg:
type: string
description: Response message
example: vocal separation generated successfully.
data:
type: object
properties:
task_id:
type: string
description: Task ID
vocal_separation_info:
type: object
description: >-
Vocal separation result information, fields vary
based on the type parameter in the request
properties:
origin_url:
type: string
description: Original audio URL
vocal_url:
type: string
description: Vocal part audio URL
instrumental_url:
type: string
description: >-
Instrumental part audio URL (separate_vocal
type only)
backing_vocals_url:
type: string
description: >-
Backing vocals audio URL (split_stem type
only)
drums_url:
type: string
description: Drums part audio URL (split_stem type only)
bass_url:
type: string
description: Bass part audio URL (split_stem type only)
guitar_url:
type: string
description: Guitar part audio URL (split_stem type only)
keyboard_url:
type: string
description: >-
Keyboard part audio URL (split_stem type
only)
percussion_url:
type: string
description: >-
Percussion part audio URL (split_stem type
only)
strings_url:
type: string
description: >-
Strings part audio URL (split_stem type
only)
synth_url:
type: string
description: >-
Synthesizer part audio URL (split_stem type
only)
fx_url:
type: string
description: >-
Effects part audio URL (split_stem type
only)
brass_url:
type: string
description: Brass part audio URL (split_stem type only)
woodwinds_url:
type: string
description: >-
Woodwinds part audio URL (split_stem type
only)
responses:
'200':
description: Callback received successfully
components:
responses:
Error:
description: Server Error
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: API Key
description: >-
All APIs require authentication via Bearer Token.
Get API Key:
1. Visit [API Key Management Page](https://app.apikley.ru/keys) to get your
API Key
Usage:
Add to request header:
Authorization: Bearer APIKLEY_API_KEY
Note:
- Keep your API Key secure and do not share it with others
- If you suspect your API Key has been compromised, reset it immediately
in the management page
To find navigation and other pages in this documentation, fetch the llms.txt file at: https://docs.apikley.ru/llms.txt