animedex jikan

Jikan v4 is a REST scraper of MyAnimeList, hosted at https://api.jikan.moe/v4. It is the deepest catalogue of the backends animedex wraps: every anime / manga / character / person / producer / season / club / user / magazine / genre that MAL knows about, with score distributions, news threads, forum posts, episode lists and theme songs. animedex covers all 87 anonymous v4 endpoints as 92 high-level Python functions (a few endpoints get multiple entry points for ergonomic kwargs).

animedex jikan demo — anime, manga, character, season, top

References

Site

https://jikan.moe/

API documentation

https://docs.api.jikan.moe/

GitHub repo

https://github.com/jikan-me/jikan-api-docs

MyAnimeList (data source)

https://myanimelist.net/

Python module

animedex.backends.jikan

Rich models

animedex.backends.jikan.models

  • Backend: Jikan v4 (api.jikan.moe).

  • Rate limit: 60 req/min, 3 req/sec.

  • Auth: never. Jikan is read-only and anonymous by design; there is no token concept.

Eleven endpoints, in detail

Anime by MAL ID — show()

animedex jikan show 52991 --jq '.data | {title, score, status, broadcast: .broadcast.string}'
# => {
#      "title":     "Sousou no Frieren",
#      "score":     9.31,
#      "status":    "Finished Airing",
#      "broadcast": "Fridays at 23:00 (JST)"
#    }

Cast on a show — anime_characters()

animedex jikan anime-characters 52991 --jq '.rows[:3] | map({character: .character.name, role})'

Manga by MAL ID — manga_show()

animedex jikan manga-show 2 --jq '.data | {title, score, chapters, status}'
# => {
#      "title":    "Berserk",
#      "score":    9.47,
#      "chapters": null,    # null = ongoing
#      "status":   "Publishing"
#    }

Character lookup — character_show()

animedex jikan character-show 11 --jq '.data | {name, favourites: .favorites}'
# => {
#      "name":       "Edward Elric",
#      "favourites": 100000
#    }

Person lookup — person_show()

animedex jikan person-show 1870 --jq '.data | {name, family_name, given_name, birthday}'

Seasonal grid — season()

animedex jikan season 2024 spring --limit 5 --jq '.[].title'

Top by popularity — top_anime()

animedex jikan top-anime --filter bypopularity --limit 5 --jq '.[] | {title, members}'

Random pick — random_anime()

animedex jikan random-anime --jq '.title'
# => "<random anime title>"

User profile — user_show()

animedex jikan user-show "nekomata1037" --jq '.data | {username, joined, statistics: .statistics.anime}'

Endpoint summary

Nine “core” entities (anime, manga, character, person, producer, magazine, genre, club, user) have typed dataclass returns; the long-tail sub-endpoints return JikanGenericResponse (a permissive extra='allow' envelope). Use --jq to project the fields you need.

/anime/{id}/...

Command

Python entry point

Returns

show <id>

animedex.backends.jikan.show()

JikanAnime

search <q>

animedex.backends.jikan.search()

list[JikanAnime]

anime-characters <id>

animedex.backends.jikan.anime_characters()

JikanGenericResponse

anime-staff <id>

animedex.backends.jikan.anime_staff()

JikanGenericResponse

anime-episodes <id>

animedex.backends.jikan.anime_episodes()

JikanGenericResponse

anime-episode <id> <ep>

animedex.backends.jikan.anime_episode()

JikanGenericResponse

anime-news <id>

animedex.backends.jikan.anime_news()

JikanGenericResponse

anime-forum <id>

animedex.backends.jikan.anime_forum()

JikanGenericResponse

anime-videos <id>

animedex.backends.jikan.anime_videos()

JikanGenericResponse

anime-videos-episodes <id>

animedex.backends.jikan.anime_videos_episodes()

JikanGenericResponse

anime-pictures <id>

animedex.backends.jikan.anime_pictures()

JikanGenericResponse

anime-statistics <id>

animedex.backends.jikan.anime_statistics()

JikanGenericResponse

anime-moreinfo <id>

animedex.backends.jikan.anime_moreinfo()

JikanGenericResponse

anime-recommendations <id>

