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.
GET /redirect is a passive helper that 301-redirects to a Simkl URL given any combination of identifiers. It’s designed for two distinct situations — pick the one that matches your job.
Two use cases
1. Link to Simkl without an API call
You have an external ID or a title and you just want to send the user to the matching Simkl page (or trailer / share / mark-watched action). No
client_id, no JSON parsing.2. Cheapest external ID → Simkl ID
You have an IMDB / TMDB / TVDB / MAL ID and need the Simkl ID so you can call
/movies/:id, /tv/:id, or /anime/:id. /redirect is the lowest-overhead way to get there — read one header, no JSON parsing.Always returns
301 Moved Permanently with a Location header and Cache-Control: no-store. The type=show value matches both tv and anime. Like every Simkl endpoint, requests must include the required URL parameters (client_id, app-name, app-version) and a User-Agent header. No Authorization token is needed except for to=watched, which signs the user in if they aren’t already.Use case 1 — Link to Simkl when you don’t have a Simkl ID
You’re rendering a clickable link in a newsletter, a browser-extension menu, a “Share” button, or any external surface, and you’d rather not call the JSON API yourself. Hand/redirect whatever identifier you have on hand and it sends the user to the right place.
Action modes (to=)
| Mode | Redirects to |
|---|---|
simkl (default) | The Simkl page for the resolved item. |
trailer | The trailer URL (typically YouTube). |
twitter | A twitter.com/intent/tweet URL with the title and a Simkl link prefilled. |
watched | Marks the item watched on the user’s account. If the user isn’t signed in, Simkl first redirects through /oauth/authorize, then performs the action and lands them on the page. |
Recipes
Building the Simkl URL yourself
If you already have the Simkl ID and slug (returned inids.simkl_id and ids.slug on every standard media object), you don’t need /redirect at all — assemble the URL directly:
| Resource | URL pattern | ||
|---|---|---|---|
| Movie | https://simkl.com/movies/{simkl_id}/{slug} | ||
| TV show | https://simkl.com/tv/{simkl_id}/{slug} | ||
| Anime | https://simkl.com/anime/{simkl_id}/{slug} | ||
| TV season | https://simkl.com/tv/{simkl_id}/{slug}/season-{N} | ||
| TV episode | https://simkl.com/tv/{simkl_id}/{slug}/season-{N}/episode-{M} | ||
| Anime episode | https://simkl.com/anime/{simkl_id}/{slug}/episode-{M} | ||
| User profile | https://simkl.com/{username} | ||
| User stats | https://simkl.com/{username}/stats/ | ||
| User library | `https://simkl.com/{username}/{tv | movies | anime}/` |
slug is technically optional, but always include it when you have it. If you skip it, Simkl runs an extra title lookup and 301-redirects to the slugged URL anyway — wasted server time on Simkl’s side and an extra round-trip on yours. The slug is returned in ids.slug on every standard media object — store it alongside the Simkl ID and reuse.
Use case 2 — Resolve an external ID to a Simkl ID
You have an external ID (IMDB, TMDB, TVDB, MAL, AniDB, AniList, Kitsu, etc.) and you need the Simkl ID so you can fetch the full record from/movies/{id}, /tv/{id}, or /anime/{id}. This is the recommended path — /redirect returns a tiny redirect with the Simkl ID baked into the URL, and the detail endpoints are aggressively cached on Cloudflare by Simkl ID.
How /redirect resolves an ID
The response is a 301 with a Location header pointing at the canonical Simkl URL, e.g. https://simkl.com/tv/17465/game-of-thrones. Parse out 17465 and pass it to /tv/17465 to get the full record from Cloudflare cache.
- Tiny payload — just HTTP headers, no JSON to parse.
- Cached path — the follow-up detail call (
/movies/{id},/tv/{id},/anime/{id}) hits Cloudflare’s edge cache, so it stays cheap for repeat lookups of the same title. - Same required params as every Simkl endpoint — see Headers and required parameters.
How to extract the Simkl ID from the redirect
TheLocation header looks like one of:
/movies/, /tv/, or /anime/ is the Simkl ID. Then call the summary endpoint of your choice with that ID.
Recipes
What you can pass
/redirect accepts a wide set of identifiers — pass any combination, the more the better:
External IDs
Any of the supported ID keys —
simkl, imdb, tmdb (pair with type=movie or type=tv — TMDB has no anime type), tvdb, mal, anidb, crunchyroll, etc. Most stand alone.Title + year
title=...&year=...&type=.... Title-based fallback for when you have nothing else.Episode targeting
season (defaults to 1) and episode. Setting either one excludes movies from the search.Tweet text
ep_title is used when to=twitter to include the episode title in the tweet body.Endpoint reference
GET /redirect
Full parameter list, response codes, and an interactive playground.
Related
Standard media objects
Where the
ids.simkl_id and ids.slug fields come from.Detail endpoints
Once you have the Simkl ID, fetch the full record from
/movies/{id}, /tv/{id}, or /anime/{id} (Cloudflare-cached by ID).OAuth flow
to=watched first redirects through /oauth/authorize for unauthenticated users.