Get paused playback sessions for one type
Returns the user’s saved paused playbacks — created by /scrobble/pause or /scrobble/stop with progress < 80%. The {type} segment is optional:
| Path | Returns |
|---|---|
GET /sync/playback | All paused playbacks (episodes + movies). |
GET /sync/playback/episodes | TV/anime episode playbacks only. |
GET /sync/playback/movies | Movie playbacks only. |
The response shape is identical across the three forms; only the included items differ. Resume a session by calling /scrobble/start with the same item.
Query parameters
| Param | Effect | Default |
|---|---|---|
date_from | Only sessions with paused_at >= date_from. | — |
date_to | Only sessions with paused_at < date_to. | — |
hide_watched | Exclude items already watched after the pause was created. | true |
limit | Max items returned (1–10000). | 10000 |
Item shape
Note:
progressis a percentage (0-100) — same scale as the scrobble endpoints. The example values shown above (75,45.5,42.2) are real outputs from the API.
Members can browse and clean these up at simkl.com/my/history/playback-progress-manager.
Retention by plan
- Free — 7 days · PRO — 30 days · VIP — 90 days
Sessions persist until they’re manually removed via DELETE /sync/playback/{id}, replaced by the next scrobble update on the same title, or aged out per the plan retention window above. They are not auto-deleted on paused_at expiry — you’ll see the same session in the response indefinitely until one of those three things happens.
Scrobble guide — full walkthrough
Real-time playback tracking — /start, /pause, /stop lifecycle, paused-playback resumption across devices, when scrobble auto-completes, and the difference between /scrobble/checkin (fire-and-forget) and /scrobble/start (active tracking).
Already-watched items can appear here
A paused playback is returned even when the user has already finished that title, as long as the pause happened after they finished it. That is a re-viewing in progress, not stale data, and hide_watched=true (the default) deliberately does not filter it out.
So a Continue Watching row built from this endpoint can contain a movie or episode the user has completed before. If your UI also shows a “watched” checkmark, expect both to be true at once — show the resume position anyway.
hide_watched=true only removes playbacks that were overtaken: paused first, then marked watched from somewhere else. Those are genuine leftovers.
This changed in August 2026. Previously a completed movie, or the exact episode the watchlist last pointed at, was hidden regardless of when it was watched, which meant re-viewings never showed up.
Authorizations
Preferred form: your client_id as a URL query parameter on every request. Self-describing in logs and curl commands. See Headers and required parameters.
A user access_token, sent as Authorization: Bearer .... Required for endpoints that read or modify the user's library, scrobble session, ratings, settings, or playbacks. Every flow returns the same kind of token. See Set up authentication.
Headers
Descriptive identifier for your app, ideally name/version. Examples: PlexMediaServer/1.43.1.10540, kodi-simkl/0.9.2, MyApp/2.4.1 (https://myapp.com).
Path Parameters
episodes or movies to filter by item type. To get all paused playbacks of both kinds, call GET /sync/playback. Strictness; drop the segment from the URL to call without it.
movies, episodes Query Parameters
Slice your result to the first N items. Default: 10000
Controls whether playbacks for items the user has already finished are filtered out.
true (default) hides a paused playback only when the item was watched at or after the moment it was paused — a stale leftover, e.g. the user paused at 40% and then marked the whole thing watched from another app.
It does not hide a playback that was paused after the item was finished. That is a re-viewing in progress, and it is returned even with hide_watched=true. A user who finished a film years ago and is 45% into watching it again gets that playback back in the list, which is what a Continue Watching row should show.
false skips the check entirely, including the stale-leftover case.
One edge case: for items whose watch date is the "watched, date unknown" placeholder there is no date to compare, so true falls back to hiding completed movies and the specific episode the watchlist last pointed at.
true, false Filter sessions from this date
Filter sessions until this date
Your client_id from your Simkl developer settings. Required on every request.
Short, lowercase identifier for your app (e.g. plex-scrobbler, kodi-bridge). Helps Simkl identify which apps are using the API.
Your app's current version (e.g. 1.0, 2.4.1). Helps Simkl debug issues you report.
Response
OK
Internal playback session ID. Use to delete via DELETE /sync/playback/{id}.
Saved progress percentage 0–100.
Standard movie object. See the Standard Media Objects guide.
Standard show object. May include nested seasons/episodes for partial sync.
Standard anime object. Like Show, but may include anime_type. Episode numbering follows AniDB.
Episode reference. Use season + number, or ids.