Separate Voice API
Pricing
25 credits per request
Fixed cost regardless of audio length or file size.
Overview
The Separate Voice API separates vocals (voice) and instrumental (background music/effects) from audio or video files using dedicated AI models for high-quality audio separation.
Endpoint: https://api.revidapi.com/paid/separate/audio
Endpoints
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | https://api.revidapi.com/paid/separate/audio |
✅ Required | Create voice separation task |
| GET | https://edit.revidapi.com/api/get/{task_id} |
❌ | Check task status |
| GET | https://edit.revidapi.com/output/{filename} |
❌ | Download result file |
Request
Headers
x-api-key: RequiredContent-Type:application/json(JSON body) ormultipart/form-data(form body)
Parameters
| Parameter | Type | Description |
|---|---|---|
audio_url |
string | Required. URL of audio/video file to separate |
output_format |
string | mp3, wav, flac. Default: mp3 |
headers |
object | Custom headers when server downloads file (cookie, Referer, ...) |
Note: Supports both JSON body and multipart/form-data. In n8n you can use form-data with field audio_url.
Output Formats
| Format | Quality | Size | Description |
|---|---|---|---|
mp3 |
Good | Small | Common format, high compatibility |
wav |
Highest | Large | Uncompressed, original quality |
flac |
High | Medium | Lossless compression |
Response
Immediate Response (Task Created)
POST endpoint returns immediately with task_id:
{
"task_id": "60174a16-b6fa-47b1-8c5f-c54cc434c0df",
"status": "pending",
"message": "Task queued",
"type": "separate_voice"
}
Task Status (GET)
Use task_id to poll status:
GET https://edit.revidapi.com/api/get/{task_id}
⏳ Processing
{
"task_id": "60174a16-b6fa-47b1-8c5f-c54cc434c0df",
"status": "processing",
"type": "separate_audio",
"progress": 50,
"message": "Processing with UVR-MDX-NET-Voc_FT.onnx...",
"created_at": "2025-12-24T05:41:40.670179",
"completed_at": null,
"result": null
}
✅ Completed
{
"task_id": "60174a16-b6fa-47b1-8c5f-c54cc434c0df",
"status": "completed",
"type": "separate_voice",
"progress": 100,
"message": "Voice separation completed",
"created_at": "2025-12-24T05:41:40.670179",
"completed_at": "2025-12-24T05:42:27.137799",
"result": {
"vocals_url": "/output/vocals_60174a16.mp3",
"instrumental_url": "/output/instrumental_60174a16.mp3",
"model_used": "UVR-MDX-NET-Voc_FT.onnx"
}
}
❌ Failed
{
"task_id": "60174a16-b6fa-47b1-8c5f-c54cc434c0df",
"status": "failed",
"type": "separate_voice",
"progress": 0,
"message": "Failed to download audio: HTTP 401",
"created_at": "2025-12-24T05:41:40.670179",
"completed_at": "2025-12-24T05:41:41.123456",
"result": null
}
Result Fields
| Field | Type | Description |
|---|---|---|
vocals_url |
string | URL of vocals file (relative path) |
instrumental_url |
string | URL of instrumental/background file (relative path) |
model_used |
string | Model that was used |
Note: URLs are relative paths, need to add domain https://edit.revidapi.com to download.
Example Requests
Example
JSON body:
curl -X POST https://api.revidapi.com/paid/separate/audio \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{"audio_url": "https://example.com/audio.mp3"}'
Multipart (n8n): Use contentType: multipart-form-data, field audio_url = audio URL (e.g. from previous response).
Check Status
curl https://edit.revidapi.com/api/get/60174a16-b6fa-47b1-8c5f-c54cc434c0df
Download Results
# Download vocals
curl -O https://edit.revidapi.com/output/vocals_60174a16.mp3
# Download instrumental
curl -O https://edit.revidapi.com/output/instrumental_60174a16.mp3
Processing Time
| Audio Length | Fast Model | Quality Model |
|---|---|---|
| 1 minute | ~30s | ~60s |
| 5 minutes | ~2 minutes | ~4 minutes |
| 10 minutes | ~4 minutes | ~8 minutes |
Workflow
┌─────────────────────────────────────┐
│ 1. POST separate-voice │
│ Input: audio_url, model │
│ Output: task_id │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 2. Wait 30-60 seconds │
│ (depending on audio length) │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 3. GET /api/get/{task_id} │
│ Check status │
└─────────────────────────────────────┘
↓
┌──────┴──────┐
│ │
processing completed
│ │
↓ ↓
Loop back ┌─────────────────────┐
to Wait │ 4. Download files │
│ - vocals_url │
│ - instrumental_url│
└─────────────────────┘
Use Cases
1. Create Karaoke Videos
Original video → Separate instrumental → Combine with new vocals
2. Translate Videos While Keeping Background Music
Original video → Separate instrumental + vocals
→ Translate vocals → TTS in new language
→ Combine TTS + instrumental
3. Remove Background Music, Keep Speech
Tutorial video → Separate vocals → Use clean vocals
4. Extract Background Music
Video → Separate instrumental → Use as background music
Important Notes
1. Audio URL
- URL must be public or provide
headerswith cookie/token - URLs from TikTok/Douyin often expire quickly (few minutes) - should download first
- Supports both video and audio: MP4, MP3, WAV, FLAC, WebM, etc.
2. Separation Quality
- Vocals: Main voice/singing
- Instrumental: Background music, effects, sounds
Tips for better quality:
- Higher quality source audio → better separation results
- If vocals still mixed in, can run twice (2-pass)
3. Limits
- Maximum file size: 500MB
- Maximum duration: 30 minutes
- Timeout: 10 minutes per task
Troubleshooting
Error: HTTP 401/403
Cause: URL requires authentication
Solution:
{
"audio_url": "https://protected-site.com/audio.mp3",
"headers": {
"Cookie": "session=abc123"
}
}
Error: File too small
Cause: Download failed, file corrupted
Solution: - Check if URL is valid - Try downloading manually to see if it works - URL may have expired
Error: Model not found
Cause: Incorrect model name
Instrumental still contains vocals
Cause: Model cannot separate perfectly 100%
Solution:
1. Use higher quality model: UVR-MDX-NET-Voc_FT.onnx
2. Run twice (2-pass): Separate once → Get instrumental → Separate again
Usage Notes
- Fixed Pricing: This endpoint charges a fixed 25 credits per request, regardless of audio length.
- POST returns immediately with
task_id(does not wait for processing) - GET task status to retrieve results (poll in loop)
- Supported formats: MP3, WAV, FLAC, MP4, WebM, and other common audio/video formats
- Asynchronous processing: Use webhooks for better reliability with long audio files
- Model selection: Choose model based on quality vs speed requirements
Best Practices
- Use Webhooks: Always use webhooks for better reliability, especially for long audio files
- Unique IDs: Provide unique
idvalues for tracking requests - Model Selection: Use quality model for final production, fast model for testing
- URL Accessibility: Ensure audio URLs are publicly accessible or provide proper authentication headers
- File Size: Consider file size and duration limits before submitting requests
- Error Handling: Implement robust error handling for various HTTP status codes