everysong API.
Partner-tier API for audio similarity matching. POST an audio file, get back a 13-trait fingerprint and 20 ranked Creative-Commons matches. JSON in, JSON out. Bearer-token auth. Same engine that runs the consumer site at everysong.app, available against the public CC catalogue or a custom catalogue you bring.
Quick start
Once you have an API key (see pricing below: early-access while ingestion pipeline finishes, $99 to $2,499 lifetime), every call uses the same auth header:
curl -X POST https://everysong-api.fly.dev/api/v1/match \ -H "Authorization: Bearer es_live_YOUR_KEY_HERE" \ -F "file=@reference-track.mp3"
Sanity-check your key first:
curl https://everysong-api.fly.dev/api/v1/me \ -H "Authorization: Bearer es_live_YOUR_KEY_HERE"
That returns your label, scopes, daily limit, and usage today. If the key is valid and active, you're ready.
Authentication
Every request to /api/v1/* requires an Authorization header:
Authorization: Bearer es_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API keys are currently early-access: email partnerships@everysong.app for a key issued by hand within 48 hours, purchase price grandfathered when self-serve goes live. Three lifetime tiers planned: $99 (Hobby, 1k/day), $999 (Studio, 10k/day), $2,499 (Production, 30k/day). Anything above 30k/day = Custom tier with dedicated infrastructure. Pricing detail is below.
Raw keys are shown once at issue time. The server only stores a SHA-256 hash. If you lose the key, email partnerships and we'll mint a fresh one + revoke the old same-day. If you suspect a key has leaked, email immediately and we'll revoke within minutes.
Endpoints
Request
multipart/form-data with a file field. Max 30 MB. Supported formats: MP3, WAV, FLAC, M4A, OGG.
curl -X POST https://everysong-api.fly.dev/api/v1/match \ -H "Authorization: Bearer es_live_YOUR_KEY_HERE" \ -F "file=@reference-track.mp3"
Response (200)
{
"fingerprint": {
"duration_sec": 215.4,
"traits": {
"tempo_bpm": 128,
"key": "Em",
"mode": "minor",
"loudness_lufs": -8.2,
"energy": 0.78,
"valence": 0.55,
"danceability": 0.88,
"acousticness": 0.05,
"instrumentalness": 0.92,
"spectral_centroid_hz": 2950,
"spectral_rolloff_hz": 9200,
"stereo_width": 0.32,
"zero_crossing_rate": 2400,
"vocal_instrumental": "instrumental"
},
"reliability": {
"green": ["tempo_bpm", "key", "mode", "loudness_lufs",
"spectral_centroid_hz", "spectral_rolloff_hz",
"stereo_width", "zero_crossing_rate", "vocal_instrumental"],
"amber": ["energy", "valence", "danceability",
"acousticness", "instrumentalness"]
}
},
"matches": [
{
"rank": 1,
"title": "Track Name",
"artist": "Artist Name",
"license": "CC BY 4.0",
"source_url": "https://freemusicarchive.org/...",
"preview_url": "https://files.freemusicarchive.org/...",
"duration_sec": 198.2,
"distance": 0.0823
}
/* + 19 more */
],
"request": {
"id": "req_a1b2c3d4e5f60718",
"duration_ms": 11240
}
}
Trait reliability
Eight GREEN traits are signal-processing measurements with decades of established research. Trust them for downstream decisions.
Five AMBER traits are ML-classifier outputs. Use as a directional second opinion. We do not publish accuracy numbers we have not benchmarked; see how it works for the full methodology.
Response (200)
{
"name": "everysong public CC catalogue",
"track_count": 3382,
"sources": ["Free Music Archive", "ccMixter", "Jamendo"],
"licenses": ["CC0", "CC BY 4.0", "CC BY-SA 4.0"],
"excluded_licenses": ["CC BY-NC", "CC BY-NC-SA",
"CC BY-ND", "CC BY-NC-ND"],
"notes": "Custom catalogue ingest (bring your own tracks, dedicated
index, private to your key) is available via partnership
engagement: partnerships@everysong.app."
}
If your key is provisioned against a custom catalogue (private to you, ingested per partnership), this endpoint returns metadata for that catalogue instead.
Response (200)
{
"label": "Epidemic Sound evaluation",
"partner_email": "evaluator@example.com",
"scopes": ["match.read", "catalogue.read"],
"rate_limit": {
"daily": 1000,
"used_today": 12,
"remaining_today": 988
},
"lifetime_usage": 47,
"created_at": "2026-05-26 14:00:00",
"last_used_at": "2026-05-26 15:42:33"
}
Response (200)
{
"daily": [
{ "date": "2026-05-12", "count": 14 },
{ "date": "2026-05-13", "count": 22 },
{ "date": "2026-05-14", "count": 9 }
],
"window_days": 30
}
Days with zero calls are omitted; the dashboard fills the gaps client-side.
Pricing & rate limits
Self-serve API purchases are temporarily paused while we finish the custom-catalogue ingestion pipeline. The pricing below is the launch plan. Email partnerships@everysong.app for an early-access key: issued by hand within 48 hours, purchase price grandfathered.
Three lifetime tiers against the public CC catalogue, all one-time lifetime (no subscription, ever). Once self-serve goes live, payment is via Stripe and the key is minted within ~5 seconds.
| Tier | Daily limit | Price (lifetime) | Typical use | Status |
|---|---|---|---|---|
| Hobby | 1,000 calls/day | $99 once | Solo indie projects, evaluation | Join early access |
| Studio | 10,000 calls/day | $999 once | Production integrations at small/mid scale. 48h support SLA. $999 BYOC credit if you upgrade. | Join early access |
| Production | 30,000 calls/day | $2,499 once | Real-platform traffic. 48h support SLA. $2,499 BYOC credit if you upgrade. | Join early access |
| Custom | 30k+/day, custom catalogue, on-premise | Negotiated | Dedicated infrastructure, white-label, BYOC, SLA contracts | Email partnerships |
Limits are per-key, reset at 00:00 UTC. Exceeding your daily limit returns 429 with a clear error message and the time the limit resets. We do not throttle silently or surprise-bill for overage. Need a one-off bump for a launch week? Email partnerships.
Error envelope
All errors return a consistent JSON shape with the appropriate HTTP status code:
{
"error": {
"code": "invalid_api_key",
"message": "API key is missing, malformed, or revoked. ...",
"status": 401
}
}
| HTTP | Code | When |
|---|---|---|
| 400 | invalid_audio_file |
File missing, empty, or could not be decoded. |
| 401 | missing_authorization |
Authorization header is missing. |
| 401 | invalid_api_key |
Key is malformed, unknown, or revoked. |
| 413 | file_too_large |
Audio file exceeds 30 MB. |
| 429 | daily_rate_limit_exceeded |
Daily request quota used up. Resets at 00:00 UTC. |
| 500 | engine_error |
Audio embedding or signal-extraction failed unexpectedly. Retry once; if persistent, email support. |
Latency expectations
Audio analysis is compute-bound. On a warm machine (a Cloudflare Worker cron keeps the Fly instance warm 24/7), expect POST /api/v1/match to return within 10-15 seconds for a 3-5 minute track. The CLAP embedding step is the bottleneck.
The first request after a long idle period may take 30-60 seconds while the audio model loads from disk. We mitigate this with the warmer cron, so in practice this only affects requests during platform restarts.
For predictably-low latency at scale (under 2 seconds per match), the production tier runs on dedicated GPU infrastructure; ask partnerships@everysong.app for the specifics.
Custom catalogue ingest
The public API matches against the everysong CC catalogue (3,382 tracks). For partnerships that want to match against their own catalogue (their label's roster, their stock library, their indie streaming catalogue), we ingest and index separately:
- Audio file (any common format) or streaming URL per track
- librosa extracts ~30 signal features (~5 sec per track on a single CPU)
- CLAP generates the 512-dim embedding (~10 sec per CPU, ~1 sec per GPU)
- Indexed in your dedicated environment, isolated from the public catalogue
Order of magnitude: a 50,000-track catalogue indexes in ~14 hours on a single GPU. Subsequent adds are under 30 seconds per track.
Catalogue isolation is by architecture: separate database, separate process, separate trait vectors. Your audio never co-mingles with anyone else's.
Confidentiality and data handling
- Uploaded audio is deleted within ~30 seconds of analysis. Only the 13-trait values, the 512-dim embedding, and the request metadata (timestamp, key ID) are retained in logs.
- No catalogue audio leaves your environment. Custom catalogues stay on your dedicated index. The public CC catalogue stays on ours.
- EU-based, GDPR-shaped. Default hosting region is Fly's Amsterdam. Data Processing Agreement available on request.
- No third-party analytics on the API. No marketing pixels, no telemetry beyond what's needed to enforce rate limits and bill.
Versioning
The current major version is v1. Breaking changes will go to /api/v2; we will not change /api/v1 shapes without 90 days' notice. Bug-fix and additive changes (new optional fields, new endpoints, new trait additions) ship to v1 without notice; existing fields and endpoints stay stable.
Email partnerships@everysong.app with a short note covering: what you want to use it for, expected request volume, and whether you want the public CC catalogue or a custom one ingested. Replies within 48 hours (Netherlands timezone, CET/CEST).
partnerships@everysong.appSee also
- Studio dashboard: paste your key to see live usage, rate-limit status, the past 30 days of call volume, and the catalogue you match against.
- For studios, labels, and platforms: pricing bands, partnership models, and honest constraints.
- How the engine works: the 5-hop pipeline, the 13 audio traits, GREEN vs AMBER reliability.
- About everysong: who built it, brand promises, infrastructure stack.
- The consumer site: $5 indie demo of the same engine.