Early access

Developer API

The TrackScore.AI™ API analyzes electronic music tracks programmatically. Submit audio, get the verdict back as JSON: a 0-100 hit-potential score, a 13-grade letter (A+ to F), genre fit, frequency-band balance, dynamics and stereo metrics, and the Klaus™ diagnosis, a plain-language assessment with an improvement plan.

Zero-storage by design: audio is processed in memory and never persisted. Poll for results or receive signed webhooks. A free deterministic test mode ships with every account.

How it works

  1. 01

    Create an API key

    Mint a key from the Developer console in your dashboard. Keys are shown once, stored as hashes, and revocable instantly.

  2. 02

    Submit the track in two steps

    POST /v1/analyses with the file metadata and an Idempotency-Key. You get a 202 with the analysis id and a short-lived upload target; POST the raw bytes there.

  3. 03

    Read the verdict

    Poll GET /v1/analyses/:id until status is complete, or subscribe to signed webhooks. Scores land first; the full Klaus diagnosis follows shortly after.

# 1. Create the analysis — returns the id + a short-lived upload target
curl -X POST https://trackscore.ai/api/v1/analyses \
  -H "Authorization: Bearer $TRACKSCORE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"file_name":"track.wav","mastering_status":"master"}'

# 2. Upload the audio bytes to the returned upload.url
#    ($UPLOAD_URL / $UPLOAD_TOKEN / $ANALYSIS_ID come from step 1's JSON:
#     .upload.url, .upload.token, .id)
curl -X POST "$UPLOAD_URL" \
  -H "Authorization: Bearer $UPLOAD_TOKEN" \
  -F "file=@track.wav"

# 3. Poll until status is "complete"
curl https://trackscore.ai/api/v1/analyses/$ANALYSIS_ID \
  -H "Authorization: Bearer $TRACKSCORE_API_KEY"

A typical track completes in about a minute. During early access, keys are rolling out to Pro & Studio accounts via the Developer console.

What you get back

Every completed analysis returns one JSON object: the overall score and grade, six pillar scores, tempo and key detection, genre fit against 9 electronic-genre profiles, 7-band frequency balance with per-genre ideals, loudness and dynamics, stereo metrics, structure sections, and the Klaus™ diagnosis with prioritized feedback.

{
  "object": "analysis",
  "id": "9b2f6c1e-...",
  "status": "complete",
  "diagnosis_status": "ready",
  "score": 87,
  "grade": { "letter": "B+", "label": "Very Good" },
  "scores": { "hit_potential": 87, "danceability": 91, "mix_quality": 88, ... },
  "tempo": { "bpm": 124.0, "regularity": 0.94 },
  "genre": { "detected": "deep_house", "name": "Deep House", "confidence": 0.8 },
  "frequency": { "bands": { ... }, "ideal": { ... }, "score": 84 },
  "mix": { "loudness_lufs": -8.2, "dynamic_range_db": 7.9, "stereo_width": 0.42, ... },
  "diagnosis": { "status": "ready", "summary": "The low end is dialed in. ..." },
  "feedback": [ { "type": "warn", "category": "frequency", "text": "..." } ]
}

Webhooks

Register HTTPS endpoints from the Developer console and receive signed events instead of polling. Deliveries carry a TrackScore-Signature header: t=<timestamp>,v1=<hex>, where v1 is HMAC-SHA256 over <timestamp>.<raw body> (the timestamp, a period, then the exact bytes received — not the body alone), with a 5-minute tolerance. Deliveries retry with exponential backoff for about 3 days. Consumers dedupe on the event id.

EventFires when
analysis.scores_readyScores are in; the diagnosis is still being written
analysis.completedThe full Klaus diagnosis is ready
analysis.failedThe analysis could not complete (credit auto-restored)
credit.balance.lowYour credit balance crosses the low threshold

Zero-storage privacy

Audio submitted through the API is processed in memory and never persisted: no disk, no object storage, no queue. Raw bytes are received, analyzed, and garbage-collected; only the JSON results are stored. Unreleased music stays private.

No training data. No AI music generation. Just analysis.

Pricing

API access is included with Pro & Studio and uses your monthly credits: one analysis costs one credit, the same as the web app. Test mode is free and unlimited within fair-use rate limits.

Building at volume? Contact us for partner pricing.

Frequently asked questions

Does the TrackScore API store my audio files?

No. Audio is processed entirely in memory and is never written to disk, object storage, or a queue. Raw bytes are received, analyzed, and garbage-collected; only the JSON results are stored. Zero-storage handling is a contractual commitment in the API terms.

What audio formats does the TrackScore API accept?

WAV, MP3, AIFF, and FLAC, up to 200 MB and 20 minutes per file. Compressed-codec-in-WAV containers and DJ mixes beyond the duration limit are rejected before analysis.

How long does an API analysis take?

About a minute for a typical track. Scores land first (the analysis.scores_ready webhook), and the full Klaus diagnosis fills in shortly after (analysis.completed). You can poll GET /v1/analyses/:id instead of using webhooks.

Do I need a subscription to use the TrackScore API?

API access is included with Pro and Studio plans and uses your monthly credits: one analysis costs one credit. If you are building at volume or integrating a platform, contact us for partner pricing.

Is there a free test mode?

Yes. Keys prefixed ts_test_ return a deterministic sample analysis, never touch the analysis engine, and never spend a credit. Build and verify your whole integration before making a single live call.

How are TrackScore webhooks secured?

Every delivery is signed with an HMAC-SHA256 TrackScore-Signature header (t=timestamp, v1=signature) using your endpoint's whsec_ secret. The signed payload is the timestamp, a period, then the raw request body: t.rawBody — not the body alone. A 5-minute timestamp tolerance protects against replay. Deliveries retry with exponential backoff for about 3 days.

Resources

Last updated 2026-07-20