Every endpoint that talks about a movie, show, anime, or episode uses the same JSON shapes. Learn them once and you can read or write any endpoint.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.
The ids object
The ids object is the heart of every media object. It’s how Simkl identifies what you mean across all the catalogs you can integrate with. Pass as many IDs as you have — Simkl resolves to the canonical record and returns the rest.
Supported ID keys
| Key | Type | Example |
|---|---|---|
simkl | integer | 53536 — Simkl’s canonical ID. Globally unique and permanent. |
imdb | string | tt0181852 |
tmdb | integer | 296 — Not unique across types; always pair with type=movie or type=tv when resolving via /redirect. TMDB has no anime type; anime is filed under tv on TMDB. |
tvdb | int / string | 153021 or the-walking-dead |
mal | integer | 4246 |
anidb | integer | 10846 |
anilist | integer | 21 |
kitsu | integer | 12 |
anisearch | integer | 2227 |
animeplanet | string | one-piece |
livechart | integer | 321 |
letterboxd | string | the-truman-show |
netflix | integer | 70210890 |
traktslug | string | john-wick-chapter-4-2023 |
crunchyroll | integer | 656647 (episode-level) |
hulu | integer | 681868 (episode-level) |
Movie
simkl is known, the minimum is just:
Show
A show object can include nested seasons and episodes for partial sync:Anime
Same JSON shape as Show, plusanime_type and an optional flat episodes list. Simkl uses AniDB as its primary metadata source — episodes follow the anime-native model by default (each cour is its own title, episodes restart at 1). Simkl also accepts Western TVDB/TMDB-style season + number coordinates and cross-maps both to the same canonical episode.
Handling anime — full guide
Two integration paths (TMDB/TVDB-primary with
use_tvdb_anime_seasons, or anime-native with AniDB/MAL/AniList/Kitsu IDs), the cross-mapping rules, write/read recipes, and edge cases like Attack on Titan and Solo Leveling.anime_type
Anime items include an anime_type field with one of these values:
tvspecialovamoviemusic videoona
Episode
Inside aseasons[].episodes[] array (or a flat episodes array), an episode is identified by season + number, or directly by ids. Optionally include watched_at to record when it was watched.
ids. For episode-ID lookups in scrobble / sync writes, Simkl accepts only tvdb and anidb at the episode level. If both are sent, tvdb is tried first. Episode-level imdb and tmdb IDs do not exist on Simkl — those external services only assign IDs at the show/movie level.
Catalog responses (e.g.
/tv/episodes/{id}) may echo additional episode-level keys like simkl (Simkl’s internal episode ID), hulu, or crunchyroll. Those are informational — they’re returned for cross-reference but are not accepted for episode-ID lookup. Always send season + number (preferred) or tvdb / anidb when identifying an episode in a request.Tips for sending media objects
Pass as much identifying data as you can
Pass as much identifying data as you can
title, year, and any IDs you have. Simkl uses all of it to disambiguate. If two movies share a title and year, IDs save the day.When sending IDs, simkl wins
When sending IDs, simkl wins
If you send
simkl: 53536 and imdb: "tt9999999" and they disagree, Simkl uses the simkl ID. Send only one source of truth when you can.Anime episode numbering — read this once
Anime episode numbering — read this once
Simkl uses the anime-native model (each cour is its own title, episodes restart at 1) — same as AniDB / MAL / AniList / Kitsu / AniSearch / Anime-Planet / LiveChart / ANN. Western TV catalogs (TVDB / TMDB / IMDB) use the franchise-with-seasons model instead. The Scrobble and Sync endpoints accept both schemes and Simkl maps automatically — the response includes both
season/number (anime-native) and tvdb_season/tvdb_number (Western style) for reference. See Anime episode numbering for the full mapping rules.