AIVoiceSeparator
🔑 Get API key

Vocal Separation API — Studio-Grade Stems in One REST Call

Split any song into clean vocals + instrumental programmatically. The same 3-model Studio ensemble as our app (SDR 12.97 dB), behind a dead-simple REST API. $0.50 per song, pay-as-you-go — no subscription, no monthly minimum.

💵 $0.50/song ⚡ SDR 12.97 dB 🔑 X-API-Key auth 🧾 pay-as-you-go ↩️ auto-refund on failure

Get your API key and make the first call in 2 minutes

🔑 Generate an API key

Sign in with Google → generate key → top up credits → call the API

Why build on it

🎚️ Studio quality, not toy quality

A weighted ensemble of BS-Roformer + Mel-Band Roformer + MDX23C — SDR 12.97 dB. Cleaner stems than single-model open-source separators.

💵 Pay only for what you run

$0.50 per song-unit from prepaid credits. No monthly seat, no minimum. A cheaper alternative to LALAL.AI / Moises for batch and app workloads.

🧩 Two calls, done

POST a URL or upload a file → poll a job → download stems. No SDK required.

↩️ Fair billing

Credits are reserved when a job starts and automatically refunded if it fails — you never pay for a broken run.

Quickstart

1. Sign in at /account, click Generate API key (looks like vsk_…), and top up credits. 2. Submit a job:

# Submit a separation job
curl -X POST https://aivoiceseparator.com/api/v1/separate \
  -H "X-API-Key: vsk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.youtube.com/watch?v=VIDEO_ID", "output_format": "mp3"}'

# → {"job_id":"a1b2c3","status_url":".../api/v1/jobs/a1b2c3",
#    "cost_credits":1,"credit_balance":950}

3. Poll until state is done, then download the stems (download URLs are public + opaque, valid 24 h):

curl https://aivoiceseparator.com/api/v1/jobs/a1b2c3 \
  -H "X-API-Key: vsk_your_key_here"

# → {"job_id":"a1b2c3","state":"done","progress":100,"output_format":"mp3",
#    "stems":[
#      {"name":"vocals","url":".../api/download/a1b2c3/vocals"},
#      {"name":"instrumental","url":".../api/download/a1b2c3/instrumental"}]}

Python example

import requests, time

API = "https://aivoiceseparator.com"
H = {"X-API-Key": "vsk_your_key_here"}

job = requests.post(f"{API}/api/v1/separate", headers=H,
    json={"url": "https://youtu.be/VIDEO_ID", "output_format": "wav"}).json()

while True:
    s = requests.get(f"{API}/api/v1/jobs/{job['job_id']}", headers=H).json()
    if s["state"] in ("done", "error"): break
    time.sleep(5)

for stem in s["stems"]:                      # vocals + instrumental
    open(stem["name"]+".wav", "wb").write(requests.get(stem["url"]).content)

Endpoints

POST /api/v1/separate
Body fieldTypeDescription
urlstring (required)Any public audio/video URL — a direct file (MP3/WAV/M4A…), an S3/CDN link, or a platform page (YouTube, SoundCloud, TikTok, Bandcamp, Vimeo). Internal/private addresses are refused. To send a local file instead, use /api/v1/separate/upload.
output_formatstringmp3 (default, 320 kbps), wav, or flac.
transcribebooleanOptional. If true, also generates lyrics (SRT/LRC/TXT) via Whisper.

Returns { job_id, status_url, cost_credits, credit_balance }. Credits are charged on submit and refunded if the job fails.

POST /api/v1/separate/upload

Send your own file as multipart/form-data instead of a URL. Fields: file (required), output_format, transcribe. Same response and billing as above.

curl -X POST https://aivoiceseparator.com/api/v1/separate/upload \
  -H "X-API-Key: vsk_your_key_here" \
  -F "file=@song.mp3" \
  -F "output_format=wav"
# → {"job_id":"…","status_url":"…","cost_credits":1,"credit_balance":900}
GET /api/v1/jobs/{job_id}

Poll a job you own. state is one of queued · downloading · processing · done · error. When done, stems holds the download URLs; when error, error holds the reason.

GET/POST/DELETE /api/apikey

Manage your key from the web (used by the /account page). Generate, view, or revoke.

Pricing

Clip lengthSong-unitsCost
up to 7 min1$0.50
7–14 min2$1.00
14–20 min (max)3$1.50

Prepaid credits, topped up on /account. No subscription, no monthly minimum, no per-seat fee. Failed jobs are refunded automatically.

Limits & errors

CodeMeaning
401Missing / invalid / revoked API key.
402Insufficient credit — top up at /account.
413Clip longer than the 20-minute limit.
422URL couldn't be read (private, region-locked, unsupported host, or a live stream).
429Rate limit — max 30 requests per 10 minutes per key.

FAQ

How is this different from LALAL.AI or Moises's API?

Same category, simpler billing. We're pay-as-you-go at $0.50/song with no subscription or monthly minimum, and our Studio ensemble measures SDR 12.97 dB. Good for batch jobs and apps where you don't want a fixed monthly commitment.

Can I send my own audio file instead of a URL?

Yes — two ways: upload the file (multipart/form-data) to POST /api/v1/separate/upload, or pass any public file URL (an S3/CDN link, a direct .mp3, etc.) to POST /api/v1/separate. Same $0.50/song billing either way. Platform pages (YouTube/SoundCloud/TikTok/…) also work as URLs.

Do I need the API key to download the stems?

No — the download URLs returned by the job are public but opaque (unguessable job id) and expire after 24 hours. Fetch them within that window.

Is there a free trial?

The web app gives you a free run to judge quality. For the API, top up the smallest credit pack ($1 = 2 songs) to test end-to-end before scaling.

What about rate limits and throughput?

30 requests / 10 min per key for submission (burst guard). Jobs run on a single-GPU queue, so heavy batch throughput is sequential — contact us for dedicated capacity.

Ship stem separation into your product today

🔑 Generate an API key

$0.50/song · pay-as-you-go · studio-grade · talk to us