Skip to main content
GET

Authorizations

client_id
string
query
default:YOUR_CLIENT_ID
required

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.

Authorization
string
header
default:YOUR_ACCESS_TOKEN
required

OAuth 2.0 or PIN-flow access_token. Required for endpoints that read or modify the user's library, scrobble session, ratings, settings, or playbacks. See Authentication.

Headers

User-Agent
string
required

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

type
enum<string>
required

One of shows, movies, anime, or all. Pass all to skip filtering on type even when the runtime accepts the segment-less form, so for spec strictness this is true. To call without it in practice, just drop the segment from the URL.

Available options:
movies,
shows,
anime,
all
Example:

"all"

status
enum<string>
required

One of watching, plantowatch, hold, completed, dropped, or all. Movies accept only plantowatch, completed, dropped, and all; TV and anime accept all six. Pass all to skip filtering on status — /sync/all-items/{type}/all returns every status for that type. User watchlist status. Movies skip watching and hold — see /conventions/list-statuses.

Available options:
watching,
plantowatch,
hold,
completed,
dropped,
all
Example:

"all"

Query Parameters

allow_rewatch
enum<string>
default:no

Opt into rewatch tracking. When yes, POST /sync/history records an additional rewatch session instead of being a no-op for already-watched items, and GET /sync/all-items returns one extra entry per saved rewatch session alongside the item's normal entry. Available to Simkl Pro and VIP users — non-Pro callers see no effect even with the flag set.

⚠️ Do not enable this flag until you've read the Rewatches guide end-to-end and implemented the precautions. Used carelessly (on retries, on every scrobble event, on importer re-runs, without pinning rewatch_id after the first write), it will pollute the user's history stats and rewatches panel with phantom sessions. The flag should be gated behind explicit user intent — a dedicated "Rewatch" button — never on background or automated flows. Also expose a per-user Track rewatches toggle in your app's settings (default off) — not every user wants the rewatch-session complexity.

Limits: up to 50 rewatches per item (movie, show, or anime), and any two watch events on the same item (movie or episode) must be at least 2 days apart — a new rewatch within 48 hours of the previous watch of that same item collapses into the same session (it's a rewatch, not a rewind 😄). Full walkthrough — session lifecycle (active / completed / closed with bidirectional transitions), episode-level tracking, reading sessions back from GET /sync/all-items, and ready-made code for simkl.com-style UI patterns — in the Rewatches guide.

Available options:
yes,
no
date_from
string<date-time>

ISO-8601 timestamp. Returns only items updated since this time. Use the value saved from /sync/activities.

extended
enum<string>

Controls response richness. Omit for the default (summary fields only — status, counters, last_watched / next_to_watch markers, no episode arrays).

  • simkl_ids_only — smallest payload: just ids.simkl per item. Ideal for the deletion-reconciliation diff in continuous sync.
  • ids_only — same, plus external IDs (imdb, tmdb, tvdb, mal, …).
  • fullrequired to get the per-episode seasons[].episodes[] arrays; without it, episode_watched_at and include_all_episodes do nothing. Necessary but not always sufficient: on its own it loads episodes for watching / hold / plantowatch items only — completed and dropped additionally need include_all_episodes. The only extra metadata field it adds is runtime.
  • full_anime_seasons — like full, plus TVDB season/episode mapping on anime (mapped_tvdb_seasons at the show level, a tvdb block per episode).

This endpoint does not return overview, fanart, genres, or ratings at any extended value — it returns watch state plus a compact item stub (title, poster, year, ids, and runtime on full). For catalog metadata, call the detail endpoints (/movies/{id}, /tv/{id}, /anime/{id}).

Large payload on full / full_anime_seasons — pair with date_from for continuous sync. The one expected full-library use is a one-time episode baseline on first sync (see the Sync guide → Phase 1).

Available options:
full,
full_anime_seasons,
simkl_ids_only,
ids_only
next_watch_info
enum<string>

When yes, attaches a next_to_watch_info object to each watched item, indicating the next episode to watch.

Available options:
yes
episode_tvdb_id
enum<string>

When yes, includes TVDB IDs on each episode in episode-bearing responses.

Available options:
yes
language
enum<string>

en forces English titles. It's the only accepted value — any other value is ignored and titles fall back to the user's profile language.

Available options:
en
anime_type
enum<string>

When movies, restricts the anime results to anime-movie subtype only.

Available options:
movies
episode_watched_at
string

yes adds per-episode watched_at timestamps to every loaded episode. Requires extended=full (or extended=full_anime_seasons) — it's a modifier on already-loaded episodes, so on its own it does nothing. To also cover completed / dropped items, combine with include_all_episodes (which itself also requires extended=full). Pair with date_from for continuous sync — significantly larger response.

Allowed value: "yes"
include_all_episodes
enum<string>
default:no

Three-value flag that controls per-episode loading on canonical entries. Requires extended=full — it has no effect on its own.

  • no (default) — Episode lists are loaded only for items in watching, plantowatch, and hold statuses. Items in completed and dropped skip episode loading entirely (you get only watched_episodes_count).
  • yes — Load episode lists for every status. For completed entries with no per-episode data recorded, synthesizes virtual episode rows stamped with the item's last-watched time (the same timestamp is shared across all synthesized rows). Complete coverage, approximate dates.
  • original — Load episode lists for every status, but skip virtual-episode synthesis. Completed entries get only their real recorded rows with real dates — which can be fewer than watched_episodes_count for an item the user marked complete in a single action. Treat the count as authoritative for how many episodes are watched, and the rows for which ones and when.

Independent of allow_rewatch=yes — combine the two when you need both canonical episode lists AND rewatch session episode lists in one response. Pair with date_from for continuous sync since the response can be much larger when episodes load for completed-bucket items.

Available options:
yes,
original,
no
memos
string

yes includes the user's per-item memo object (text capped at 140 chars, plus is_private) in addition to all other data. Field name is singular memo; empty memos render as {}.

Allowed value: "yes"
client_id
string
required

Your client_id from your Simkl developer settings. Required on every request.

app-name
string
required

Short, lowercase identifier for your app (e.g. plex-scrobbler, kodi-bridge). Helps Simkl identify which apps are using the API.

app-version
string
required

Your app's current version (e.g. 1.0, 2.4.1). Helps Simkl debug issues you report.

Response

Top-level dict keyed by shows, movies, and anime. Keys are present only when there's at least one item in that bucket — filtered calls (/movies/completed) return just that key; an empty library returns {}.

The per-item shape is AllItemsEntry — its fields are gated on the query parameters (extended, memos, next_watch_info, episode_watched_at, episode_tvdb_id, allow_rewatch, etc.). See the schema and the examples below for what each modifier adds.

Top-level dict keyed by shows, movies, and anime. Each key is an array of AllItemsEntry objects. Keys are present only when there's at least one item in that bucket — an empty library returns {}; a library with only movies returns { movies: [...] } with no shows or anime keys.

shows
object[]
movies
object[]
anime
object[]