Before you start
- A station administrator creates a dedicated playback integration credential in the RadioTools dashboard with
ingest:write. - Copy the secret immediately — it is shown only once.
- Store it securely in your automation configuration.
Send an observation
stationSlug (the public slug, as in listener URLs) or stationId. It must be the station the credential belongs to. A payload cannot select a different station.
Complete request example
This server-side request uses fictional track metadata and a source event ID:STATION_SLUG to the public slug of the station associated with the credential. Use the actual event timestamp; observedAt is Unix time in milliseconds. Listener reads return that timestamp as an ISO 8601 string. The request body is limited to 8 KiB.
Send
artist and title together, or streamTitle. A stream title without the Artist - Title separator is stored entirely as the title. The OpenAPI schema shows length bounds and accepted values; the operation description captures these cross-field rules.
Interpret the result
An illustrative successful outcome:accepted and outcome; a 200 alone does not mean a track matched a rundown item. This endpoint reports metadata and follow outcomes, not audio control. Other documented outcomes include not-playing, rejected, matched, uncertain, ignored (recorded, but not matched to the rundown), and on-air-not-following-rundown.
When artwork lookup is enabled and artworkUrl is omitted, artwork may be filled asynchronously after the ingest response. Do not assume the response waits for it.
Include stable event IDs and timestamps when your encoder supports them. See the Ingest operation in the sidebar for the complete request schema and responses.
When retrying the same observation, reuse its eventId and payload. Use a new event ID for a new observation, even if the artist and title repeat. Legacy requests without event IDs may collapse within a short adjacent window.
The ingest endpoint may return legacy { "error": "string" } responses for encoder compatibility.
Read reported tracks
Use a separatelistener:read credential to read:
GET /api/v1/stations/{stationSlug}/now-playing— the latest observation with freshness.GET /api/v1/stations/{stationSlug}/track-history— paginated reported track history.