# Join or continue the shared radio program

Returns stable sequence positions with independent playback timing. Follow nextCursor through after, including when current publication checks omit tracks. Unknown or hour-old cursors rejoin the current program. No listener history is accepted.

Operation: getSharedRadioProgram
GET /api/radio/program.json

Access: anonymous. Automatic retries: none. Redirects: manual. Request body limit: 0 bytes.
Default timeout: 30 seconds. Response limit: 16 MiB. Pagination is opt-in and bounded; an exhausted bound reports incomplete execution.

[HTML reference](/developers/api/getSharedRadioProgram) · [Authoritative schemas](/api/openapi.json)

## Wire contract

```json
{
  "operationId": "getSharedRadioProgram",
  "summary": "Join or continue the shared radio program",
  "tags": [
    "Music"
  ],
  "description": "Returns stable sequence positions with independent playback timing. Follow nextCursor through after, including when current publication checks omit tracks. Unknown or hour-old cursors rejoin the current program. No listener history is accepted.",
  "parameters": [
    {
      "name": "after",
      "in": "query",
      "required": false,
      "schema": {
        "type": "integer",
        "minimum": 0,
        "maximum": 999999999999999
      }
    }
  ],
  "responses": {
    "200": {
      "description": "Shared program snapshot; Cache-Control: no-store",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/RadioProgramSnapshotV1"
          }
        }
      }
    },
    "400": {
      "description": "Invalid cursor"
    },
    "429": {
      "description": "Admission limited; Retry-After: 60"
    },
    "503": {
      "description": "Shared program unavailable"
    }
  }
}
```

## Synthetic examples

### curl

```bash
curl --fail-with-body --max-time 30 --max-filesize 16777216 --request GET 'https://irvinebroque.com/api/radio/program.json' --header 'Accept: application/json'
```

### TypeScript

```typescript
import { PublicApi } from '@irvinebroque/public-api';
const api = new PublicApi();
const result = await api.radio.program({});
console.log(result.status, result.headers.get('content-type')); // Keep transient capabilities in memory.
```

### CLI

```bash
irvinebroque radio program
```
