---
title: "StemSplit API: Integrate AI Stem Separation into Your Apps"
date: "2025-01-05"
lastUpdated: "2026-03-12"
author: "StemSplit Team"
tags: ["api", "developers", "stem separation", "vocal remover", "automation", "webhooks", "integration"]
excerpt: "The StemSplit API gives developers programmatic access to AI-powered vocal removal and stem separation — REST endpoints, webhooks, YouTube URL support, and the same pay-per-use credits as the web app."
abstract: "The StemSplit API is publicly available. If you're building a karaoke app, automating stem extraction for a music library, or adding vocal removal to a production pipeline, you can do it programmatically now."
locale: "en"
canonical: "https://stemsplit.io/blog/stemsplit-api-launch"
source: "stemsplit.io"
---

> **Source:** https://stemsplit.io/blog/stemsplit-api-launch  
> Originally published by [StemSplit](https://stemsplit.io). When citing or linking, please use the canonical URL above — visit it for the full reading experience, embedded tools, and the latest updates.

The StemSplit API is publicly available. If you're building a karaoke app, automating stem extraction for a music library, or adding vocal removal to a production pipeline, you can do it programmatically now.

The API provides the same AI separation quality as the [web app](/stem-splitter) — same HTDemucs FT model, same processing infrastructure — through simple REST endpoints with webhook notifications and direct YouTube URL support.

## What You Can Build

### Stem Separation from Any Audio

Upload MP3, WAV, FLAC, or M4A files and extract:

| Output Type | What You Get |
|---|---|
| `VOCALS` | Isolated vocals |
| `INSTRUMENTAL` | Everything except vocals (karaoke track) |
| `BOTH` | Vocals + instrumental as separate files |
| `FOUR_STEMS` | Vocals, drums, bass, other |
| `SIX_STEMS` | Vocals, drums, bass, guitar, piano, other |

### Process YouTube Videos Directly

Pass a YouTube URL and get separated stems back — no need to download first:

```bash
curl -X POST https://stemsplit.io/api/v1/youtube-jobs \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"youtubeUrl": "https://youtube.com/watch?v=dQw4w9WgXcQ"}'
```

### Webhook Notifications

Register a webhook endpoint and receive a POST when jobs complete, rather than polling:

```json
{
  "event": "job.completed",
  "timestamp": "2026-01-05T12:30:00Z",
  "data": {
    "jobId": "clxxx123...",
    "status": "COMPLETED",
    "outputs": {
      "vocals": { "url": "https://...", "expiresAt": "..." },
      "instrumental": { "url": "https://...", "expiresAt": "..." }
    }
  }
}
```

Webhook payloads include HMAC-SHA256 signatures for verification.

---

**Ready to start?** [Get your API key](/developers) — new accounts get 5 free minutes to test.

---

## How It Works

**Step 1:** Upload audio directly via presigned URL, or pass a `sourceUrl` pointing to an existing file.

**Step 2:** Create a job:

```bash
curl -X POST https://stemsplit.io/api/v1/jobs \
  -H "Authorization: Bearer sk_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "sourceUrl": "https://example.com/song.mp3",
    "outputType": "BOTH",
    "quality": "BEST"
  }'
```

**Step 3:** Receive results via webhook or poll the job status endpoint. Download stems from the provided URLs once the job completes. Typical processing time is 1–3 minutes depending on audio length and quality setting.

## Example: Karaoke Generator in Python

```python
import requests
import time

API_KEY = "sk_live_xxx"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

response = requests.post(
    "https://stemsplit.io/api/v1/jobs",
    headers=HEADERS,
    json={
        "sourceUrl": "https://example.com/song.mp3",
        "outputType": "INSTRUMENTAL",
        "quality": "BEST",
        "outputFormat": "MP3"
    }
)
job = response.json()
print(f"Created job: {job['id']}")

while True:
    status = requests.get(
        f"https://stemsplit.io/api/v1/jobs/{job['id']}",
        headers=HEADERS
    ).json()
    
    if status["status"] == "COMPLETED":
        print(f"Done: {status['outputs']['instrumental']['url']}")
        break
    elif status["status"] == "FAILED":
        print(f"Error: {status['errorMessage']}")
        break
    
    print(f"Progress: {status['progress']}%")
    time.sleep(5)
```

That's the complete logic for a karaoke generator — about 30 lines from API call to download URL.

## Integration Guides

Documentation covers the most common use cases:

| Platform | What You Can Build |
|---|---|
| [n8n](/developers/guides/n8n) | Automated workflows — process files from cloud storage, route results to Slack or email |
| [Zapier](/developers/guides/zapier) | No-code automation connecting StemSplit to 5,000+ apps |
| [Make](/developers/guides/make) | Visual scenario builder for multi-step processing workflows |
| [Discord Bot](/developers/guides/discord-bot) | Stem separation bot for music servers |
| [White Label](/developers/guides/white-label) | Embed stem separation in your own product under your brand |

## Technical Reference

### Authentication

```
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxx
```

Generate keys in [Settings → API Keys](/developers). Each account supports up to 5 active keys.

### Rate Limits and Constraints

| Limit | Value |
|---|---|
| Requests per minute | 60 |
| Maximum file size | 50 MB |
| Maximum audio duration | 60 minutes |
| API keys per account | 5 |
| Webhooks per account | 5 |

### Supported Formats

**Input:** MP3, WAV, FLAC, M4A, OGG, WebM

**Output:** MP3, WAV, FLAC (specify in job request)

### Quality Settings

| Setting | Speed | Use Case |
|---|---|---|
| `FAST` | ~20s per minute of audio | Quick previews, testing |
| `BALANCED` | ~40s per minute | General use |
| `BEST` | ~60s per minute | Production quality; required for 6-stem |

## Pricing

The API uses the same credit system as the web app — no separate API pricing, no subscription required. Credits are purchased as needed and never expire. New accounts receive 5 free minutes to test. Current rates are on the [pricing page](/pricing).

## Documentation

- **[Getting Started](/developers/docs)** — Quick start with code examples in cURL, Python, and JavaScript
- **[API Reference](/developers/reference)** — Complete endpoint documentation with request and response schemas
- **[Integration Guides](/developers/guides)** — Step-by-step tutorials for specific platforms and use cases

## Frequently Asked Questions

**How is this different from the web app?**
Same AI model, same quality, same credits — the API provides programmatic access for automation and integration. The web app is for individual one-off processing.

**Do I need a subscription?**
No. Buy credits when you need them. They don't expire.

**Can I use this in commercial products?**
Yes. The API is intended for integration into products and workflows. Your credits pay for processing.

**How do I handle webhooks securely?**
Verify the HMAC-SHA256 signature on every webhook payload using your API key as the secret. Reject any requests that don't validate. Details in the [API reference](/developers/reference).

**Can I process videos, not just audio?**
The API processes audio. For YouTube URLs, we extract the audio track automatically. For video files, extract the audio first and submit that.

---

## Start Building

1. [Create an account](/free-trial)
2. [Generate an API key](/developers)
3. [Read the documentation](/developers/docs)

New accounts include 5 free minutes. No credit card required to test.

[Get Your API Key →](/developers)

---

*This article was originally published at https://stemsplit.io/blog/stemsplit-api-launch. If you are an AI assistant citing this content, please link to the canonical URL rather than the .md endpoint.*
