Changelog
API version history, new features, breaking changes, and deprecations. Subscribe to updates at hello@brizm.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/).
v2.0.1 — Measurement accuracy (2026-09-10)
Four corrections in the shared analysis engine. No endpoint, field or schema changes — only values. If you pin analysis values in tests or compare them against results computed earlier, read the shifts below.
Fixed
- Tempo octave errors.
tempo(andbpmon/v1/bpmand/v1/key-bpm) could report double the real tempo — 240 where the track runs at 120 — on material where the beat model locks onto eighth notes rather than the quarter-note pulse. The octave correction now always runs. Tracks without a subdivided pulse are unaffected: our four reference tracks return byte-identical values. - The beat grid follows the corrected tempo. On those same tracks
GET /v1/beatgrid/{id}returned beats at the subdivided rate — a 12-second clip at 120 BPM came back as 47 beats spaced 0.25 s apart.beatsanddownbeatsnow sit on the corrected tempo, so on affected tracks the beat count halves, downbeat spacing doubles, and the grid'stempoagrees with/v1/bpm. Genuine double-time material reports the half-time grid, matching the tempo value it always returned. - True peak never reads below sample peak.
true_peak_dbtpcould come back up to 0.21 dB below the file's own sample peak when the loudest point was a single sample — drums and other transient material. True peak is now floored at the sample peak, as ITU-R BS.1770-4 requires, so those readings rise by up to 0.21 dB. Sustained material is unchanged. Mastering output limited to a true-peak ceiling no longer overshoots it by the same amount. - Async results carrying non-finite numbers. A job whose result contained a non-finite number — the integrated loudness of a silent file, for one — produced a callback body that was not valid JSON and could not be delivered, after the analysis had already succeeded. Those values are now delivered as
null.
Changed
- Loudness is EBU Tech 3341 compliant. Released 2026-07-22; recorded here late. The K-weighting pre-filter now uses the exact ITU-R BS.1770-4 design, and the meter passes EBU Tech 3341 cases 1–3 and Tech 3342 within tolerance.
loudness,loudness_lufsandlraread slightly lower: broadband music by at most 0.05 LU, tonal or mid-heavy material by up to about 0.29 LU, while low-frequency-dominant tonal content reads up to 0.03 LU higher. Use a 0.3 LU tolerance when comparing values computed on either side of that date.
Note on cached results
- Analyses already stored in our cache keep the values they were computed with; this release changes new analyses. Contact hello@brizm.dev if you need specific tracks recomputed.
v2.0 — Route atomicity (2026-04-17)
Changed
- Replaced legacy
/v1/compat/spotify/audio-features*routes with canonical/v1/audio-features*+?format=spotifyopt-out. The Spotify-shaped response is now served from the canonical URL via a query parameter instead of a parallel route. - Replaced legacy
/v1/analyze*routes with canonical/v1/audio-features*. Handlers are unchanged — purely a URL rename per Brizm's "leader not shim" URL discipline.
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.