An open-source REST API over public MyAnimeList pages — anime, manga, characters, people, seasons, users and more — running entirely on Cloudflare Workers with D1-backed caching and stale fallback. No auth. Open CORS. MIT.
The full Jikan v4 functional surface, minus the parts MyAnimeList doesn't actually expose
(documented below, not swept under the rug). Responses are camelCase and wrapped in
{ data, meta }.
Full reference with parameters, conventions and a live runner per route: Documentation · deeper per-route evidence: docs/routes.md
No servers, no queues, no headless browsers. One Worker, one D1 database, and the public HTML pages MyAnimeList already serves to everyone.
Cached data within TTL (6 h for most resources, 2 h for user lists) is returned straight from the edge database — MyAnimeList is never touched.
A cache miss fetches the public page a single time, runs a pure HTML parser, validates the document, and stores the normalized result. Refresh locks stop thundering herds.
If a refresh fails and a stale copy exists, you still get a 200 — flagged with
meta.stale: true instead of an error. Valid data is never replaced by a suspicious document.
429 with a Retry-After header.
One click, one paste. The button below copies a ready-made prompt for your AI coding agent
(Claude Code, Cursor, Copilot…) that ports a project from api.jikan.moe/v4 to
jikan-edge — envelope, naming, pagination, rate limits, everything.
Not a drop-in swap, and it isn't trying to be: the envelope is
{ data, meta }, fields are camelCase, genres and studios carry their
malId, and dates come split into { from, to, string }. The prompt covers
all of it, plus pagination, 429 handling and the
routes we don't serve — and asks the agent to verify every
endpoint against the live API.