MuteMic REST API
Integrate vocal-free music directly into your content pipeline.
Search, filter, and download tracks programmatically.
Quick Start
Get a random ambient track as MP3 in one request:
curl -H "X-Api-Key: mm_your_key_here" \ "https://mutemic.com/api/v1/tracks/download?genre=ambient&format=mp3" \ -o track.mp3
Or get a lo-fi track between 70-90 BPM as WAV:
curl -H "X-Api-Key: mm_your_key_here" \ "https://mutemic.com/api/v1/tracks/download?genre=lo-fi&bpm_min=70&bpm_max=90&format=wav" \ -o track.wav
Authentication
Pass your API key via header (recommended) or query parameter:
# Header (recommended) curl -H "X-Api-Key: mm_your_key_here" https://mutemic.com/api/v1/tracks # Query parameter curl "https://mutemic.com/api/v1/tracks?api_key=mm_your_key_here"
Your API key is in your Dashboard. Keep it secret — it grants download access to your account.
Plan Access
| Feature | Pro ($15/mo) | Studio ($25/mo) |
|---|---|---|
| Search & browse tracks | ✓ | ✓ |
| Track metadata & previews | ✓ | ✓ |
| Download MP3 (320kbps) | ✗ | ✓ |
| Download WAV (24-bit/48kHz) | ✗ | ✓ |
| Download by filters (random) | ✗ | ✓ |
| API rate limit | 1,000 req/day | 1,000 req/day |
| Download limit | — | 100 tracks/day |
Audio Formats
| Format | Quality | Sample Rate | Channels | Typical Size |
|---|---|---|---|---|
| mp3 | 320 kbps CBR | 48 kHz | Stereo | ~7 MB / 3 min |
| wav | 24-bit PCM | 48 kHz | Stereo | ~50 MB / 3 min |
All tracks are mastered to -15 LUFS / -1 dBTP, voice-over safe, and loopable.
Endpoints
⭐ Download by Filters (Random Match)
Returns a random track file matching your filters. Perfect for automated pipelines — each request delivers a different track. Studio plan only.
| Parameter | Type | Description |
|---|---|---|
| format | string | Required. mp3 (320kbps) or wav (24-bit) |
| genre | string | Genre slug: ambient, lo-fi, electronic, cinematic, etc. |
| mood | string | Mood slug: chill, epic, dark, energetic, etc. |
| bpm_min | int | Minimum BPM (e.g., 70) |
| bpm_max | int | Maximum BPM (e.g., 120) |
| energy_min | int | Minimum energy 0-100 (e.g., 30) |
| energy_max | int | Maximum energy 0-100 (e.g., 70) |
| key | string | Musical key: C, Am, F#m, etc. |
| dur_min | int | Minimum duration in seconds |
| dur_max | int | Maximum duration in seconds |
| q | string | Full-text search (title, artist, tags) |
Response: Audio file with metadata in HTTP headers:
HTTP/1.1 200 OK Content-Type: audio/mpeg Content-Disposition: attachment; filename="Aethel Rune - Obsidian Excavation.mp3" X-Track-UUID: dfff355f-b0f9-00fc-d8a4-e3f158ba98b4 X-Track-Title: Obsidian Excavation X-Track-Artist: Aethel Rune X-Track-BPM: 85 X-Track-Key: Am X-Track-Duration: 236 X-Track-ISRC: DGA0W26000042 X-Format: MP3 320kbps / 48kHz / Stereo X-Downloads-Today: 3 X-Downloads-Remaining: 97
Examples:
# Ambient MP3 for YouTube background curl -H "X-Api-Key: KEY" \ "https://mutemic.com/api/v1/tracks/download?genre=ambient&format=mp3" -o bg.mp3 # Chill lo-fi WAV, 70-90 BPM for podcast curl -H "X-Api-Key: KEY" \ "https://mutemic.com/api/v1/tracks/download?genre=lo-fi&mood=chill&bpm_min=70&bpm_max=90&format=wav" -o pod.wav # High-energy electronic for gaming video curl -H "X-Api-Key: KEY" \ "https://mutemic.com/api/v1/tracks/download?genre=electronic&energy_min=70&format=mp3" -o game.mp3 # Cinematic in A minor for film curl -H "X-Api-Key: KEY" \ "https://mutemic.com/api/v1/tracks/download?genre=cinematic&key=Am&format=wav" -o film.wav # Any track under 2 minutes for Shorts/Reels curl -H "X-Api-Key: KEY" \ "https://mutemic.com/api/v1/tracks/download?dur_max=120&format=mp3" -o short.mp3
Download Specific Track
Download a specific track by UUID. Studio plan only.
curl -H "X-Api-Key: KEY" \ "https://mutemic.com/api/v1/tracks/dfff355f-b0f9-00fc-d8a4-e3f158ba98b4/download?format=wav" \ -o track.wav
Search Tracks
Search and filter tracks. Returns metadata (no audio). Available on Pro and Studio plans.
| Parameter | Type | Description |
|---|---|---|
| q | string | Full-text search query |
| genre | string | Genre slug |
| mood | string | Mood slug |
| bpm_min / bpm_max | int | BPM range |
| energy_min / energy_max | int | Energy range (0-100) |
| key | string | Musical key |
| dur_min / dur_max | int | Duration range (seconds) |
| sort | string | newest | popular | title | bpm | random |
| page | int | Page number (default: 1) |
| per_page | int | Results per page (1-100, default: 50) |
Response:
{
"data": [
{
"uuid": "dfff355f-b0f9-00fc-d8a4-e3f158ba98b4",
"title": "Obsidian Excavation",
"artist": "Aethel Rune",
"bpm": 85,
"duration": 236,
"duration_fmt": "3:56",
"key": "Am",
"energy": 25,
"genres": ["ambient"],
"moods": ["chill", "dreamy"],
"formats": {
"mp3": {"quality": "320kbps", "sample_rate": "48kHz", "channels": "Stereo"},
"wav": {"quality": "24-bit", "sample_rate": "48kHz", "channels": "Stereo"}
},
"cover_url": "https://mutemic.com/covers/dfff..._lg.jpg",
"preview_url": "https://mutemic.com/stream/preview/dfff...",
"download_url": "https://mutemic.com/api/v1/tracks/dfff.../download",
"web_url": "https://mutemic.com/track/dfff..."
}
],
"pagination": {"page": 1, "pages": 42, "total": 2087, "per_page": 50}
}
Random Track (Metadata)
Get metadata for a random track matching filters. Same filter params as /tracks. Returns JSON (no file).
curl -H "X-Api-Key: KEY" \ "https://mutemic.com/api/v1/tracks/random?genre=jazz&mood=chill"
List Genres
curl -H "X-Api-Key: KEY" "https://mutemic.com/api/v1/genres"
# Response:
{"data": [
{"slug": "ambient", "name": "Ambient"},
{"slug": "lo-fi", "name": "Lo-Fi"},
{"slug": "electronic", "name": "Electronic"},
{"slug": "cinematic", "name": "Cinematic"},
...
]}
List Moods
curl -H "X-Api-Key: KEY" "https://mutemic.com/api/v1/moods"
Account Stats
curl -H "X-Api-Key: KEY" "https://mutemic.com/api/v1/stats"
# Response:
{
"plan": "studio",
"downloads_today": 12,
"downloads_limit": 100,
"downloads_remaining": 88,
"api_calls_today": 47,
"api_calls_limit": 1000,
"formats_available": ["mp3", "wav"]
}
Rate Limits
| Limit | Value | Reset |
|---|---|---|
| API requests | 1000 / day | Midnight UTC |
| Downloads (Studio) | 100 / day | Midnight UTC |
Rate limit info is included in response headers:
X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 953 X-Plan: studio X-Downloads-Today: 12 X-Downloads-Remaining: 88
Error Responses
{
"error": true,
"code": 429,
"message": "Daily download limit reached (100/day). Resets at midnight UTC."
}
| Code | Meaning |
|---|---|
| 400 | Invalid parameter (bad format, etc.) |
| 401 | Missing or invalid API key |
| 403 | Plan doesn't support this feature |
| 404 | No tracks match filters / track not found |
| 429 | Rate limit or download limit exceeded |
| 500 | Server error (contact support) |
Available Genres
acoustic
afrobeat
ambient
blues
bossanova
celtic
chillhop
chillwave
cinematic
classical
corporate
country
documentary
downtempo
drill
dnb
edm
electronic
folk
funk
gaming
hip-hop
house
indie
jazz
latin
lo-fi
meditation
metal
motivational
orchestral
piano
pop
postrock
r-n-b
reggae
reggaeton
rock
soul
storytelling
suspense
synthwave
techno
trance
trap
uplifting
world
Available Moods
aggressive
chill
dark
dreamy
energetic
epic
happy
minimal
mysterious
romantic
sad
uplifting
Pipeline Integration Examples
Python
import requests
API_KEY = "mm_your_key_here"
BASE = "https://mutemic.com/api/v1"
# Download random ambient MP3
r = requests.get(f"{BASE}/tracks/download", headers={"X-Api-Key": API_KEY}, params={
"genre": "ambient",
"bpm_min": 70,
"bpm_max": 110,
"format": "mp3"
})
if r.status_code == 200:
title = r.headers.get("X-Track-Title", "track")
artist = r.headers.get("X-Track-Artist", "unknown")
with open(f"{artist} - {title}.mp3", "wb") as f:
f.write(r.content)
print(f"Downloaded: {artist} - {title}")
print(f"BPM: {r.headers['X-Track-BPM']}, Key: {r.headers['X-Track-Key']}")
print(f"Remaining: {r.headers['X-Downloads-Remaining']}")
else:
print(f"Error {r.status_code}: {r.json()['message']}")
Bash (batch download)
#!/bin/bash
# Download 10 different chill lo-fi tracks
API_KEY="mm_your_key_here"
for i in $(seq 1 10); do
curl -sS -H "X-Api-Key: $API_KEY" \
"https://mutemic.com/api/v1/tracks/download?genre=lo-fi&mood=chill&format=mp3" \
-o "lofi_track_${i}.mp3" \
-D /dev/stderr 2>&1 | grep "X-Track-Title"
sleep 1 # Be nice to the API
done
Node.js
const fetch = require('node-fetch');
const fs = require('fs');
const API_KEY = 'mm_your_key_here';
async function downloadTrack(genre, format = 'mp3') {
const url = `https://mutemic.com/api/v1/tracks/download?genre=${genre}&format=${format}`;
const res = await fetch(url, { headers: { 'X-Api-Key': API_KEY } });
if (!res.ok) {
const err = await res.json();
throw new Error(err.message);
}
const title = res.headers.get('X-Track-Title');
const artist = res.headers.get('X-Track-Artist');
const buffer = await res.buffer();
fs.writeFileSync(`${artist} - ${title}.${format}`, buffer);
console.log(`Downloaded: ${artist} - ${title} (${res.headers.get('X-Format')})`);
}
downloadTrack('cinematic', 'wav');