Vocal Remover API
Remove or isolate vocals from a public audio URL with the async reAPI audio endpoint.
Vocal Remover API
Use audio-stem-separator with stem: "vocals" to isolate the vocal track
from a mixed song and receive downloadable audio through the universal task
flow. Typical uses: acapellas for remixing, vocal analysis, cleaning a
reference vocal before a voice conversion pass.
Endpoint
POST /api/v1/audio/generationsPoll the returned task:
GET /api/v1/tasks/{id}Example
curl https://reapi.ai/api/v1/audio/generations \
-H "Authorization: Bearer $REAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "audio-stem-separator",
"audio_url": "https://cdn.example.com/song.wav",
"stem": "vocals",
"encoder_format": "mp3"
}'import requests
resp = requests.post(
"https://reapi.ai/api/v1/audio/generations",
headers={
"Authorization": "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
json={
"model": "audio-stem-separator",
"audio_url": "https://cdn.example.com/song.wav",
"stem": "vocals",
"encoder_format": "mp3",
},
timeout=30,
)
print(resp.json())const r = await fetch("https://reapi.ai/api/v1/audio/generations", {
method: "POST",
headers: {
Authorization: "Bearer rk_live_xxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "audio-stem-separator",
audio_url: "https://cdn.example.com/song.wav",
stem: "vocals",
encoder_format: "mp3",
}),
});
console.log(await r.json());package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]any{
"model": "audio-stem-separator",
"audio_url": "https://cdn.example.com/song.wav",
"stem": "vocals",
"encoder_format": "mp3",
})
req, _ := http.NewRequest("POST",
"https://reapi.ai/api/v1/audio/generations", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer rk_live_xxx")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
}Parameters
| Field | Type | Required | Notes |
|---|---|---|---|
model | string | yes | Use audio-stem-separator. |
audio_url | URL | yes | Public HTTP(S) source audio URL. Base64 / data: URIs are rejected platform-wide. |
stem | enum | yes | Use vocals for this API page. Other stems: drum, piano, bass, electric_guitar, acoustic_guitar, synthesizer, strings, wind. |
splitter | enum | no | auto, andromeda, perseus, orion, phoenix, lyra, or lynx. auto is omitted upstream so the default engine is used. synthesizer / strings / wind stems require phoenix. |
extraction_level | enum | no | deep_extraction or clear_cut. Defaults to deep_extraction. |
multivocal | string | no | lead_back. Only valid with stem: "vocals" — separates lead from backing vocals. |
dereverb_enabled | boolean | no | Enable dereverb cleanup. |
encoder_format | enum | no | mp3, wav, flac, aac, or ogg. |
Requests are strictly validated: unknown fields are rejected with 400
rather than ignored.
Output
Completed tasks return output.audio_urls. When labels are available,
output.tracks includes type, label, and url for each track:
{
"id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"status": "completed",
"output": {
"audio_urls": ["https://cdn.reapi.ai/.../vocals.mp3"]
}
}Billing
Audio jobs are billed per rounded-up source minute — a 2:30 source bills as 3 minutes. Failed jobs refund automatically. See the current per-minute rate on the Vocal Remover model page.
Which audio model do I need?
| Goal | Model | Docs |
|---|---|---|
| Keep the vocals, drop the music | audio-stem-separator with stem: "vocals" | this page |
| Keep the music, drop the vocals | audio-music-extractor | Music Extractor |
| Split several instruments at once | audio-multistem | Multistem Splitter |
| Denoise / de-reverb speech | audio-voice-clean | Voice Cleaner |
| Convert vocals to another voice | audio-voice-change | Voice Changer |