Jikan API

Entertainment API · MyAnimeList data · Strict rate limits · No auth

TL;DR

Jikan (Japanese for "time") is an unofficial MyAnimeList API that scrapes and caches data from MAL. It provides comprehensive anime, manga, character, people, and season data — including scores, synopses, genres, studios, episode count, aired dates, and user stats. It's free and requires no API key, but has strict rate limits (30 requests per minute, 3 per second) to protect MyAnimeList's servers.

Quick start: https://api.jikan.moe/v4/anime/1

No API key needed — but rate limits are strict!

How to Use This API

1. Get Anime by ID (Cowboy Bebop = ID 1)

https://api.jikan.moe/v4/anime/1

Returns full details: title (English/Japanese), synopsis, score, rank, popularity, episode count, status (Finished Airing), aired dates, studios (Sunrise), genres, themes, and streaming links.

2. Search Anime by Title

https://api.jikan.moe/v4/anime?q=attack%20on%20titan&order_by=score&sort=desc

Search with q, order by score, popularity, episodes, or rank. Sort asc or desc.

3. Get Top Anime

https://api.jikan.moe/v4/top/anime

Returns the top-rated anime on MAL. Filter by type=tv, filter=airing, page.

4. JavaScript — Anime Search

async function searchAnime(query) {
  const resp = await fetch(
    `https://api.jikan.moe/v4/anime?q=${encodeURIComponent(query)}&limit=5`
  );
  const data = await resp.json();
  return data.data.map(a => ({
    title: a.title,
    english: a.title_english,
    score: a.score,
    episodes: a.episodes,
    status: a.status,
    synopsis: a.synopsis?.substring(0, 150) + '...',
    image: a.images.jpg.image_url,
    url: a.url
  }));
}

searchAnime('spirited away').then(results => {
  results.forEach(a => {
    console.log(`${a.title} ⭐${a.score} (${a.episodes} eps)`);
  });
});

5. Python — Get Seasonal Anime

import requests
from datetime import datetime

def get_current_season():
    now = datetime.now()
    year = now.year
    month = now.month
    season_map = {1: 'winter', 4: 'spring', 7: 'summer', 10: 'fall'}
    season = season_map.get(((month - 1) // 3) * 4 + 1, 'spring')
    return season, year

season, year = get_current_season()
resp = requests.get(
    f'https://api.jikan.moe/v4/seasons/{year}/{season}'
)
anime_list = resp.json()['data']

print(f"Top {season.capitalize()} {year} anime:")
for a in anime_list[:10]:
    print(f"  {a['title']} — ⭐{a['score'] or 'N/A'} "
          f"({a['episodes'] or '?'} eps)")
Try Cowboy Bebop: https://api.jikan.moe/v4/anime/1

Frequently Asked Questions

What are the exact rate limits?
Jikan enforces strict limits: 30 requests per minute and 3 requests per second. If you exceed these, you'll receive HTTP 429 (Too Many Requests) with a Retry-After header. Cache responses to avoid hitting limits.
What endpoints does Jikan v4 offer?
Anime (search, by ID, episodes, staff, stats), Manga, Characters, People, Seasonal anime, Top lists, Recommendations, Reviews, User lists, Clubs, and more. Full list at the Jikan documentation.
Does Jikan include streaming information?
Yes! The anime response includes streaming links for Crunchyroll, Funimation, Netflix, HIDIVE, and other platforms where the anime is available.
How fresh is the data?
Jikan caches MyAnimeList data and refreshes periodically. Scores and stats are typically updated within a few hours of changes on MAL.
Can I get episode-level data?
Yes, /v4/anime/{id}/episodes returns episode titles, air dates, filler/recap flags, and forum discussion URLs.
Is there a GraphQL version?
No, Jikan v4 is REST-only. The v3 version had some GraphQL support but v4 is purely RESTful with JSON responses.

API Details

API URL
https://api.jikan.moe/v4
Documentation
jikan.moe/docs
Category
Entertainment
Authentication
Not Required
Geographic Coverage
Global — Japanese anime and manga data

What You Can Build