A playback is a saved pause point. When a user pauses watching (Documentation Index
Fetch the complete documentation index at: https://api.simkl.org/llms.txt
Use this file to discover all available pages before exploring further.
/scrobble/pause) or stops before 80% progress (/scrobble/stop with progress < 80), Simkl persists the position so the user can resume from any signed-in device. Playbacks are how Simkl powers “Continue Watching” UIs.
This page is a reference index. The lifecycle, cross-device flow, and full scrobble integration live in the Scrobble guide.
Members can browse and clean up their saved playbacks at simkl.com/my/history/playback-progress-manager/.
What gets stored
| Trigger | Result |
|---|---|
POST /scrobble/pause (any progress) | Saves a paused playback at the sent progress. |
POST /scrobble/stop with progress < 80 | Saves a paused playback at the sent progress (resumable). |
POST /scrobble/stop with progress ≥ 80 | No playback saved — item is written to watch history instead (same as POST /sync/history). |
POST /scrobble/checkin | No playback saved (the runtime-extrapolated session lives elsewhere). |
Retention by plan
Saved playbacks are pruned automatically by a daily cleanup job:| Plan | Retention |
|---|---|
| Free | 7 days |
| PRO | 30 days |
| VIP | 90 days |
Cross-device resume — the recipe
Device A pauses, Device B picks it up:Device A pauses
POST /scrobble/pause with the user’s access_token and current progress. Simkl saves the position.Device B gates the refetch on activities
POST /sync/activities returns a playback timestamp per media-type bucket. Compare it to the value you saved on the previous sync — if it hasn’t moved, no new pause has happened and you can skip the next step.Device B asks for any saved playbacks
Only when the
playback timestamp moved: GET /sync/playback (or narrow with /sync/playback/episodes / /sync/playback/movies) returns the paused playbacks for this user. Save the new timestamp.access_token — the playback is stored per-user, not per-device.

Endpoints
Get playbacks
GET /sync/playback — list saved paused playbacks for a user (or narrow with /sync/playback/:type where :type is episodes or movies). Filter by date_from, date_to, hide_watched, limit.Delete playback
DELETE /sync/playback/:id — remove a saved playback by its ID.Item shape
Each playback in the response includes:id— 64-bit integer playback ID (use this with the DELETE endpoint)progress— percentage 0-100 (e.g.42,75.5)paused_at— ISO-8601 UTC timestamptype—"episode"or"movie"- For episodes:
episode.{season, number, title}plustvdb_season/tvdb_numberfor anime - The container object:
show(TV episodes),anime(anime episodes), ormovie. Each carriestitle,year, andids.
Related
Add to history
POST /sync/history — the canonical “mark as watched” endpoint. Use this (not playback) when you want a title on the user’s watched library.Mark as watched guide
Pick the right write endpoint when you don’t need real-time playback tracking.
Scrobble guide
The full scrobble lifecycle, including how pause/stop create playbacks.
How scrobbling works
API reference index for the four scrobble endpoints.
Activities
POST /sync/activities — the “is anything new?” gate. Check the playback timestamp before refetching.Sync guide
The activities-driven refresh strategy applied across all user data.