Required scopes
/api/platform/v1/playback/now-playingrequiresplayback:read/api/platform/v1/playback/in-progressrequiresplayback:read/api/platform/v1/me/continue-watchingrequiresplayback:readDELETE /api/platform/v1/playback/in-progress/{id}requiresplayback:write/api/platform/v1/playback/eventsrequiresevents:read
Now Playing
typetmdbIdtitleprogressPercentprogressSecondsdurationSecondsnowPlayingplaybackStatemediaSource
In Progress
Continue Watching
/me/continue-watching returns show-level summaries: the show’s current
season/episode and completion state. It is useful for a “next episode” row, but
it is not the source of an exact movie or episode resume position. Fetch
/api/platform/v1/me/continue-watching/{showId} when you need the details for a
show. Use /api/platform/v1/playback/in-progress for resumable movie or episode
items with progressSeconds, durationSeconds, and the progress identifier
used by the dismiss endpoint.
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.
401,
refresh or re-authorize before reconnecting. Do not treat an open stream as a
permanent authorization grant.
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 or its handshake returns503 service_unavailable,
wait for the Retry-After delay when one is present (otherwise use bounded
exponential backoff) before reconnecting:
- 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.