MyAnimeList hub

MyAnimeList Search API

Find anime, manga, characters or people, 50 results per page, with ids you can use on every route.

GET /v1/myanimelist/search

1 credit Failed requests are free A not-found answer is still charged

About this endpoint

GET /v1/myanimelist/search?query=...&kind=anime returns data.query, data.kind, data.results[] and page. Each result has id, kind, title, url, imageUrl, snippet, type, episodes, score and works[]. An exact-match redirect carries only id, url and kind; title and type are null there. works carries the related anime or manga for a character or person result.

The query must be at least three characters, or one or more Chinese or Japanese characters. kind is one of anime, manga, character or person and defaults to anime. A page holds 50 rows and page.nextCursor gets the next one. A search with no matches returns lookupStatus: found with an empty array.

MyAnimeList's relevance order can shift between pages, so a title near a page boundary can appear twice; de-duplicate by id.

MyAnimeList Search API FAQ

Why does a title appear on two pages?

MyAnimeList's relevance order can shift between pages, so a title near a page boundary can appear twice. De-duplicate by id across the pages you collect.

Why is a short query refused?

A Latin query needs at least three characters. One or more Chinese or Japanese characters are accepted, so 進撃 and 鬼 both work.

Can I filter by status or score?

Not on this route. It exposes query, kind and cursor only. Filter the returned rows yourself, or use the rankings and genre routes for curated lists.

How many credits does this request cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.

What is `snippet`?

It is the short description the result row shows, and it can be null. Use title, url and id as the stable identity of a result.