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=)
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:
The
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.