{"uid":"cap_lifvCrnkLajaHEsSaLox2","slug":"radio-withzero-xyz-radio-withzero-dj-analysis-for-library-program-e35091ea","name":"Radio WithZero DJ Analysis for Library Program","description":"Detailed DJ analysis for one library program: beat grid, beat-numbered phase boundaries, and a compact normalized waveform tuple per beat.","url":"https://radio.withzero.xyz/api/v1/stations/{id}/programs/{programId}","method":"GET","headers":{},"bodySchema":{"type":"object","required":["id","programId"],"properties":{"id":{"type":"string"},"programId":{"type":"string"}}},"responseSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["programId","title","durationMs","analysisStatus","analysis"],"properties":{"title":{"type":"string"},"analysis":{"anyOf":[{"type":"object","required":["version","grid","phases","wave"],"properties":{"key":{"type":"object","required":["root","mode","camelot","confidence"],"properties":{"mode":{"enum":["major","minor"],"type":"string"},"root":{"type":"string","description":"Pitch class, e.g. \"A\"."},"camelot":{"type":"string","description":"Camelot wheel position (\"8A\") — harmonic mixing: blend long within ±1 number or same-number letter swap."},"confidence":{"type":"number","maximum":1,"minimum":0,"description":"Margin over the runner-up key; below ~0.05 treat as ambiguous."}},"additionalProperties":false},"cues":{"type":"object","required":["mixInMs","mixOutMs"],"properties":{"mixInMs":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"First sustained full-drums beat — the natural earliest blend-in point."},"mixOutMs":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Where full drums leave — blend out at or before this."}},"additionalProperties":false},"grid":{"type":"object","required":["bpm","beatOffsetMs","beatIntervalMs","beatsPerBar","phraseBars","downbeatOffsetBeats","downbeatConfidence","totalBeats"],"properties":{"bpm":{"type":"number","exclusiveMinimum":0},"phraseBars":{"type":"number","const":8},"totalBeats":{"type":"integer","maximum":9007199254740991,"minimum":0},"beatsPerBar":{"type":"number","const":4},"beatOffsetMs":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Track-time of absolute beat 0."},"beatIntervalMs":{"type":"number","exclusiveMinimum":0},"downbeatConfidence":{"type":"number","maximum":1,"minimum":0,"description":"Confidence in the beat-one inference; four-on-the-floor tracks are often ambiguous."},"downbeatOffsetBeats":{"type":"integer","maximum":3,"minimum":0,"description":"Absolute beat index modulo four inferred as beat one."}},"additionalProperties":false},"wave":{"type":"object","required":["resolution","featureOrder","startBeat","values"],"properties":{"values":{"type":"array","items":{"type":"array","prefixItems":[{"type":"number","maximum":1,"minimum":0},{"type":"number","maximum":1,"minimum":0},{"type":"number","maximum":1,"minimum":0},{"type":"number","maximum":1,"minimum":0}]},"description":"One normalized feature tuple per beat; timestamps derive from the grid."},"startBeat":{"type":"number","const":0},"resolution":{"type":"string","const":"beat"},"featureOrder":{"type":"array","prefixItems":[{"type":"string","const":"rms"},{"type":"string","const":"peak"},{"type":"string","const":"lowOnset"},{"type":"string","const":"highOnset"}]}},"additionalProperties":false},"phases":{"type":"array","items":{"type":"object","required":["kind","start","end"],"properties":{"end":{"type":"object","required":["ms","beat","bar","beatInBar"],"properties":{"ms":{"type":"integer","maximum":9007199254740991,"minimum":0},"bar":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Bar index relative to the inferred first downbeat; may be negative for a pickup."},"beat":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Absolute beat index on the track grid."},"beatInBar":{"type":"integer","maximum":4,"minimum":1}},"description":"Exclusive phase boundary.","additionalProperties":false},"kind":{"type":"string","description":"intro | build | drop | breakdown | groove | outro"},"start":{"type":"object","required":["ms","beat","bar","beatInBar"],"properties":{"ms":{"type":"integer","maximum":9007199254740991,"minimum":0},"bar":{"type":"integer","maximum":9007199254740991,"minimum":-9007199254740991,"description":"Bar index relative to the inferred first downbeat; may be negative for a pickup."},"beat":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Absolute beat index on the track grid."},"beatInBar":{"type":"integer","maximum":4,"minimum":1}},"additionalProperties":false}},"additionalProperties":false}},"version":{"type":"number","const":2},"loudness":{"type":"object","required":["integratedLufs","rangeLu"],"properties":{"rangeLu":{"type":"number","description":"Loudness range (LRA) — dynamics. Low (<4) = flat/repetitive feel; high (>8) = strong builds and valleys."},"integratedLufs":{"type":"number","description":"EBU R128 integrated loudness — ABSOLUTE cross-track intensity (unlike the per-track-normalized energy buckets)."}},"additionalProperties":false},"brightness":{"type":"array","items":{"type":"number","maximum":1,"minimum":0},"description":"Ten spectral-centroid buckets (0=dark/warm, 1=bright/airy) — the timbre arc for mood matching and dayparting."}},"additionalProperties":false},{"type":"null"}],"description":"Versioned DJ data: compact beat grid, semantic phase boundaries, and one normalized [rms, peak, lowOnset, highOnset] tuple per beat."},"programId":{"type":"string"},"durationMs":{"type":"number"},"analysisStatus":{"enum":["ready","unavailable"],"type":"string"}},"additionalProperties":false},"example":null,"exampleRequest":null,"tags":[],"displayCostAmount":"0","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"proven_free","priceSource":"registry","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"metered","summary":"metered — billed by usage","primary":{"kind":"metered","protocol":"mpp","network":"tempo","amountUsd":null,"per":"call","confidence":"unknown"},"accepted":[{"kind":"metered","protocol":"mpp","network":"tempo","amountUsd":null,"per":"call","confidence":"unknown"}]},"paymentMethods":[{"uid":"pm_8JBUcMV32Z_0HTy5dOtz9","protocol":"mpp","methodType":"crypto","chain":"tempo","mode":"charge","costAmount":"0","costPer":"request","priority":0,"asset":"0x20C000000000000000000000b9537d11c60E8b50","unit":"request","depositMicros":null,"planRef":"radio.programs.get:1"}],"brandName":"radio.withzero.xyz","brandSlug":"radio-withzero-xyz-mpp","brandBaseUrl":"https://radio.withzero.xyz","brandDocsUrl":null,"whatItDoes":"Returns detailed DJ analysis for a single station library program, including beat grid, beat-numbered phase boundaries, and a compact normalized waveform tuple per beat.","exampleAgentPrompt":"Pull the full DJ analysis for program 'prog_abc123' on station 'stn_xyz456' — I need the beat grid, BPM, phase boundaries, mix-in and mix-out cues, and the key with its Camelot position so I can plan smooth transitions.","exampleUseCases":[{"title":"Plan harmonic mix transitions","prompt":"Get the beat analysis for program 'prog_7890' on my station 'stn_1234' — I need the Camelot key, BPM, and phase boundaries so I can figure out which tracks to queue next for a harmonic mix."},{"title":"Automate DJ cue point extraction","prompt":"Fetch the mix-in and mix-out cue points plus the beat grid for program 'prog_5566' on station 'stn_9900' — I want to automate blending it into the next track at exactly the right moment."},{"title":"Build per-beat waveform visualization","prompt":"Give me the normalized waveform tuple per beat and the full beat grid for program 'prog_3344' on station 'stn_7788' so I can render a visual waveform display in the DJ booth interface."}],"resultDescription":"Returns a JSON object with programId, title, durationMs, analysisStatus, and a detailed analysis object containing: beat grid (BPM, beatOffsetMs, beatIntervalMs, beatsPerBar, phraseBars, downbeatOffsetBeats, downbeatConfidence, totalBeats), phase boundaries indexed by beat number, a compact normalized waveform tuple per beat, optional mix cue points (mixInMs, mixOutMs), and optional musical key info (root, mode, Camelot position, confidence).","failureModes":["Station ID or program ID not found — 404 response","Analysis not yet complete — analysisStatus field may indicate pending or failed state","Program exists but analysis data is null or incomplete if audio processing hasn't finished","Invalid path parameters — 400 or 422 response","Unauthorized access if station ownership is required — 401/403 response"],"whenToPreferThis":"Use this endpoint when you need granular, beat-level DJ analysis for a specific track already in a station's library — particularly for automating harmonic mixing decisions, computing transition cue points, rendering waveform visualizations, or building phase-aware queue logic. Prefer this over the library-list endpoint when you need full detail on a single program rather than a summary view across all programs.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-13T06:41:37.518Z","isFirstParty":true}