Changelog
API version history, new features, breaking changes, and deprecations. Subscribe to updates at hello@tunelab.dev.
✓
Breaking changes policy.
We version the API using semantic versioning. Minor versions add endpoints and fields but never remove or rename. Breaking changes are announced 90 days in advance via email and result in a new major version (/v2/).
We version the API using semantic versioning. Minor versions add endpoints and fields but never remove or rename. Breaking changes are announced 90 days in advance via email and result in a new major version (/v2/).
v1.2.0 — 2026-04-09
Added
_metaenvelope on all responses — cache status, latency, credits charged, credits remaining, and a trace ID for support tickets.GET /v1/compat/spotify/audio-features/{id}— Spotify drop-in compatibility shim. Same response schema, same field names, same scales.- Song structure endpoint:
POST /v1/structure— detects intro, verse, chorus, drop, breakdown, and outro segments with timestamps.
Changed
GET /v1/analyzenow returns integer 0–100 scales for mood dimensions (previously 0.0–1.0 floats). Native clients should migrate. The Spotify compat endpoint still returns floats to preserve Spotify's schema.
Fixed
- Rare race condition in credit deduction that could double-charge on retry when a client retried before the first response was acknowledged.
v1.1.0 — 2026-04-05
Added
- Mood heads trained on 114K tracks. New dimensions:
energy,danceability,happiness,acousticness,instrumentalness,speechiness. GET /v1/embedding/{id}— raw 768-dimensional MAEST embeddings (Pro tier and above).GET /v1/similar/{id}— hybrid similarity search via pgvector, combining embedding distance with tempo and key compatibility (Pro tier and above).
Changed
- Removed
librosadependency — 100% standalone DSP. Roughly 40% faster cold start and tighter memory footprint on bare metal.
Fixed
- Key detection confidence was systematically underestimated on short tracks (<60 s). Recalibrated against the GiantSteps dataset.
v1.0.5 — 2026-03-27
Added
- On-demand resolution cascade — cache misses now trigger lazy compute via Deezer 30-second previews, so first-ever lookups succeed instead of returning 404.
- Negative cache (
not_foundtable, 24-hour TTL) — skips re-hitting paid APIs for tracks we've already failed to resolve.
Changed
- Bare metal FastAPI now backs all sync endpoints directly, with Modal GPU overflow kicking in only on 503 from bare metal.
Fixed
- Chromaprint-based lookups now handle 96 kHz audio correctly — previously returned false negatives on high-sample-rate uploads.
v1.0.0 — 2026-03-15
Added
- Initial public launch.
-
Sync endpoints:
GET /v1/analyze,GET /v1/key-bpm,GET /v1/resolve/{id},GET /v1/beatgrid/{id},POST /v1/bpm,POST /v1/key,POST /v1/lufs,POST /v1/analyze/upload. -
Async endpoints (202 → poll or webhook):
POST /v1/separate,POST /v1/transcribe,POST /v1/master. - Five-layer D1 cache: file hash, chromaprint, ISRC, Apple ID, normalized metadata.
- Credit-based billing with Free, Starter, Pro, Scale, and Enterprise tiers.
- Test (
tl_test_*) and live (tl_live_*) API keys. - 9.3M track identity database for instant cross-platform resolution.