MeloData / Music data API
Audio features.
Start with a
track name.
Find a recording by title and artist. Get available BPM, key, energy and danceability, or work through a playlist with saved bulk jobs.
1,000 API lookups / month on Free. No credit card required.
- BPM
- 162
- Key
- Em
- Energy
- 0.80
View example JSON
{
"data": {
"isrc": "USAR10300924",
"title": "Hey Ya!",
"artist": "OutKast",
"features": {
"bpm": 162,
"key": "Em",
"energy": 0.80,
"danceability": 0.62,
"valence": null
},
"source": "essentia"
}
}Example values, not a live lookup. Actual values and coverage vary. Missing features are null.
Start with the list you have.
Resolve titles and artists to candidate recordings. Inspect match confidence before requesting features.
Put audio features to work.
Use available measurements in music apps, DJ tools and recommendation workflows.
Know what came back.
Check source and status fields. Missing values stay null, so your app can handle gaps explicitly.
Saved bulk jobs
A playlist in.
Per-track results out.
Submit a track list, follow its progress and retrieve the results. Resume your workflow without keeping one request open.
- Saved progress and individual track outcomes
- Retry failed tracks with supported retries
- Results available for seven days
1,000 bulk tracks + 25,000 API lookups, in separate monthly allowances. Up to 250 tracks per job.
Including the ones that need your attention.
Illustrative outcomes. Coverage varies by recording and source. Each submitted row counts toward the bulk allowance, including duplicates and unmatched tracks.
One HTTP API
Your language.
Structured JSON.
Bearer token authentication. Standard HTTP responses. Use your existing stack to request features by ISRC after matching a recording.
Existing results may be available immediately. Queued analysis returns 202: follow Retry-After, limit retries, and handle partial or unavailable results.
Read about data coverageconst API_KEY = process.env.MELODATA_API_KEY;
const BASE = "https://melodata.voltenworks.com/api/v1";
async function getFeatures(isrc) {
for (let attempt = 0; attempt < 4; attempt++) {
const res = await fetch(`${BASE}/tracks/${isrc}/features`, {
headers: { Authorization: `Bearer ${API_KEY}` },
signal: AbortSignal.timeout(20000),
});
if (res.status === 202) {
if (attempt === 3) throw new Error("Analysis still pending");
const delay = Number(res.headers.get("Retry-After") ?? 30);
if (!Number.isFinite(delay) || delay < 0 || delay > 120) {
throw new Error("Retry later using the Retry-After header");
}
await new Promise(resolve => setTimeout(resolve, delay * 1000));
continue;
}
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
}
}
const result = await getFeatures("USRC17607839");
// A successful response can be partial or unavailable.
console.log(result.data?.features?.bpm ?? null);
console.log(result.data?.features?.key ?? null);
Simple starting point
Try your tracks.
Choose room to grow.
Start free to check coverage. Choose Dev for larger saved bulk jobs, or Pro for more capacity and analysis webhooks.
Free
Check your tracks before you commit
25 bulk tracks / month
10 tracks / job, 1 active job
1,000 lookups / month
5 req/s, 100 req/min
- Name and artist matching
- Available audio features
- Batch lookup by ISRC
- No credit card required
Dev
Process playlists with saved bulk jobs
$160/yr billed annually
1,000 bulk tracks / month
250 tracks / job, 3 active jobs
25,000 lookups / month
10 req/s, 300 req/min
- Everything in Free
- Email support
- Saved progress and per-track results
- Retry failed bulk tracks
Pro
Run larger recurring music workflows
$664/yr billed annually
10,000 bulk tracks / month
250 tracks / job, 3 active jobs
200,000 lookups / month
25 req/s, 1,000 req/min
- Everything in Dev
- Analysis completion webhooks
- Track re-analysis
- Priority support
Scale
More capacity for larger catalogs
$2512/yr billed annually
50,000 bulk tracks / month
250 tracks / job, 3 active jobs
1,000,000 lookups / month
50 req/s, 3,000 req/min
- Everything in Pro
- Higher request throughput
- Analysis completion webhooks
- Track re-analysis
Bulk tracks and API lookups have separate monthly allowances, including on annual plans. Each submitted bulk row counts, including duplicates and unmatched tracks. Saved results last seven days; reading results and supported retries use no extra bulk units. Bulk has no overage charges.
Lookup overage is optional at $0.002 per additional lookup. Successful partial or unavailable responses can count as lookups. Audio feature coverage varies by recording and source; missing values are null. Analysis webhooks and track re-analysis require Pro or Scale.
Before you start
A few useful details.
Will every track have audio features?
No. Coverage depends on the recording and source. Results may come from archive data or preview analysis, which can describe only part of a track. Some features can be missing, and some tracks can be unavailable. Try the recordings your application needs on Free.
Do I need an ISRC to get started?
You can start with a title and artist, inspect candidate matches and their confidence, then use the recording's ISRC to request audio features. See the matching workflow.
How do bulk tracks and API lookups differ?
They have separate monthly allowances. Bulk jobs count each submitted row, including duplicates and unmatched tracks. Reading saved results and supported retries use no extra bulk units. Ordinary successful API lookups use the lookup allowance.
What happens when analysis is still running?
A queued request returns 202 without a lookup charge. Follow the Retry-After header and use bounded retries. Completion is not guaranteed. Successful partial or unavailable responses can count as lookups.
Start with the music you care about.
Check coverage with your own tracks before choosing a paid plan.