/api/stem-splitterSplits an audio or video file into 4 raw stems — vocals, drums, bass, and other — with no derived instrumental mix. Requires an API key — create one from your dashboard.
Content-Type: application/json · Authorization: Bearer <api-key>
| Field | Type | Description | |
|---|---|---|---|
fileUrl | string | required | Publicly accessible URL of the audio or video file to split — or a YouTube video URL to download and split directly. |
outputFormat | string | optional | Audio format for the returned stems — mp3 wav flac. Defaults to mp3. |
Split a song into stems (default mp3 output)
curl -X POST https://karadeo.com/api/stem-splitter \
-H "Authorization: Bearer kd_..." \
-H "Content-Type: application/json" \
-d '{ "fileUrl": "https://example.com/song.mp3" }'Split a song → lossless WAV stems
curl -X POST https://karadeo.com/api/stem-splitter \
-H "Authorization: Bearer kd_..." \
-H "Content-Type: application/json" \
-d '{ "fileUrl": "https://example.com/song.mp3", "outputFormat": "wav" }'{
"vocalUrl": "https://.../vocals.mp3",
"drumsUrl": "https://.../drums.mp3",
"bassUrl": "https://.../bass.mp3",
"otherUrl": "https://.../other.mp3"
}Stems are exported in the requested outputFormat. If the primary separation model falls back to a 2-stem engine, drumsUrl, bassUrl, and otherUrl will be null, and the fallback vocal is always returned as MP3 regardless of outputFormat.
All error responses return application/json with an error string field.
| Status | Condition | Body |
|---|---|---|
| 401 | Missing or invalid API key | { "error": "Authentication required" } |
| 403 | Usage limit exceeded | { "error": "Usage limit exceeded", "usage": {...} } |
| 402 | File duration exceeds remaining credits | { "error": "...", "usage": { tier, usedMinutes, limitMinutes, remainingMinutes, mediaDurationMinutes } } |
| 400 | Missing fileUrl, or can't determine duration | { "error": "..." } |
| 500 | Separation error or unexpected failure | { "error": "..." } |
Each request consumes credits from your monthly quota. Cost is calculated by rounding the file duration up to the nearest minute (e.g. 61 s = 2 min).
| Tier | Monthly limit | Reset |
|---|---|---|
| free | 10 min | 1st of each calendar month (UTC) |
| subscribed (monthly) | 500 min | Billing cycle start date |
| subscribed (annual) | 6,000 min | Billing cycle start date |