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.
simkl is an integer, every other ID is a string. Thatβs exactly how responses come back, and requests accept this form too β see Supported ID keys below.
Supported ID keys
The table below gives the response type for each key.
Accepted on requests but not returned in responses. These resolve a title when you send them to
/redirect or /search/id, but Simkl doesnβt echo them back in ids: crunchyroll, netflix, hulu, anisearch, animeplanet, livechart, anfo, ann, tvcom, zap2it, mdl, boxd.
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.
tvdb and anidb are request-only at the episode level. Catalog responses (e.g. /tv/episodes/{id}, /anime/episodes/{id}) return a single key in each episodeβs ids β simkl_id, an integer, Simklβs own episode ID:tvdb, anidb, hulu, or crunchyroll back. 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.