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.
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
Create a Simkl account
Sign up — free.
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, 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. Two flows:
| Your app runs on… | Use |
|---|---|
| iOS, Android, web, desktop — anywhere a browser opens | OAuth 2.0 |
| TV, console, watch, CLI tool, media-server plugin | PIN |
4. Get an access_token
- OAuth 2.0
- PIN flow
Send the user to the consent page (note the host: After approval, Simkl redirects to The response is
simkl.com, not api.simkl.com):YOUR_REDIRECT_URI?code=AUTH_CODE. Exchange the code on your server (this one hits api.simkl.com):{"access_token": "...", "token_type": "bearer", "scope": "public", "expires_in": 157680000} — a ~5-year token. Save it; treat any future 401 as “user revoked, re-run the flow”.Public clients (mobile apps, SPAs, desktop binaries) should use PKCE instead of shipping client_secret — see PKCE for public clients.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 is long-lived — store it once, reuse it on every call. It only stops working when the user revokes your app from Connected Apps settings, which surfaces as a 401 Unauthorized. Detect that and re-run the auth flow from Step 4.
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.
Auth — full reference
Multi-language samples (Swift / Kotlin / Node / Python), PKCE, common pitfalls.
API Reference
Every endpoint with an interactive playground.
Changelog
What’s new across endpoints, schemas, and the docs.