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.
Help us keep the Simkl API at 100% uptime — optimise your app’s requests
The limits below are generous and most apps never hit them. The ones that do are almost always parallelizing calls to endpoints that should be sequential, or polling/sync/all-items without gating behind /sync/activities. The patterns on this page keep your app fast and keep the API healthy for every other developer building on Simkl.1. Link back to Simkl
Wherever Simkl data appears in your app, link back to the Simkl page for that specific item — not just a generic homepage link. Better for users (they can dive into ratings, episodes, related titles, reviews), better for Simkl, and trivial to implement.- Movie
- TV show
- Anime
https://simkl.com/movies/:simkl_id/:slug — exampleids.simkl and ids.slug are returned on every standard media object, so the slug is free — you already have it in the response you just parsed.
build-simkl-url.js
- TV detail responses set
item.type = "show"even though the URL section is/tv/. The map deliberately only listsmovieandanime; anything else (including"show"and the emptytypereturned by/search/*and/{movies|tv|anime}/trending) falls through to/tv/— Simkl will 301 to the correct section if needed, but you should setitem.typeyourself when you already know it (e.g. on/movies/trendingresults) to skip that hop. - The id key is either
ids.simkl(detail endpoints,/sync/*responses, request bodies) orids.simkl_id(/search/*,/trending,/calendar,/genres,/best,/premieres, episode-level detail). The same integer; the key name differs by endpoint family —simkl || simkl_idcovers both. See Standard media objects → Supported ID keys.
Don’t have a Simkl ID yet? If all you have is an external ID — IMDB, TMDB, TVDB, MAL, AniDB, etc. — drop a Click to try it → lands on
/redirect URL straight into your <a href>. No request, no parsing, no JSON — the browser follows the 301 for you and the user lands on the canonical Simkl page.https://simkl.com/tv/17465/game-of-thrones.Where to put the link in your UI
Where to put the link in your UI
Six placements that count as proper attribution:
- Detail page — a “View on Simkl” button or
Source: Simklline under the cover art. - List / grid rows — make the cover or title clickable directly to the item’s Simkl page.
- Hover cards / tooltips — include a “More on Simkl →” link inside the popover.
- Footer / About — a one-time
Movie, TV and anime data from Simklline. - Trending sections — the title must say “Simkl” (see rule 6) and items should deep-link to their Simkl page.
- Empty / loading states — “Powered by Simkl” line linking to simkl.com when no specific item is in view yet.
Fallback when per-item links genuinely aren't possible
Fallback when per-item links genuinely aren't possible
For a one-line text widget or a watch ticker where you only have room for a single link, a visible link to simkl.com is the minimum.
What does NOT count as attribution
What does NOT count as attribution
- A
simkl.comlink buried in your privacy policy with no visible UI attribution. - An unbranded
<a href="https://simkl.com">More info</a>that doesn’t say “Simkl”. - Fetching Simkl data into your own database and dropping the link entirely.
Example attribution snippets
Example attribution snippets
These are just illustrative samples — not visual requirements. Match the colours, shape, type, and density to your own design system. The only attribution rules are the substantive ones above: Simkl is named, the brand mark is visible, and the link goes to the per-item page with the slug.
filter:| Asset | URL |
|---|---|
| Colored PNG | https://us.simkl.in/img_favicon/v2/favicon-192x192.png |
| Monochrome SVG | https://us.simkl.in/img_favicon/v2/safari-pinned-tab.svg |
Not sure how to implement this for your specific app? DM us on Discord or visit support.simkl.com — we’ll help you find the right placement.
2. Tracker apps must offer Simkl sync
If your app or service is a Movie / TV / Anime / Manga tracker that already syncs with another tracker, you may use the Simkl API only if you also offer Simkl login and sync alongside. In other words: the catalog and discovery endpoints are not a free metadata source for a competing tracker that doesn’t integrate Simkl. If you’re integrating Simkl as one of multiple supported services in a media app, you’re good. If you’re using Simkl’s catalog without offering Simkl sync, contact us first.3. Use TVDB / TMDB for raw metadata
If you need a generic metadata host, please use TVDB and TMDB APIs from their original sources. Simkl is built for tracking and discovery, not as a CDN for the world’s metadata.4. Keep your client_secret secret
For client-side apps that can’t keep a secret, pick the flow that matches your platform — both work without client_secret:
- Mobile, single-page app, browser extension, desktop binary — use Public PKCE. Same browser-based UX as the standard OAuth flow, with a one-time
code_verifierinstead of a shipped secret. - TV, console, smartwatch, CLI tool, media-server plugin — use the PIN flow. Show a 5-character code, the user enters it on their phone.
5. Free for non-commercial use, and under $150 / month
The Simkl API is free for:- Non-commercial apps and personal projects.
- Commercial apps and services that generate less than $150 / month in revenue.
Running the API at scale costs us real money in DNS, routing, health checks, CDN, server hosting, failover, and ops. Commercial fees cover those costs proportional to your usage.
6. Attribute Simkl in trending UI
If you display Trending data, you must use a section title that names Simkl — for example,Simkl Trending Today, Trending on Simkl This Week, Simkl Trending Movies. Full rules and examples on the Trending page.
7. Be a good API citizen
These are the habits well-built apps share. They keep your app fast, keep your users happy, and keep your traffic well clear of the rate-limit and overage patterns that trip the suspension warning at the top of this page.Cache aggressively
Cache aggressively
Most metadata never changes. Cache by URL on the device — minutes for user data, hours for catalogs, forever for images.
Use the CDN files where you can
Use the CDN files where you can
Sync incrementally
Sync incrementally
Never call watchlist endpoints without first checking
/sync/activities. And never run unconditional background polling timers without active user interaction.Use a two-phase pattern:-
Initial sync (one time per user) — pull the full library, no
date_fromon this pass.- Multi-type apps: call
/sync/all-items/shows,/sync/all-items/movies,/sync/all-items/animesequentially (not in parallel — back-to-back massive payloads spike your CPU and ours). - Single-type apps (anime-only, movie-only, TV-only): call only the one type you care about.
- Multi-type apps: call
-
Continuous sync (every poll after that) — call
/sync/activitiesfirst; if every timestamp matches what you stored locally, skip. Otherwise:- Multi-type apps:
/sync/all-items?date_from=YOUR_SAVED_TIMESTAMP— pulls deltas across all types and statuses in one response. - Single-type apps:
/sync/all-items/{your_type}?date_from=YOUR_SAVED_TIMESTAMP— same delta semantics, scoped to one type so you don’t transfer data you’ll discard.
activities.alltimestamp for next time. - Multi-type apps:
- Mobile / TV apps — app start, wake-from-background, pull-to-refresh. Throttle to once per 15–30 min.
- Media servers (Plex, Kodi, Jellyfin) — library-scan-completed events, or when a playback session ends.
Batch writes
Batch writes
POST /sync/history, POST /sync/history/remove, POST /sync/ratings, and POST /sync/add-to-list all accept arrays. Send 50 items in one call, not 50 calls.Set a User-Agent
Set a User-Agent
Identify your app:
myapp/1.0. It helps us tell legitimate clients apart from bad actors and keeps you out of any accidental blocks.Retry transient errors with backoff
Retry transient errors with backoff
On
429, 500, 502, 503: wait, retry, double the wait, cap at 60s, give up after 5 attempts. See Errors.More
Rate limits
The full set of limit signals and how to handle them.
Errors
Every status code Simkl returns and what to do about it.
Get help
Discord, email, GitHub — pick your favorite.