A fire-and-forget version of /scrobble/start. Same effect on the user’s dashboard — the title appears in the “Watching now” widget with an animated, runtime-extrapolated progress bar — but you don’t need to follow up with pause / stop events. Simkl computes progress server-side from (now − checkin time) ÷ runtime; when that reaches 100%, the title is auto-marked watched.
Auto-completion timing: Once the computed progress reaches 100%, marking the item as watched can take anywhere from 0 to 2 minutes. Some check-ins finalize instantly; others sit at 100% briefly while the background worker picks them up. Don’t treat the delay as a failure — if you need to know exactly when it lands, check
GET /sync/activitiesafter the runtime expires; when the relevantcompleted/watchingtimestamp bumps, refresh viaGET /sync/all-items/{type}/{status}?date_from=…. That’s the same incremental loop documented in the Sync guide — no extra calls beyond what a normal sync would already do.
The user can browse and clean up active check-ins at the Playback progress manager.
| Situation | Use |
|---|---|
| You have real player events (play / pause / stop) and want exact progress | /scrobble/start → /pause → /stop loop |
| You can’t reliably hook into pause / stop (some embedded players, casting flows, hardware AV-out, social “I’m watching this” buttons) | checkin |
| You just want to record a watch after the fact, no live status | POST /sync/history |
No progress to update — the user can scrub or seek freely after check-in. The server’s runtime extrapolation doesn’t track real player position, so a user who checks in and then walks away is also auto-marked watched at the calculated runtime expiry. That’s a feature, not a bug, for fire-and-forget integrations.
Note: A 20-second per-user lock collision returns HTTP
400withRATE_LIMIT, not429— the lock failure is treated as a malformed request from a duplicate-fire client.
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).
Alternative to episode.season + episode.number: pass episode.ids with tvdb or anidb to identify the exact episode by external episode ID. Useful for media-server integrations that have a TVDB or AniDB episode ID but not the season/number mapping. (Episode-level imdb and tmdb IDs are not accepted — those exist only at the show/movie level. Use the show/anime object’s ids for those.) If both forms are sent, episode.ids takes precedence.
Which IDs can I send/expect? All accepted input identifiers and the keys you’ll see echoed back in responses are listed at Standard media objects → Supported ID keys. Send every ID you have on writes — Simkl picks the first that resolves and ignores the rest. Reminder: slug is response-only (never send it on a request).
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.
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.
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.
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).
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.
Request body for the four scrobble endpoints. Send exactly one of movie, show+episode, or anime+episode — all keys are singular objects (one item per request). For batch sync writes the keys are plural arrays: see /sync/history etc. progress is required for /scrobble/start, /scrobble/pause, and /scrobble/stop; on /scrobble/checkin it is optional and ignored server-side.
Anime under show? Yes — if you don't know whether a title is anime (e.g. you only have TMDB/TVDB data), send it under show and Simkl resolves it to the correct catalog automatically. The anime key is only needed when you want to pass anidb / mal / anilist IDs that don't exist at the TV-show level.
Movie reference. Use ids (any one external ID) and optionally title / year. Movies have no episode block.
Hide child attributes
External IDs for a movie. Pass any one or more — Simkl resolves the canonical record by walking these in priority order. simkl is the most reliable when you have it.
Hide child attributes
Simkl movie ID.
472214
Simkl URL slug (echoed back in responses).
"inception"
IMDb ID, e.g. tt1375666.
"tt1375666"
TMDb movie ID.
27205
Netflix movie ID.
Trakt movie slug, e.g. inception-2010.
Letterboxd slug, e.g. inception.
Letterboxd numeric ID (alternative to letterboxd).
"Inception"
2010
Playback percentage 0-100. Up to 2 decimals. Required for /scrobble/start, /scrobble/pause, /scrobble/stop. Optional (and ignored) for /scrobble/checkin.
0 <= x <= 100TV show reference (must be paired with episode).
Hide child attributes
External IDs for a TV show. Pass any one or more.
Hide child attributes
Simkl show ID.
548312
Simkl URL slug (echoed back in responses).
"stranger-things"
IMDb ID, e.g. tt4574334.
"tt4574334"
TMDb show ID.
66732
TVDB show ID (integer) or slug (string).
305288
Netflix show ID.
Hulu show ID.
Trakt show slug.
Zap2it ID.
TV.com ID.
MyDramaList slug or ID.
"Stranger Things"
2016
Anime reference. Pair with episode for series; an anime alone (no episode) is treated as an anime movie / OVA.
Hide child attributes
External IDs for an anime. Any one is enough; mal / anidb / anilist / kitsu are most useful for anime-only sources, while simkl, imdb, tmdb, and tvdb work for the cross-domain mapping.
Hide child attributes
Simkl anime ID.
39687
Simkl URL slug.
"shingeki-no-kyojin"
IMDb ID.
"tt2560140"
TMDb show or movie ID (depending on anime_type).
1429
TVDB show ID (integer) or slug (string).
267440
MyAnimeList ID.
16498
AniDB ID. Specifying just this is enough for anime lookups.
9541
AniList ID.
16498
Kitsu ID.
7442
aniSearch ID.
Anime-Planet slug.
LiveChart ID.
AnimeNewsNetwork-style anfo ID.
AnimeNewsNetwork ID.
"Shingeki no Kyojin"
2013
Episode identifier. Use season + number, OR ids with a tvdb / anidb episode ID. If both are sent, episode.ids takes precedence (matches Plex-style integrations that have an episode ID but no season/number mapping).
Hide child attributes
Season number. 0 is the specials season.
x >= 01
Episode number within the season.
x >= 13
Created
Response for /scrobble/start, /scrobble/pause, and /scrobble/stop.
start for /start, pause for /pause and for /stop with progress<80, scrobble for /stop with progress≥80 (item marked watched).
start, pause, scrobble Echo of the request progress, normalized.
Internal session ID.
Standard movie object. See the Standard Media Objects guide.
Hide child attributes
External and internal identifiers for an item. Pass as many as you have — Simkl resolves to the canonical record.
Hide child attributes
Simkl internal ID. Most reliable.
53536
URL-safe slug returned in responses.
"attack-on-titan"
IMDb ID.
"tt0181852"
TMDb ID.
"296"
TVDB ID or slug.
153021
MyAnimeList ID.
"4246"
AniDB ID. Specifying just this is enough for anime lookups.
"10846"
AniList ID.
"21"
Kitsu ID.
"12"
aniSearch ID.
"2227"
Anime-Planet slug.
"one-piece"
LiveChart ID.
"321"
Letterboxd slug.
"the-truman-show"
Netflix movie ID.
"70210890"
Hulu episode ID.
Crunchyroll episode ID.
Trakt slug.
"john-wick-chapter-4-2023"
{
"simkl": 53536,
"imdb": "tt0181852",
"tmdb": 296
}
"Terminator 3: Rise of the Machines"
2003
Standard show object. May include nested seasons/episodes for partial sync.
Hide child attributes
External and internal identifiers for an item. Pass as many as you have — Simkl resolves to the canonical record.
Hide child attributes
Simkl internal ID. Most reliable.
53536
URL-safe slug returned in responses.
"attack-on-titan"
IMDb ID.
"tt0181852"
TMDb ID.
"296"
TVDB ID or slug.
153021
MyAnimeList ID.
"4246"
AniDB ID. Specifying just this is enough for anime lookups.
"10846"
AniList ID.
"21"
Kitsu ID.
"12"
aniSearch ID.
"2227"
Anime-Planet slug.
"one-piece"
LiveChart ID.
"321"
Letterboxd slug.
"the-truman-show"
Netflix movie ID.
"70210890"
Hulu episode ID.
Crunchyroll episode ID.
Trakt slug.
"john-wick-chapter-4-2023"
{
"simkl": 53536,
"imdb": "tt0181852",
"tmdb": 296
}
"The Walking Dead"
2010
Hide child attributes
Hide child attributes
x >= 01
x >= 12
ISO-8601 GMT timestamp.
"2014-09-01T09:10:11Z"
External and internal identifiers for an item. Pass as many as you have — Simkl resolves to the canonical record.
Hide child attributes
Simkl internal ID. Most reliable.
53536
URL-safe slug returned in responses.
"attack-on-titan"
IMDb ID.
"tt0181852"
TMDb ID.
"296"
TVDB ID or slug.
153021
MyAnimeList ID.
"4246"
AniDB ID. Specifying just this is enough for anime lookups.
"10846"
AniList ID.
"21"
Kitsu ID.
"12"
aniSearch ID.
"2227"
Anime-Planet slug.
"one-piece"
LiveChart ID.
"321"
Letterboxd slug.
"the-truman-show"
Netflix movie ID.
"70210890"
Hulu episode ID.
Crunchyroll episode ID.
Trakt slug.
"john-wick-chapter-4-2023"
{
"simkl": 53536,
"imdb": "tt0181852",
"tmdb": 296
}
Standard anime object. Like Show, but may include anime_type. Episode numbering follows AniDB.
Hide child attributes
External and internal identifiers for an item. Pass as many as you have — Simkl resolves to the canonical record.
Hide child attributes
Simkl internal ID. Most reliable.
53536
URL-safe slug returned in responses.
"attack-on-titan"
IMDb ID.
"tt0181852"
TMDb ID.
"296"
TVDB ID or slug.
153021
MyAnimeList ID.
"4246"
AniDB ID. Specifying just this is enough for anime lookups.
"10846"
AniList ID.
"21"
Kitsu ID.
"12"
aniSearch ID.
"2227"
Anime-Planet slug.
"one-piece"
LiveChart ID.
"321"
Letterboxd slug.
"the-truman-show"
Netflix movie ID.
"70210890"
Hulu episode ID.
Crunchyroll episode ID.
Trakt slug.
"john-wick-chapter-4-2023"
{
"simkl": 53536,
"imdb": "tt0181852",
"tmdb": 296
}
"Attack on Titan"
2013
Anime production format. tv is the common case; movies, OVAs, ONAs, and music videos all surface through the /anime/* endpoints with the same response shape.
tv, movie, special, ova, ona, music video Hide child attributes
x >= 01
x >= 12
ISO-8601 GMT timestamp.
"2014-09-01T09:10:11Z"
External and internal identifiers for an item. Pass as many as you have — Simkl resolves to the canonical record.
Hide child attributes
Simkl internal ID. Most reliable.
53536
URL-safe slug returned in responses.
"attack-on-titan"
IMDb ID.
"tt0181852"
TMDb ID.
"296"
TVDB ID or slug.
153021
MyAnimeList ID.
"4246"
AniDB ID. Specifying just this is enough for anime lookups.
"10846"
AniList ID.
"21"
Kitsu ID.
"12"
aniSearch ID.
"2227"
Anime-Planet slug.
"one-piece"
LiveChart ID.
"321"
Letterboxd slug.
"the-truman-show"
Netflix movie ID.
"70210890"
Hulu episode ID.
Crunchyroll episode ID.
Trakt slug.
"john-wick-chapter-4-2023"
{
"simkl": 53536,
"imdb": "tt0181852",
"tmdb": 296
}
Episode reference. Use season + number, or ids.
Hide child attributes
x >= 01
x >= 12
ISO-8601 GMT timestamp.
"2014-09-01T09:10:11Z"
External and internal identifiers for an item. Pass as many as you have — Simkl resolves to the canonical record.
Hide child attributes
Simkl internal ID. Most reliable.
53536
URL-safe slug returned in responses.
"attack-on-titan"
IMDb ID.
"tt0181852"
TMDb ID.
"296"
TVDB ID or slug.
153021
MyAnimeList ID.
"4246"
AniDB ID. Specifying just this is enough for anime lookups.
"10846"
AniList ID.
"21"
Kitsu ID.
"12"
aniSearch ID.
"2227"
Anime-Planet slug.
"one-piece"
LiveChart ID.
"321"
Letterboxd slug.
"the-truman-show"
Netflix movie ID.
"70210890"
Hulu episode ID.
Crunchyroll episode ID.
Trakt slug.
"john-wick-chapter-4-2023"
{
"simkl": 53536,
"imdb": "tt0181852",
"tmdb": 296
}
For anime: original TVDB season number when AniDB mapping differs.
For anime: original TVDB episode number when AniDB mapping differs.
Was this page helpful?