animedex.backends.jikan.anime_recommendations()

JikanGenericResponse

anime-userupdates <id>

animedex.backends.jikan.anime_userupdates()

JikanGenericResponse

anime-reviews <id>

animedex.backends.jikan.anime_reviews()

JikanGenericResponse

anime-relations <id>

animedex.backends.jikan.anime_relations()

JikanGenericResponse

anime-themes <id>

animedex.backends.jikan.anime_themes()

JikanGenericResponse

anime-external <id>

animedex.backends.jikan.anime_external()

JikanGenericResponse

anime-streaming <id>

animedex.backends.jikan.anime_streaming()

JikanGenericResponse

/manga/{id}/...

Command

Python entry point

Returns

manga-show <id>

animedex.backends.jikan.manga_show()

JikanManga

manga-search <q>

animedex.backends.jikan.manga_search()

list[JikanManga]

manga-characters <id>

animedex.backends.jikan.manga_characters()

JikanGenericResponse

manga-news <id>

animedex.backends.jikan.manga_news()

JikanGenericResponse

manga-forum <id>

animedex.backends.jikan.manga_forum()

JikanGenericResponse

manga-pictures <id>

animedex.backends.jikan.manga_pictures()

JikanGenericResponse

manga-statistics <id>

animedex.backends.jikan.manga_statistics()

JikanGenericResponse

manga-moreinfo <id>

animedex.backends.jikan.manga_moreinfo()

JikanGenericResponse

manga-recommendations <id>

animedex.backends.jikan.manga_recommendations()

JikanGenericResponse

manga-userupdates <id>

animedex.backends.jikan.manga_userupdates()

JikanGenericResponse

manga-reviews <id>

animedex.backends.jikan.manga_reviews()

JikanGenericResponse

manga-relations <id>

animedex.backends.jikan.manga_relations()

JikanGenericResponse

manga-external <id>

animedex.backends.jikan.manga_external()

JikanGenericResponse

/characters/{id}/...

Command

Python entry point

Returns

character-show <id>

animedex.backends.jikan.character_show()

JikanCharacter

character-search <q>

animedex.backends.jikan.character_search()

list[JikanCharacter]

character-anime <id>

animedex.backends.jikan.character_anime()

JikanGenericResponse

character-manga <id>

animedex.backends.jikan.character_manga()

JikanGenericResponse

character-voices <id>

animedex.backends.jikan.character_voices()

JikanGenericResponse

character-pictures <id>

animedex.backends.jikan.character_pictures()

JikanGenericResponse

/people/{id}/...

Command

Python entry point

Returns

person-show <id>

animedex.backends.jikan.person_show()

JikanPerson

person-search <q>

animedex.backends.jikan.person_search()

list[JikanPerson]

person-anime <id>

animedex.backends.jikan.person_anime()

JikanGenericResponse

person-voices <id>

animedex.backends.jikan.person_voices()

JikanGenericResponse

person-manga <id>

animedex.backends.jikan.person_manga()

JikanGenericResponse

person-pictures <id>

animedex.backends.jikan.person_pictures()

JikanGenericResponse

/producers/{id}/...

Command

Python entry point

Returns

producer-show <id>

animedex.backends.jikan.producer_show()

JikanProducer

producer-search <q>

animedex.backends.jikan.producer_search()

list[JikanProducer]

producer-external <id>

animedex.backends.jikan.producer_external()

JikanGenericResponse

Magazines, genres, clubs

Command

Python entry point

Returns

magazines <q>

animedex.backends.jikan.magazines()

list[JikanMagazine]

genres-anime

animedex.backends.jikan.genres_anime()

list[JikanGenre]

genres-manga

animedex.backends.jikan.genres_manga()

list[JikanGenre]

clubs <q>

animedex.backends.jikan.clubs()

JikanGenericResponse

club-show <id>

animedex.backends.jikan.club_show()

JikanClub

club-members <id>

animedex.backends.jikan.club_members()

JikanGenericResponse

club-staff <id>

animedex.backends.jikan.club_staff()

JikanGenericResponse

club-relations <id>

animedex.backends.jikan.club_relations()

JikanGenericResponse

Users

