# Radio WithZero Station Library with Musical Analysis

> Radio WithZero Station Library with Musical Analysis 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-11).

Returns the program library for a station including BPM, phase maps, beat grids, harmonic key analysis, and mix-in/mix-out cue points for DJ queue transitions.

## Facts

- Endpoint: GET https://radio.withzero.xyz/api/v1/stations/{id}/programs
- Price: metered — billed by usage
- Payment: MPP
- Status: unknown
- Last checked: 2026-09-11
- 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-station-library-with-musical-analysis-62a8584a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_uVZAXMN33iDVvXK0EetpL

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-station-library-with-musical-analysis-62a8584a
```

Example prompt: Show me my station library for station ID 'abc123' — I need the BPM, Camelot key, and mix-in/mix-out cue points for each program so I can plan smooth transitions in my queue.

## When to prefer this

Use this endpoint when you need to browse a station's full program rotation with rich DJ-oriented musical metadata — especially BPM, Camelot harmonic key, beat grids, and mix-in/mix-out cue points — to plan or automate queue transitions. Prefer this over the single-program detail endpoint when you need an overview of the entire library rather than deep beat-numbered analysis of one track.

## Known failure modes

- Station ID not found — 404 response if the specified station does not exist
- Analysis fields null — BPM and analysis object may be null if audio analysis failed for a given program
- Unauthorized access — attempting to access another owner's private station library may return 401 or 403
- Empty programs array — station exists but has no programs added to its library yet
- Partial analysis data — some programs may have a beat grid but missing key or cue data if analysis is incomplete

## How this service works

Your station library with musical analysis (bpm, phase map) — pick queue transition cues (exit/enter by section) from it.

## Output

A JSON object containing the station ID and an array of programs, each with programId, title, duration in milliseconds, BPM, sections, musical analysis (beat grid with BPM/offset/interval/phrase bars, harmonic key with root/mode/Camelot position/confidence, mix-in/mix-out cue timestamps in ms, phase boundaries), an analysis URL, and audience reactions.

## Request schema (JSON Schema)

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

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "station",
  "programs"
 ],
 "properties": {
  "station": {
   "type": "string"
  },
  "programs": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "programId",
     "title",
     "durationMs",
     "bpm",
     "sections",
     "analysis",
     "analysisUrl",
     "reactions"
    ],
    "properties": {
     "bpm": {
      "anyOf": [
       {
        "type": "number"
       },
       {
        "type": "null"
       }
      ],
      "description": "Analysed tempo — null when analysis failed."
     },
     "title": {
      "type": "string"
     },
     "analysis": {
      "anyOf": [
       {
        "type": "object",
        "required": [
         "version",
         "grid",
         "phases"
        ],
        "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": {
    
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/radio-withzero-xyz-radio-withzero-station-library-with-musical-analysis-62a8584a/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)
