MyAnimeList API (Official) logo

MyAnimeList API (Official)

MyAnimeList API (Official)

UnknownFreemedia

MyAnimeList’s official API v2 (https://api.myanimelist.net/v2). Reading public data requires registering an app for a Client ID and sending an X-MAL-CLIENT-ID header; anything involving a specific user (reading/writing their anime/manga list, status, scores) requires the full OAuth2 authorization-code flow. It is the only MyAnimeList API that can authenticate as a user and write to a user’s list — exactly where it is irreplaceable versus the unofficial Jikan. Rate limits are unpublished; ~1 req/sec is the safe assumption in practice. Free.

Use it when

The only one that can write to a user’s list: read/write status, scores, and list entries as the logged-in user — something Jikan can never do

Watch for

Heavy OAuth2 friction: register an app, implement the authorization-code flow, handle redirect URIs, store and refresh tokens — all wasted work if you only display public data

First check

Register an application at https://myanimelist.net/apiconfig to get a Client ID. For public reads, send the header X-MAL-CLIENT-ID: YOUR_CLIENT_ID, e.g. GET https://api.myanimelist.net/v2/anime?q=frieren&limit=5. To read or write a user’s own list, implement the OAuth2 authorization-code flow: after the user logs in and grants permission you receive an access token, then call endpoints like /users/@me/animelist with Authorization: Bearer USER_ACCESS_TOKEN. Rate limits are undocumented, so assume ~1 req/sec. If your feature only displays public data and never touches a user account, consider the key-less Jikan to skip OAuth2 entirely.

Auth
oauth
CORS
?
HTTPS
Yes
Signup
Required
Protocol
REST
Pricing
free

Uptime · 30-day window

Health history will appear here after the next daily check.
01

About this API

The official MyAnimeList API v2 is the interface MyAnimeList ships itself, at https://api.myanimelist.net/v2. It differs from the unofficial Jikan in two key ways. First, even reading public data requires identifying your app: you register an application at https://myanimelist.net/apiconfig, receive a Client ID, and send it as an X-MAL-CLIENT-ID header; without it, public reads fail with an unauthorized error. Second, anything involving a specific user — reading their list (including private entries), updating watch status (watching/completed/on-hold/dropped/plan-to-watch), setting or changing scores, adding or removing list entries — requires the full OAuth2 authorization-code flow, where the user logs in and grants your app permission and you receive an access token scoped to that user. That OAuth2 path is the entire reason the official API exists for most developers, and it is where it is irreplaceable versus Jikan: only it can authenticate as a user and write to a user’s list. The trade-off is real friction — you go from "send a GET" to registering an app, implementing OAuth2, handling redirect URIs, storing and refreshing tokens, and managing per-user scopes. If your feature never touches a user account, that is wasted work. On rate limiting the official side publishes no clear numbers; the community consensus is to stay around 1 request/second to avoid throttling. In practice many MyAnimeList integrations use both APIs: the public catalog (search, detail, seasons, rankings) on the key-less, broad-coverage Jikan, and only the thin per-user slice on the official API’s OAuth2 — the public majority gets Jikan’s zero friction, and you pay the OAuth2 cost only for the part that genuinely needs it.

02

What you can build

  • 1The write path of an anime tracker: let users sign in with their MyAnimeList account and read/write their watch status, scores, and list entries — only the official API can do this
  • 2Account sync and backup: use OAuth2 to read a user’s full anime/manga list (including private entries) for export or cross-device sync
  • 3Displays needing real-time accuracy: hit the official API directly for the freshest public data, avoiding Jikan’s cache lag
03

Strengths & limitations

Strengths

  • The only one that can write to a user’s list: read/write status, scores, and list entries as the logged-in user — something Jikan can never do
  • Real-time data: straight from the official source, no cache lag
  • Official and free: maintained by MyAnimeList itself, with no paid tier

Limitations

  • Heavy OAuth2 friction: register an app, implement the authorization-code flow, handle redirect URIs, store and refresh tokens — all wasted work if you only display public data
  • Even public reads need a Client ID: without the X-MAL-CLIENT-ID header, public reads fail as unauthorized, unlike Jikan’s fully key-less access
  • Unpublished rate limits: there is no clear rate documentation, so you conservatively assume ~1 req/sec
04

Official quickstart

Read the official quickstart at myanimelist.net.

05

Getting started

Register an application at https://myanimelist.net/apiconfig to get a Client ID. For public reads, send the header X-MAL-CLIENT-ID: YOUR_CLIENT_ID, e.g. GET https://api.myanimelist.net/v2/anime?q=frieren&limit=5. To read or write a user’s own list, implement the OAuth2 authorization-code flow: after the user logs in and grants permission you receive an access token, then call endpoints like /users/@me/animelist with Authorization: Bearer USER_ACCESS_TOKEN. Rate limits are undocumented, so assume ~1 req/sec. If your feature only displays public data and never touches a user account, consider the key-less Jikan to skip OAuth2 entirely.

06

FAQ

Official MyAnimeList API or Jikan — how do I choose?+

By whether your feature touches a specific user’s account. For public data only (search, detail, seasons, rankings) use the key-less Jikan; to read or write a logged-in user’s own list, status, and scores you must use the official API v2’s OAuth2. Many apps use both.

Does the official MyAnimeList API need auth even for public data?+

Yes. Even reading public data requires registering an app at https://myanimelist.net/apiconfig for a Client ID and sending the X-MAL-CLIENT-ID header; without it public reads fail. Full OAuth2 is only needed for actions involving a user’s own list.

What is the official MyAnimeList API rate limit?+

The official side publishes no explicit rate cap. The community consensus is to stay around 1 request/second to avoid being throttled.

Does the official MyAnimeList API cost money?+

No. There is no paid tier; the real "cost" is the OAuth2 integration effort, not money.

07

Technical details

CORS: ?HTTPS: YesSignup: YesOpen source: No
Auth type
oauth
Pricing
free
Rate limit
Rate limits are not officially published. The community consensus is to stay at roughly 1 request/second to avoid throttling. Public reads require the X-MAL-CLIENT-ID header (your registered Client ID); user-scoped reads/writes require an OAuth2 access token.
Free tier quota
Free to use. You must register an application at https://myanimelist.net/apiconfig to obtain a Client ID. No paid tiers; the cost is the OAuth2 integration work, not money.
Protocols
REST
SDKs
JavaScript, Python, Go
08

Tags