Required scopes
/api/platform/v1/playback/now-playingrequiresplayback:read/api/platform/v1/playback/in-progressrequiresplayback:read/api/platform/v1/playback/eventsrequiresevents:read
Now Playing
typetmdbIdtitleprogressPercentprogressSecondsdurationSecondsnowPlayingplaybackStatemediaSource
In Progress
Server-sent events
readyplayback-update
playback-update includes:
Recommended client pattern
Use SSE as an invalidation signal, not as the full source of truth.- Open the event stream.
- Wait for
playback-update. - Fetch
/playback/now-playingor/playback/in-progress. - Update your UI from those read endpoints.
Browser caveat
Standard browserEventSource does not let you attach an Authorization header. If your app runs in the browser, use one of these approaches:
- Proxy the stream through your backend
- Use a fetch-based streaming client instead of
EventSource - Open the SSE stream from a native, desktop, or server environment that supports bearer headers
Cache behavior
Playback read endpoints return live user state and should be treated as non-cacheable application data.Failure handling
If the SSE connection drops:- reconnect with backoff
- fetch
/playback/now-playingafter reconnecting - do not assume missed SSE messages contain the full state you need
X-PunchPlay-Request-Id response header when available and log the endpoint, timestamp, and status code.