時間 jikan-edge
Unofficial MyAnimeList API · Jikan functional parity

Anime data, served from the edge.

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.

https://jikan.lucashdo.com copy
97 routes 7 ms p50 no auth free forever MIT licensed
GET
— — —
Press a tab to fire a real request against this API…

97 routes, one worker

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 }.

Anime 23 routes

search + filtersdetailfullcharactersstaffepisodesvideospicturesstatisticsnewsforumrelationsthemesexternalstreamingrecommendationsreviewsmoreinfouserupdatesgenres
GET /v1/anime/1
Cowboy Bebop
score★ 8.75
episodes26
statusFinished Airing
genresAction, Sci-Fi

Manga 16 routes

search + filtersdetailfullcharacterspicturesstatisticsnewsforumrelationsexternalrecommendationsreviewsmoreinfouserupdatesgenres
GET /v1/manga/2
Berserk
score★ 9.47
statusPublishing
authorsMiura, Kentarou
genresAction, Horror

Characters & People 17 routes

detailfullanimemangavoicespicturesnewssearchtop
GET /v1/characters/1
Spike Spiegel
favorites49,244
animeographyCowboy Bebop +2
voicesYamadera, Kouichi (JP)

Users 13 routes

profilefullaboutstatisticsfavoritesupdatesfriendsclubsreviewsrecommendationsanimelistmangalistsearch
GET /v1/users/:username/statistics
anime · manga stats
daysWatched142.3
meanScore7.84
completed428
totalEntries612

Seasons & Schedules 5 routes

nowyear/seasonupcomingarchiveweekly schedule?filter=monday…sunday
GET /v1/seasons/now
this season's list
titleMushoku Tensei III
score★ 8.75
episodes14
members282,269

Clubs, Producers & Magazines 10 routes

club detailmembersstaffrelationsproducer directorydetailfullexternalmagazines ?q=
GET /v1/producers/4
Bones
favorites~40,000
established1998
externalbones.co.jp +3

Watch, Reviews & Recs 8 routes

recent episodespopular episodesrecent promospopular promosglobal reviewsglobal recommendationspagination
GET /v1/reviews/anime
latest reviews feed
useranime_fan_92
score9 / 10
tagRecommended
text"An absolute classic that…"

Random 5 routes

animemangacharacterspeopleusers
GET /v1/random/anime
🎲 a surprise from the cache
malId???
titledifferent every time
sourcelocal D1 catalog

Full reference with parameters, conventions and a live runner per route: Documentation · deeper per-route evidence: docs/routes.md

How it works

No servers, no queues, no headless browsers. One Worker, one D1 database, and the public HTML pages MyAnimeList already serves to everyone.

01

Fresh? Serve from D1.

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.

02

Miss? Fetch once, parse, persist.

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.

03

Upstream down? Serve stale.

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.

Rate limits — two per-IP windows enforced globally across all routes, mirroring Jikan's own policy: 30 req / 10 s burst and 60 req / min sustained. Exceeding either returns 429 with a Retry-After header.

Migrating from Jikan?

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.