POST /sync/history call. You don’t need scrobbling, and you don’t need a media player.
POST /sync/history already moves the item to the right Watchlist — don’t follow up with /sync/add-to-list. The history call places (and re-classifies) the item based on the watch event. Read added.statuses[].response.status in the response to see where it landed: a "completed" write on a still-airing show is silently downgraded to "watching", and that resolved status is what the server stored. A follow-up /sync/add-to-list call would overwrite the server’s smarter decision.Endpoints used on this page
POST /sync/history
Mark one or many items as watched. The main endpoint for this guide.
POST /sync/history/remove
Undo a mark-as-watched. Same payload shape.
POST /scrobble/start
For media players: report that playback has begun.
POST /scrobble/stop
For media players: stop playback. ≥80% progress = marked watched.
Mark a movie
POST /sync/history.
Mark an episode
Mark a whole season
Drop theepisodes array — Simkl marks every episode in the listed season:
Mark a whole show
Drop bothseasons and episodes:
Mix everything in one call
Movies, shows, and anime can be sent together. Useful for importing watch history from another tracker. Anime entries are equally valid under eithershows[] or anime[] — Simkl resolves the catalog by ids either way (see Anime in shows[] or anime[]).
When to use which endpoint
Mark as watched
POST /sync/history — instant, one call. Best for “Mark watched” buttons, importers, manual logging.Scrobble
Real-time playback tracking. Best for media players (Plex, Jellyfin, custom apps) that report actual user events.
Scrobble does mark the item as watched, but only at the end of playback — either when you call
POST /scrobble/stop with ≥ 80% progress, or when POST /scrobble/checkin auto-completes at 100% based on the item’s runtime. POST /scrobble/start alone does not mark anything watched — it only puts the title in the user’s “Watching now” banner. If you’re already scrobbling, you don’t also need to call /sync/history.Record a rewatch (Simkl Pro / VIP)
APOST /sync/history call on an already-Completed item is normally a no-op. Pass ?allow_rewatch=yes to record an additional viewing as a separate rewatch session — but read the full Rewatches guide first. The flag opens a parallel write path that, used carelessly, pollutes the user’s history stats and rewatches panel with phantom sessions. The guide covers session lifecycle (active / completed / closed), per-item fields (rewatch_id, is_rewatch, …), episode-level tracking on shows, reading sessions back from GET /sync/all-items, UI patterns simkl.com uses, and — critically — the precautions you have to implement before enabling the flag.
Removing items
Made a mistake? Remove with the same payload shape, just hitPOST /sync/history/remove: