Download extracted stems
October 9, 2026
Table of contents
https://api.useapi.net/v1/mureka/music/stems-download
Get download links for the stems of a finished POST /music/stems extraction. Downloads are free. What you get depends on the parameters you send:
| Parameters | Returns |
|---|---|
stems_id only | audio_zip with every stem as audio, and midi_zip with every MIDI track |
stems_id + stem_name | One stem: its wav and its midi |
stems_id + daw | url of a session for Ableton Live, Logic Pro, Pro Tools or Cubase |
The .wav and .mp3 links of each stem are already in the POST /music/stems job response, so you only need this endpoint for MIDI, the ZIP archives or a DAW session.
Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
API tokenis required, see Setup useapi.net for details.
Request Body
{
"stems_id": "user:777-mureka:12345678901234-song:33445566-stems:55667788",
"stem_name": "drums"
}
-
stems_idis required, theresponse.stems_idvalue returned by POST /music/stems or GET /jobs/jobid.
The extraction must becompleted, otherwise the call returns409. -
stem_nameis optional, one stem from thestemslist of the extraction, such asvocal,drums,bassorother.
Returns that stem’swavandmidilinks.midiisnullwhen Mureka has no MIDI for that stem (seen once forother, FX on mureka.ai, on some songs). A name the extraction does not have returns400, with the available names in the error message. -
dawis optional, builds a session you open directly in your DAW.
Supported values:ableton,logic,protools,cubase.
ableton,logicandprotoolsreturn a.zip,cubasereturns a.dawprojectfile.logicandprotoolsreturn the same file.
stem_name and daw can not be used together.
Responses
-
With
stems_idonly:{ "stems_id": "user:777-mureka:12345678901234-song:33445566-stems:55667788", "audio_zip": "https://static-cos.mureka.ai/<stems>.zip", "midi_zip": "https://static-cos.mureka.ai/<midi>.zip" }With
stem_name:{ "stems_id": "user:777-mureka:12345678901234-song:33445566-stems:55667788", "stem_name": "drums", "wav": "https://static-cos.mureka.ai/<drums>.wav", "midi": "https://static-cos.mureka.ai/<drums-midi>" }With
daw:{ "stems_id": "user:777-mureka:12345678901234-song:33445566-stems:55667788", "daw": "ableton", "url": "https://static-cos.mureka.ai/<session>.zip" } -
Returned for a malformed
stems_id, forstem_nameanddawsent together, or for astem_namethe extraction does not have.{ "error": "Parameter stem_name (piano) not found, this extraction has vocal, drums, bass, other", "code": 400 } -
{ "error": "Wrong username/password combination.", "code": 401 } -
The extraction is still running. Poll GET /jobs/
jobiduntil it iscompleted, then retry.{ "error": "Stems extraction is not completed yet (generate_state 3), poll GET /jobs/{jobid}", "code": 409 } -
Mureka builds a DAW session on request. If it is still not ready after a few retries, the call returns
503. Retry shortly.{ "error": "DAW session ableton is not ready yet (state <n>), please retry shortly", "code": 503 } -
596 Account Error
Returned when the account has an error state preventing API calls.
{ "error": "Session refresh failed 2026-01-19T14:31:15.000Z, manual update required", "code": "REFRESH_FAILED" }Possible error codes:
ACCOUNT_ERROR- Account has a blocking errorREFRESH_FAILED- Automatic token refresh failedREFRESH_IN_PROGRESS- Token refresh already in progress, retry shortlySESSION_EXPIRED- Session expired and no auto-refresh availableCOOKIE_EXPIRED- Google cookie has expired
To resolve, update your account configuration via POST /accounts.
Model
{ // TypeScript, all fields are optional
stems_id: string
// stems_id only
audio_zip: string | null
midi_zip: string | null
// stem_name
stem_name: string
wav: string | null
midi: string | null // null for a stem without MIDI
// daw
daw: 'ableton' | 'logic' | 'protools' | 'cubase'
url: string // .zip, or .dawproject for cubase
}
Examples
-
curl -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer …" \ -X POST https://api.useapi.net/v1/mureka/music/stems-download \ -d '{"stems_id": "…", "stem_name": "drums"}' -
const stems_id = "user:777-mureka:12345678901234-song:33445566-stems:55667788"; const stem_name = "drums"; const apiUrl = `https://api.useapi.net/v1/mureka/music/stems-download`; const api_token = "API token"; const data = { method: 'POST', headers: { 'Authorization': `Bearer ${api_token}`, 'Content-Type': 'application/json' } }; data.body = JSON.stringify({ stems_id, stem_name }); const response = await fetch(apiUrl, data); const result = await response.json(); console.log("response", {response, result}); -
import requests stems_id = "user:777-mureka:12345678901234-song:33445566-stems:55667788" stem_name = "drums" apiUrl = f"https://api.useapi.net/v1/mureka/music/stems-download" api_token = "API token" headers = { "Content-Type": "application/json", "Authorization" : f"Bearer {api_token}" } body = { "stems_id": stems_id, "stem_name": stem_name } response = requests.post(apiUrl, headers=headers, json=body) print(response, response.json())