Command

Python entry point

Returns

user-show <name>

animedex.backends.jikan.user_show()

JikanUser

user-basic <name>

animedex.backends.jikan.user_basic()

JikanUser

user-search <q>

animedex.backends.jikan.user_search()

JikanGenericResponse

user-by-mal-id <id>

animedex.backends.jikan.user_by_mal_id()

JikanGenericResponse

user-statistics <name>

animedex.backends.jikan.user_statistics()

JikanGenericResponse

user-favorites <name>

animedex.backends.jikan.user_favorites()

JikanGenericResponse

user-userupdates <name>

animedex.backends.jikan.user_userupdates()

JikanGenericResponse

user-about <name>

animedex.backends.jikan.user_about()

JikanGenericResponse

user-history <name>

animedex.backends.jikan.user_history()

JikanGenericResponse

user-friends <name>

animedex.backends.jikan.user_friends()

JikanGenericResponse

user-reviews <name>

animedex.backends.jikan.user_reviews()

JikanGenericResponse

user-recommendations <name>

animedex.backends.jikan.user_recommendations()

JikanGenericResponse

user-clubs <name>

animedex.backends.jikan.user_clubs()

JikanGenericResponse

Seasons / top / schedule / random

Command

Python entry point

Returns

seasons-list

animedex.backends.jikan.seasons_list()

JikanGenericResponse

seasons-now

animedex.backends.jikan.seasons_now()

list[JikanAnime]

seasons-upcoming

animedex.backends.jikan.seasons_upcoming()

list[JikanAnime]

season <year> <name>

animedex.backends.jikan.season()

list[JikanAnime]

top-anime

animedex.backends.jikan.top_anime()

list[JikanAnime]

top-manga

animedex.backends.jikan.top_manga()

list[JikanManga]

top-characters

animedex.backends.jikan.top_characters()

list[JikanCharacter]

top-people

animedex.backends.jikan.top_people()

list[JikanPerson]

top-reviews

animedex.backends.jikan.top_reviews()

JikanGenericResponse

schedules

animedex.backends.jikan.schedules()

JikanGenericResponse

random-anime

animedex.backends.jikan.random_anime()

JikanAnime

random-manga

animedex.backends.jikan.random_manga()

JikanManga

random-character

animedex.backends.jikan.random_character()

JikanCharacter

random-person

animedex.backends.jikan.random_person()

JikanPerson

random-user

animedex.backends.jikan.random_user()

JikanUser

Recommendations / reviews / watch

Command

Python entry point

Returns

recommendations-anime

animedex.backends.jikan.recommendations_anime()

JikanGenericResponse

recommendations-manga

animedex.backends.jikan.recommendations_manga()

JikanGenericResponse

reviews-anime

animedex.backends.jikan.reviews_anime()

JikanGenericResponse

reviews-manga

animedex.backends.jikan.reviews_manga()

JikanGenericResponse

watch-episodes

animedex.backends.jikan.watch_episodes()

JikanGenericResponse

watch-episodes-popular

animedex.backends.jikan.watch_episodes_popular()

JikanGenericResponse

watch-promos

animedex.backends.jikan.watch_promos()

JikanGenericResponse

watch-promos-popular

animedex.backends.jikan.watch_promos_popular()

JikanGenericResponse

Pagination

Jikan paginates with ?page=N&limit=M and returns a pagination envelope (has_next_page, last_visible_page, items). Iterate explicitly:

animedex jikan search "Frieren" --page 1 --limit 10 --jq '.[].title'
animedex jikan search "Frieren" --page 2 --limit 10 --jq '.[].title'

Gotchas

  • MAL flakiness propagates: Jikan is a scraper. When MAL itself is unreachable, you get a 5xx that surfaces as ApiError(reason="upstream-error") — not a Jikan bug, just upstream weather.

  • 404 is a real “not found”: animedex jikan show 999999999 returns 404 → ApiError(reason="not-found"). The fixture corpus pins this.

  • Score divergence: Jikan’s score is on a 0–10 scale, AniList’s averageScore is 0–100. Both are upstream-canonical; animedex does not reconcile them.

The Python library page covers the same surface from inside Python.