Disband
Separations

Separations

Create a separation, follow its status, download its stems and delete it.

Create

POST /separations Create a separation

ParameterInTypeDescription
stems requiredquerystring[]Stem ids from the catalog, repeated as stems=a&stems=b
formats querystring[]File formats to deliver each stem in, repeated like stems
name querystringThe file's name, for the list and the download file names
bytes queryintegerSize in bytes of a file to upload separately instead of sending it as the request body
body requiredbodyapplication/octet-streamMP3, WAV, FLAC, M4A, Ogg or Opus audio

Response

{
  "id": "sep_8f3kq2",
  "name": "Halfway Home",
  "created_at": "2026-11-12T14:04:05.000Z",
  "expires_at": "2026-11-12T15:20:05.000Z",
  "status": "queued",
  "charge": 70
}
cURL
curl "https://api.disband.io/v1/separations" \
  --url-query stems=vocals \
  --url-query stems=instrumental.drums \
  --url-query formats=mp3 \
  --url-query "name=Halfway Home" \
  -H "Authorization: Bearer $DISBAND_KEY" \
  --data-binary @song.mp3
  • The request body is the audio file, at most 95 MB, with a Content-Length header. Larger files use a reserved upload.
  • Supported formats: WAV, FLAC, MP3, AAC and ALAC (.m4a), Ogg Vorbis and Opus, mono or stereo. The format is detected from the file's content, so Content-Type is not required.
  • The price depends on the file's length and the requested stems, not on formats. See Credits.
  • Returns 202 Accepted with a Location header and the separation. The credits are charged at this point and refunded if the separation fails on our side.

Status

GET /separations/{id} Get a separation

ParameterInTypeDescription
prefer headerstringwait=N holds the response until the next status change, at most N seconds, up to 60
id requiredpathstringSeparation id

Response

{
  "id": "sep_8f3kq2",
  "name": "Halfway Home",
  "created_at": "2026-11-12T14:04:05.000Z",
  "expires_at": "2026-11-12T15:05:12.000Z",
  "status": "ready",
  "charge": 70,
  "duration": 210.4,
  "stems": {
    "vocals": {
      "mp3": {
        "url": "https://api.disband.io/v1/separations/sep_8f3kq2/stems/vocals/mp3",
        "bytes": 5262000
      }
    },
    "instrumental.drums": {
      "silent": true
    }
  }
}
StatusMeaning
uploadingA reserved upload is waiting for its file
queuedWaiting for a GPU
separatingRunning on a GPU
readyDone, with duration and stems
failedEnded with a problem, see Errors

With Prefer: wait=N, the response is held until the status changes, for at most N seconds and no more than 60 seconds, and includes Preference-Applied. Repeat the request until the status is ready or failed. No polling interval is needed. Ready and failed separations return immediately.

GET /separations List separations

Response

[
  {
    "id": "sep_8f3kq2",
    "name": "Halfway Home",
    "created_at": "2026-11-12T14:04:05.000Z",
    "expires_at": "2026-11-12T15:05:12.000Z",
    "status": "ready",
    "charge": 70,
    "duration": 210.4,
    "stems": {
      "vocals": {
        "mp3": {
          "url": "https://api.disband.io/v1/separations/sep_8f3kq2/stems/vocals/mp3",
          "bytes": 5262000
        }
      },
      "instrumental.drums": {
        "silent": true
      }
    }
  }
]

Lists the account's separations, newest first, until they expire or are deleted.

Stems

A ready separation maps each requested stem to one file per format, each with its url and size in bytes, as in the response under Status.

A stem with no audio in the song is returned as {"silent": true} without files. It is charged like any other stem. See Silent stems.

Download

GET /separations/{id}/stems/{stem}/{format} Download a stem

ParameterInTypeDescription
id requiredpathstringSeparation id
stem requiredpathstringStem id from the catalog
format requiredpathstringwav or mp3, one of the separation's formats
  • Requires the same key. WAV files are 16-bit, 44.1 kHz stereo. MP3 files are about 200 kbps VBR, 44.1 kHz stereo.
  • The file name is the separation's name and the stem, for example Halfway Home - Vocals.mp3.
  • Byte ranges are supported, so interrupted downloads can resume.
  • Downloads don't delete anything and can be repeated until the separation expires.

Delete

DELETE /separations/{id} Delete a separation

ParameterInTypeDescription
id requiredpathstringSeparation id

Deletes the separation and its files and returns 204. Deleting a queued separation refunds its charge, deleting a separating one stops it and keeps its charge. Otherwise the files are deleted at expires_at, one hour after the separation is ready or fails.