This site has three tabs — switch via the header bar at the top of the page.
Documentation
You’re here. Concepts, walkthroughs, and recipes.
API Reference
Every endpoint with parameter docs and a try-it-now playground.
Changelog
What’s new and what changed across the API and the docs.
- Made your first API call in 10 seconds with no setup
- Created an app and obtained an
access_tokenfor a user - Read the user’s “Watching” anime watchlist
- Marked Inception as completed in that user’s history
Before you ship to users, read API rules. It’s a short page covering attribution, free-for-non-commercial terms, and the threshold where a commercial license kicks in. Skipping it is the most common reason apps get throttled or revoked.
0. See real Simkl data right now
Trending data files are public CDN — no token required. Like every Simkl URL, the call still includes the standardclient_id / app-name / app-version params plus a User-Agent header for consistency:
access_token on top of the API key.
1. Get an API key
1
Create a Simkl account
Sign up — free.
2
Create an application
Go to your developer settings and create a new app. You’ll receive a
client_id (and a client_secret for confidential clients).Pick an app-name (lowercase identifier like plex-scrobbler) and an app-version (e.g. 1.0). These three values — client_id, app-name, app-version — go on every API request as URL parameters. See Headers and required parameters.2. Make your first authenticated catalog call
Catalog endpoints (Movies, TV, Anime metadata) need the API key but no user token. Fetch the Game of Thrones summary by its Simkl ID —tv/17465 is heavily cached, so this is the cheapest endpoint to hit while you’re testing:
title, year, ids, overview, genres, ratings, poster, fanart, trailers, users_recommendations, similar, and more. Summary endpoints (/movies/:id, /tv/:id, /anime/:id, plus the /episodes/:id variants) return this rich shape by default — no ?extended=full needed. If anything errors out, Errors and status codes lists every code with cause / fix — 412 typically means a typo in client_id.
3. Pick an authentication flow
To touch user-specific data (watchlist, history, ratings), you need a useraccess_token. AUTH V2 has two flows, chosen by what the device can do:
Use AUTH V2 for anything new. The older AUTH V1 flows still work but are being retired around April 2027, so starting there means doing this work twice.
4. Get an access_token
Both flows need acode_verifier / code_challenge pair or a device code — the short versions are below, and the full walkthroughs are linked underneath.
- OAuth flow
- Device / PIN flow
Generate a After approval Simkl redirects to You get back an
code_verifier and its SHA-256 code_challenge (how), then send the user to the consent page — note the host is simkl.com, not api.simkl.com:YOUR_REDIRECT_URI?code=AUTH_CODE&state=...&iss=https%3A%2F%2Fsimkl.com. Check that state matches what you sent and that iss decodes to exactly https://simkl.com — both, then exchange the code. This one hits api.simkl.com:access_token good for 7 days and a refresh_token good for 180. A Server apps & services registration also sends its client_secret; a Mobile, desktop & browser apps one does not ship a secret at all. See client types.Full walkthrough: Authorization code flow.5. Read the user’s library
With theaccess_token in hand, fetch the user’s “Watching” anime watchlist:
Per-type watchlist rules: TV and anime accept all five statuses (
watching, plantowatch, hold, dropped, completed). Movies skip watching and hold (single-session content). See Watchlist statuses for the full matrix.6. Write something back
Mark Inception as completed in the user’s library. Sending the title, year, and multiple IDs at once gives Simkl the best chance of matching the right record — handy when one of the external IDs is missing or out of date in Simkl’s catalog:201 Created response means the movie is now in the user’s history. To undo it later, hit POST /sync/history/remove with the same payload shape.
Token reminder
Youraccess_token expires after 7 days — plan for that from the start. It came with a refresh_token valid for 180 days, and using it resets that 180-day window, so an app in regular use never has to ask the user again.
Refresh when the access token is close to expiring, or on a 401. Only send the user back through Step 4 if the refresh also fails — that means they revoked your app from Connected Apps settings, or the refresh token itself finally aged out.
Store both tokens, not just the access token. Full detail on Refreshing.
If you are reading older AUTH V1 material, it says tokens last five years and there is no refresh grant. That was true of V1 and is not true here — V2 is 7 days plus refresh. Do not carry a “store it once and forget it” assumption across from a V1 integration.
Useful side-trips
Cheapest way to resolve an IMDB ID
GET /redirect?to=simkl&imdb=tt1375666 301-redirects to the Simkl URL. Parse the ID from the path, no JSON to read.Trending without auth
Pre-built JSON for “Most Watched” surfaces — Today / Week / Month, per type. CDN-cached, free.
Calendar without auth
Upcoming TV / anime / movie releases as static JSON. Per-month archives going back 12 months.
What’s next
Sync guide
Read and write watchlists, history, and ratings — the full sync loop.
Scrobble guide
Real-time playback tracking with start / pause / stop / checkin.
Mark as watched
Single-call recipes that don’t go through scrobble.
Search guide
Find titles by ID, text, file name, or randomly.
Standard media objects
The Movie / Show / Anime / Episode shapes every endpoint speaks.
Errors
Every status code with cause / fix / example.
Set up authentication
Client type, secret, flow and scope — the decisions you make before writing auth code.
API Reference
Every endpoint with an interactive playground.
Changelog
What’s new across endpoints, schemas, and the docs.