⚠️ Prefer
GET /redirect+ a cached detail endpoint over/search/idfor almost every external-ID lookupThe recommended two-step flow is materially cheaper, faster, and edge-cached:
Step 1 — Resolve the external ID to a Simkl ID. Call
GET /redirect?to=simkl&<external_id>=…and read (don’t follow) theLocationheader. Parse the Simkl ID out of the URL path. No JSON body to download, no JSON to parse — just HTTP headers.Step 2 — Fetch the full record from the cached detail endpoint. Use the parsed Simkl ID with the matching:
- Movies →
GET /movies/{simkl_id}- TV shows →
GET /tv/{simkl_id}- Anime →
GET /anime/{simkl_id}- Episode lists →
GET /tv/episodes/{simkl_id}orGET /anime/episodes/{simkl_id}These detail endpoints are Cloudflare-cached by Simkl ID with automatic server-side cache invalidation on metadata updates. Popular titles come straight from the edge cache and cost almost nothing.
Why this beats
/search/id:
/redirectreturns just HTTP headers (no JSON body)./search/idreturns JSON every call.- The detail endpoints are Cloudflare-cached.
/search/idis a search query that hits origin every time.- Two requests both cheap > one request that always hits origin.
- Concurrent / parallel lookups against the cached detail endpoints are explicitly allowed (see Rate limits → Parallel requests).
/search/idshould be called sequentially.When
/search/idis still the right call (rare):
- You need the legacy response shape for a code path you can’t change.
- You need a type-agnostic lookup that returns the
typefield upfront without parsing theLocationURL.
Look up Simkl records by any external ID — IMDB, TMDB, TVDB, MAL, AniDB, AniList, Kitsu, anisearch, anime-planet, livechart, letterboxd, Netflix, Trakt slug. Pass the ID as a query parameter (e.g. ?imdb=tt4574334).
{
"type": "anime",
"title": "Attack on Titan",
"poster": "39/396870bc78f2ba7e",
"year": 2013,
"status": "ended",
"total_episodes": 75,
"anime_type": "tv",
"ids": {
"simkl": 39687,
"slug": "attack-on-titan"
},
"mal": {
"id": 16498,
"type": "tv"
}
}
status is one of released, upcoming, ended, aired, tba. total_episodes is omitted for movies.
Full walkthrough of the two-step /redirect → cached detail endpoint flow, with the stop-at-301 reference table for popular HTTP clients and worked recipes in bash, JavaScript, and Python.
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.
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).
Simkl id.
hulu_id. All other parameters can be empty if this one specified.
Netflix movieid, this parameter is in beta and may not work.
MyAnimeList id.
TVDB ID. All other parameters can be empty if this one specified.
The Movie Database (TMDb) ID. All other parameters can be empty if this one specified. type parameter is required if you want to search for TV Shows
can be IMDB ID or full IMDB URL. All other parameters can be empty if this one specified.
^tt\d+$AniDB ID. All other parameters can be empty if this one specified.
Crunchyroll ID. You can pass episode ID or url ID(sword-art-online)
AniList ID
Kitsu ID
LiveChart ID
aniSearch ID
Anime-Planet ID
Only used when sending tmdb.
show, movie TV show, anime, or movie title. If this title has more then 1 item then null will be returned, add more fields to narrow down the search to 1 item(such as type,year etc.)
release year.
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.
AniFox / anfo.org ID. Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
Anime News Network (ANN) ID. Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
TV.com ID (legacy). Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
Zap2it (TVScheduleDirect) ID. Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
Trakt URL slug. Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
Letterboxd film slug (movies). Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
Letterboxd alias — same as letterboxd. Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
MyDramaList slug or ID (Korean / Asian dramas). Returns the matching Simkl title(s). See Standard media objects → Supported ID keys.
Array of matching catalog records — [] when no record matches the supplied IDs. There is no 404 for unknown IDs; an empty array is the not-found shape (Type 3 null — see Null and missing values).
Catalog category. Determines which detail endpoint to call next (/movies/{id} vs /tv/{id} vs /anime/{id}).
movie, tv, anime Display title in the canonical (often non-English) form. For an English-localized title use the per-type detail endpoint.
Release / airing status. released / upcoming apply to movies; ended / aired / tba apply to TV and anime. Note this enum is broader than the closed {tba, ended, airing} set the detail endpoints (/tv/{id}, /anime/{id}) use — /search/id is built on a different code path.
released, upcoming, ended, aired, tba Identifiers returned inside each /search/id result item. The server returns ONLY simkl and slug here — even when you queried by imdb, tmdb, tvdb, mal, etc., the response does NOT echo the input ID back in this block. To get the full canonical external-ID set for the matched record, follow up with the per-type detail endpoint (GET /movies/{simkl}, GET /tv/{simkl}, GET /anime/{simkl}) — those carry the full ID set.
Type 4 null — data not on file in that field's slot. See Null and missing values. Poster image path. See Images for how to build the URL.
Type 4 null — data not on file in that field's slot. See Null and missing values.
Total episode count. Omitted for movies (only present on type: tv and type: anime).
Only present on type: anime items. Distinguishes the anime catalog format (tv, movie, ova, ona, special, music video).
tv, movie, special, ova, ona, music video Was this page helpful?