Error shape
Most routes return:x-request-id — include it when reporting problems to your station admin or vendor support.
Playback ingest may return
{ "error": "string" } for encoder compatibility.
For example, an invalid ingest request can return:
error.code, preserve the request ID for diagnosis, and display a suitable message. issues is optional. Each issue has a path and message, and may add a machine-readable code, a short suggestion you can show, and retryAfter in seconds when the problem is temporary. Playback clients must handle the legacy string instead of expecting error.code.
Recover from errors
Do not retry invalid input or invalid credentials in a tight loop. Use the operation’s response list to see which statuses apply; this table is the shared error vocabulary, not a guarantee that every route returns every code. Public media range requests can also return
416 when the requested range cannot be satisfied.
Contract version
Listener JSON projections includecontractVersion: 1. Treat unknown fields as forward-compatible unless the version integer changes. Calendar text, media bytes, and playback ingest use their own documented response shapes.
Preserve exact enum values and check optional/nullable fields independently. A successful response with an empty array or a nullable resource is not an error. See Field types and empty states.
Pagination and filters
Use documented cursors, sorts, and filters only. Content lists sort bypublishedAt or updatedAt and filter on text and choice delivery fields. Do not assume you can sort or filter other fields.
GraphQL and the realtime feed
Public GraphQL and the realtime feed complement REST. GraphQL requires the same tenant token (listener:read) as JSON reads; the realtime feed is anonymous. REST entry points remain in OpenAPI; typed helpers live in the SDKs.
Each operation page in the sidebar documents route-specific validation and response schemas.
Choose a recovery action
For an uncertain mutation outcome, check current state before repeating the operation. Retain the same idempotency identity where the operation supports it. Include the request ID, route, HTTP status, and approximate time in support reports, with tokens and confidential payload fields removed.