Live in production today

Measure what’s certain. Flag what isn’t.

Send a track and get the same loudness, peak, and spectral readings every run, plus tempo and key estimates that come with a confidence score. We delete your source once the report is written, and sign the webhook that says it landed.

  • Upload straight from the browser
  • A JSON report you keep
  • Signed webhook when it lands
€0
free to try
€19
Starter / month
EU
data stays in Helsinki
Open this report in full
Running onHetzner HelsinkiCloudflare R2Stripe billingFastAPI + CelerySigned webhooks

What you can point at

Everything here maps to something the API returns

No staged screenshots. The contract, the report, the cleanup, and the receipt below are the actual outputs of a job.

/docs/api/

The contract

The API reference is generated from the same schema the production service runs on, so it can't drift from the code.

report_artifact.key

The report

When a job finishes, SonicCore writes the JSON result and hands you the key to read it.

analysis.audio.deleted

The cleanup

Your source file gets deleted once the report is stored. That deletion is logged as its own event.

webhook.delivered

The receipt

Every delivery is signed and retried until it either lands or runs out of attempts. You can see which.

Inside a report

A report is a list of measurements, grouped by what they're for

No vibes, no five-star ratings. Just the readings, sorted by the kind of decision each one helps you make.

Open a full sample report
Group
Level

LUFS, sample peak, RMS-style summary

Even out a catalog and spot the tracks that are way too hot or too quiet.

Spectrum

Centroid, rolloff, bandwidth, flatness

Compare how two tracks sit tonally without pinning a subjective word on either.

Structure

Duration, technical sections, boundary candidates

Draw a timeline in your UI while staying honest about where sections really start.

Delivery

Stored report, source cleanup, webhook attempt state

Show a live status, retry what fails, and keep a trail you can answer questions with.

How a job runs

Every job runs the same three steps

Upload, analyze, deliver. You can read the state at each step, and pull the evidence once it's done.

01

Upload

We hand the browser a signed URL. The audio goes straight to storage and you send us the object ID — it never touches your own servers.

02

Analyze

A worker picks up the job, runs SonicCore, writes the report, emits an event at each step, then deletes the source file.

03

Deliver

Poll for the result, or let the signed webhook come to you. It retries when delivery fails and is safe to receive twice.

Where we draw the line

We never let a guess look like a measurement

Every field says where it came from: measured directly, estimated with a confidence score, or switched off until the provider behind it is ready. You always know which one you're reading.

Production local

Measured directly. Same answer every run.

  • Duration
  • Sample peak
  • Integrated loudness (LUFS)
  • RMS-style level
  • Spectral descriptors
Best effort

Our best estimate, with a confidence score.

  • Tempo
  • Time signature
  • Musical key
  • Section boundary candidates
Provider-backed

Switched off until the provider behind it is ready.

  • Recognition
  • Genre
  • Mood
  • Energy / valence
  • Danceability

For whoever wires it in

A small API that does what it says

Scoped keys, signed uploads, idempotent jobs. The OpenAPI spec is generated from the running service, so the docs can't quietly drift from the code.

  • Bearer-scoped API keys you can revoke from the console
  • An idempotency key on every job, so a retry never double-charges
  • Typed events for queue, run, and delivery
  • Webhook signatures you can verify before you trust a payload
Open API reference
queue-analysis.sh
# Queue an analysis job
curl -X POST https://api.beatlyze.dev/v1/analyses \
  -H "authorization: Bearer $BEATLYZE_API_KEY" \
  -H "content-type: application/json" \
  -d '{"storage_object_id":"sto_9f2…"}'
202 Accepted · application/json
{
  "id": "job_3f7a…c2",
  "status": "queued",
  "idempotent_replay": false
}

Pricing

Start free, pay when you ship

Starter is live and self-serve today. The provider-backed tier stays closed until the enrichment behind it is solid enough to put a price on.

Sandbox

€0account access

Poke around the console, read the docs, and mint a key while you work out if this fits.

  • HttpOnly email session
  • Private upload workflow
  • API docs & OpenAPI reference
  • One-off packs for live runs
Open account
Live checkout

Starter

€19/ month

Real Stripe checkout, real runs — the plan to build your integration on.

  • 250 normalized credits on checkout
  • R2-backed source & report artifacts
  • SonicCore technical analysis
  • Signed webhook delivery
Start Starter

Scale

Volumeusage-based

For higher volume, longer files, provider-backed tags, and contracted support.

  • Normalized-credit metering
  • Provider-backed tags when enabled
  • Report & webhook review
  • DPA and support commitments
Talk to us

Run your first report in the next ten minutes

Open an account, mint a scoped key, and push a track through the same pipeline that is running in production right now.