Async by default
Job-based analysis matches how audio processing actually behaves — queue, poll, or receive a webhook. No fake-sync wrappers.
Audio analysis API
Submit audio, get an async job, and pull back BPM, key, loudness, mood, genre, and section data as production JSON. Live demo, docs, pricing, and first-request onboarding all sit on the public site.
Live JSON first. Signup second. Dashboard only when it helps.
X-API-Key header across uploads, URLs, polling, and webhooks.Submit
POST /v1/analyze/upload or POST /v1/analyze/url
Queue
Receive job_id with status: "processing"
Retrieve
Poll result endpoint or accept a webhook callback
{
"job_id": "8b7a5c17-b1a1-42fd-aab8-51d0c4ff3d2a",
"status": "completed",
"result": {
"bpm": 127.8,
"bpm_confidence": 0.94,
"key": "A",
"scale": "minor",
"key_notation": "Am",
"key_confidence": 0.88,
"energy": 0.86,
"danceability": 0.91,
"valence": 0.44,
"loudness_lufs": -8.1,
"mood_tags": ["energetic", "dark"],
"genre_suggestions": ["techno", "house"],
"duration_seconds": 247.3,
"time_signature": 4
}
} Why teams switch
Job-based analysis matches how audio processing actually behaves — queue, poll, or receive a webhook. No fake-sync wrappers.
One auth header, structured JSON responses, OpenAPI spec, and
llms.txt. Integrates into existing tooling without ceremony.
Submit audio, retrieve results. BPM, key, loudness, mood, genre, and section data without standing up a pipeline.
Request flow
The examples below use the headers, routes, and async lifecycle your backend actually exposes today.
curl -X POST https://api.beatlyze.dev/v1/analyze/upload \
-H "X-API-Key: bz_your_api_key" \
-F "[email protected]"
# -> { "job_id": "...", "status": "processing" }
curl https://api.beatlyze.dev/v1/analysis/JOB_ID \
-H "X-API-Key: bz_your_api_key" import requests
import time
with open("track.mp3", "rb") as handle:
job = requests.post(
"https://api.beatlyze.dev/v1/analyze/upload",
headers={"X-API-Key": "bz_your_api_key"},
files={"file": handle},
).json()
while True:
res = requests.get(
f"https://api.beatlyze.dev/v1/analysis/{job['job_id']}",
headers={"X-API-Key": "bz_your_api_key"},
).json()
if res["status"] == "completed":
break
time.sleep(1) import { readFile } from "node:fs/promises";
const form = new FormData();
const file = await readFile("track.mp3");
form.append("file", new Blob([file]), "track.mp3");
const job = await fetch(
"https://api.beatlyze.dev/v1/analyze/upload",
{
method: "POST",
headers: { "X-API-Key": "bz_your_api_key" },
body: form,
}
).then((r) => r.json()); Try the live API
This demo calls the live anonymous endpoint at POST /v1/demo/analyze/url, then polls the real
job until the result is ready. No signup. No dashboard. Public audio URL only.
Move from proof to integration
Enter an email. The form calls POST /v1/auth/register directly against the live API —
no separate account portal or project setup. Your key is shown once, and the dashboard becomes the place to confirm
verification, plan state, and the first real request.
Feature surface
| Signal | What it gives you | Example |
|---|---|---|
| BPM + confidence | Tempo with a per-result reliability score | 127.8 / 0.94 |
| Key + scale | Harmonic notation, readable by key and scale | Am |
| LUFS loudness | Integrated loudness for normalization-aware workflows | −8.1 LUFS |
| Energy + danceability | Normalized behavioral signals for ranking and UX | 0.86 / 0.91 |
| Valence + mood tags | Emotional descriptors for search and discovery | energetic, dark |
| Genre suggestions | Top candidates without hand-labeling | techno, house |
| Section data | Structural timing and per-section snapshots | 7 sections |
| Usage endpoint | Monthly quota and plan limits built in | /v1/usage |
Use cases
Built for teams who need audio features in product workflows, but do not want to maintain their own analysis pipeline.
Enrich tracks with tempo, key, loudness, and mood for search, filtering, and metadata pipelines. Works on batches via URL submission.
BPM sorting, harmonic prep, energy-based sequencing — using the same analysis data your backend would compute anyway.
Structured audio signals for ranking, clustering, and playlist generation. Replaces hand-labeling or proxy signals from metadata.
Plans
These plans match the current product surface: fixed monthly tiers with clear included usage.
Free
€0 / month
Starter
€19 / month
Pro
€49 / month
Start building
Read the docs, open the full reference, or create a key and start integrating right away.
Need help or custom volume planning? [email protected]
Use an existing API key to upgrade, or enter an email to create a paid account and continue straight to Stripe.
or
If you use email, Beatlyze will create your account, start checkout, and save the new API key in this browser when available.