# Radio WithZero DJ Analysis for Library Program

> Radio WithZero DJ Analysis for Library Program is a paid API for AI agents from radio.withzero.xyz, paid per call via MPP, metered — billed by usage, status unknown (last checked 2026-09-13).

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.

## Facts

- Endpoint: GET https://radio.withzero.xyz/api/v1/stations/{id}/programs/{programId}
- Price: metered — billed by usage
- Payment: MPP
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Provider: radio.withzero.xyz
- Website: https://radio.withzero.xyz
- Canonical page: https://www.zero.xyz/c/radio-withzero-xyz-radio-withzero-dj-analysis-for-library-program-e35091ea
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_lifvCrnkLajaHEsSaLox2

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability radio-withzero-xyz-radio-withzero-dj-analysis-for-library-program-e35091ea
```

Example prompt: 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.

## When to prefer this

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.

## Known failure modes

- 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

## How this service works

Detailed DJ analysis for one library program: beat grid, beat-numbered phase boundaries, and a compact normalized waveform tuple per beat.

## Output

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).

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "id",
  "programId"
 ],
 "properties": {
  "id": {
   "type": "string"
  },
  "programId": {
   "type": "string"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "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
     
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/radio-withzero-xyz-radio-withzero-dj-analysis-for-library-program-e35091ea/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from radio.withzero.xyz](https://www.zero.xyz/host/radio.withzero.xyz/llms.txt)
