# Anime API with discover filters

> amodb has no separate anime endpoint. List anime with /3/discover/tv or /3/discover/movie using genre 16 and with_original_language=ja, then narrow it with the anime keyword id from /3/search/keyword. Japanese is not a served interface language, but original_name keeps the Japanese title.

## Find anime with genre 16 and original language ja

amodb has no separate anime endpoint. Anime is a filter on `GET /3/discover/tv` and `GET /3/discover/movie`: `with_genres=16` (Animation) plus `with_original_language=ja`. Add the id of the `anime` keyword, which you look up with `GET /3/search/keyword`, to keep only titles tagged as anime.

One honest limit: Japanese is not one of the 14 interface languages amodb serves. Titles and overviews come back in the language you request, or in English. The Japanese title stays in `original_name` for series and `original_title` for movies.

What you get:

- Anime series and anime films from the same discover filters.
- Original Japanese titles next to the localized ones.
- Season and episode lists for every series you pick.
- Posters and backdrops from `https://img.amodb.dev/t/p/{size}/{file}`.

## What data you get

| You need             | Call or field                                                              | Notes                                                                  |
| -------------------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| Anime series         | `GET /3/discover/tv` with `with_genres=16` and `with_original_language=ja` | `results` carry `name`, `original_name`, `first_air_date`, `genre_ids` |
| Anime films          | `GET /3/discover/movie` with the same two filters                          | `title`, `original_title`, `release_date`                              |
| The anime keyword id | `GET /3/search/keyword?query=anime`                                        | `results` array of `id` and `name`                                     |
| Episode list         | `GET /3/tv/{series_id}/season/{season_number}`                             | One call per season                                                    |
| Japanese title       | `original_name` or `original_title`                                        | Original script, as stored                                             |
| Poster               | `poster_path`                                                              | Append to the image host, no key needed                                |

## Start in 3 steps

1. Pick a plan on [pricing](https://amodb.dev/pricing/). All data is on every plan, only the rate differs: 20, 40 or 120 requests per minute.
2. Create a key in your account dashboard.
3. Look up the keyword id once, then call discover with it and the two filters.

## Example request

The Python script finds the anime keyword id, then lists the most popular Japanese animated series tagged with it. The curl call below it skips the keyword and lists a single broadcast season by date window.

```bash
curl -s "https://api.amodb.dev/3/discover/tv?with_genres=16&with_original_language=ja&first_air_date.gte=2026-10-01&first_air_date.lte=2026-12-31&sort_by=popularity.desc" \
  -H "Authorization: Bearer $AMODB_KEY"
```

```python
import os
import requests

BASE = "https://api.amodb.dev/3"
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['AMODB_KEY']}"


def get(path, **params):
    r = session.get(BASE + path, params=params, timeout=10)
    r.raise_for_status()
    return r.json()


keywords = get("/search/keyword", query="anime")["results"]
anime_id = next((k["id"] for k in keywords if k["name"].lower() == "anime"), None)
if anime_id is None:
    raise SystemExit("anime keyword not found")

page = get(
    "/discover/tv",
    with_genres=16,
    with_original_language="ja",
    with_keywords=anime_id,
    sort_by="popularity.desc",
    language="en-US",
    page=1,
)
for show in page["results"]:
    print(show.get("first_air_date"), show["name"], "/", show["original_name"])
```

A trimmed reply for the Python call above: 2 of the 19 results on page 1, with arrays cut to 2 items.

```json
{
  "page": 1,
  "results": [
    {
      "adult": false,
      "backdrop_path": "/dmptwhmqxcMrCKgyvBlTt18PgDu.jpg",
      "first_air_date": "2005-04-22",
      "genre_ids": [
        10759,
        16
      ],
      "id": 65733,
      "name": "Doraemon",
      "origin_country": [
        "JP"
      ],
      "original_language": "ja",
      "original_name": "ドラえもん",
      "overview": "Robotic cat Doraemon is sent back in time from the 22nd century to protect 10-year-old...",
      "popularity": 301.2214,
      "poster_path": "/9ZN1P32SHviL3SV51qLivxycvcx.jpg",
      "vote_average": 8.089,
      "vote_count": 252
    },
    {
      "adult": false,
      "backdrop_path": "/mFKys64gbDQrFqwUheGwXQwo2JK.jpg",
      "first_air_date": "2004-10-05",
      "genre_ids": [
        10759,
        16
      ],
      "id": 30984,
      "name": "Bleach",
      "origin_country": [
        "JP"
      ],
      "original_language": "ja",
      "original_name": "BLEACH",
      "overview": "For as long as he can remember, Ichigo Kurosaki has been able to see ghosts. But when h...",
      "popularity": 190.3257,
      "poster_path": "/2EewmxXe72ogD0EaWM8gqa0ccIw.jpg",
      "vote_average": 8.4,
      "vote_count": 2295
    }
  ],
  "total_pages": 216,
  "total_results": 4302
}
```

## Filters that shape an anime list

| Filter                                     | Value                                                         | Effect                                                                                   |
| ------------------------------------------ | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `with_genres`                              | `16`                                                          | Animation. A comma means AND, so `16,35` is animation and comedy.                        |
| `without_genres`                           | genre id                                                      | Drops titles that carry that genre.                                                      |
| `with_original_language`                   | `ja`                                                          | Japanese originals only.                                                                 |
| `with_keywords`                            | keyword id                                                    | Only titles tagged with the keyword. Titles without the tag are missed.                  |
| `first_air_date.gte`, `first_air_date.lte` | `YYYY-MM-DD`                                                  | A broadcast window for series. Movies use `primary_release_date.gte` and `.lte`.         |
| `sort_by`                                  | `popularity.desc`, `vote_average.desc`, `first_air_date.desc` | Order. Pair `vote_average.desc` with `vote_count.gte` so tiny samples do not rank first. |
| `page`                                     | 1 to 500                                                      | Up to 20 results per page.                                                               |

Keyword tagging is partial. If a list looks short, drop `with_keywords` and keep the genre and language filters for a wider net. The full filter list is on [discover](https://amodb.dev/discover/), and keyword ids are explained on [keywords](https://amodb.dev/keywords/).

## Anime films and long series

Films use the same two filters on the movie endpoint. This call lists well rated Japanese animated films, and `vote_count.gte` keeps out titles with a handful of votes.

```bash
curl -s "https://api.amodb.dev/3/discover/movie?with_genres=16&with_original_language=ja&sort_by=vote_average.desc&vote_count.gte=200" \
  -H "Authorization: Bearer $AMODB_KEY"
```

Each result has `title`, `original_title`, `release_date` and `poster_path`. Long running series are often split into several seasons in the catalog. `GET /3/tv/{series_id}/episode_groups` lists other orderings with their names and episode counts where they are known, but amodb does not serve the groups themselves, and `number_of_episodes` on the series gives the total. Season calls are described on [TV show API](https://amodb.dev/tv-show-api/).

## Titles and languages

Anime is the case where the original title matters most, so keep both fields.

| Field               | Holds                                                                  | Use                                                          |
| ------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------ |
| `name`              | Title in the language you requested                                    | Main label in your UI                                        |
| `original_name`     | Title in the original language, Japanese script for Japanese originals | Secondary label, useful for fans who know the Japanese title |
| `original_language` | `ja`                                                                   | Filter on your side if you mix sources                       |
| `overview`          | Localized text, empty when no translation exists                       | Re-request with `language=en-US` when empty                  |

`GET /3/tv/{series_id}/alternative_titles` lists other titles by country where known. The 14 served languages are listed on [languages](https://amodb.dev/languages/).

## How it compares

| Capability                  | Scrape fan sites         | Anime-only database API              | amodb                                                 |
| --------------------------- | ------------------------ | ------------------------------------ | ----------------------------------------------------- |
| Scope                       | Whatever the site covers | Anime only, check the docs for depth | Movies and TV in one catalog, anime chosen by filters |
| Anime selection             | Site categories          | Check the docs                       | Genre 16, `with_original_language=ja`, anime keyword  |
| Original-language title     | Varies                   | Check the docs                       | `original_name` and `original_title`                  |
| Episode lists               | Parsed from pages        | Check the docs                       | Season call with an `episodes` array                  |
| Japanese interface language | Depends on the site      | Check the docs                       | Not served, original titles only                      |
| Access terms                | The terms of each site   | Free and paid tiers vary             | Paid, prepaid, no free tier                           |

## Pricing

An anime list is a few discover calls, and discover results stay in the edge cache for 30 minutes, so 20 requests per minute is enough for many apps. Plans come as 20, 40 or 120 requests per minute with the same data. Pay for 1, 3, 6, 12 or 24 months, with 0, 10, 20, 30 and 40 percent off, and no automatic renewal. There is no free tier. Choose a plan on [pricing](https://amodb.dev/pricing/).

## Questions and answers

### Does amodb have a dedicated anime endpoint?

No. Anime is a filter on the normal discover endpoints: with_genres=16 for Animation and with_original_language=ja for Japanese originals. Add the anime keyword id for a tighter list.

### Can I get Japanese titles and overviews?

Japanese originals keep their Japanese title in original_name for series and original_title for movies. Japanese is not one of the 14 served interface languages, so name and overview follow your language tag or English.

### How do I find the anime keyword id?

Call /3/search/keyword?query=anime and read the id of the result named anime. Pass it as with_keywords on discover. Store the id after the first lookup, because keyword searches are cached for 10 minutes only.

### Does genre 16 return only anime?

No. Genre 16 is Animation, which also covers cartoons from other countries. Adding with_original_language=ja removes most of them, and the anime keyword narrows the list further.

### How deep can I page an anime list?

Pages run from 1 to 500 with up to 20 results each, so one query reaches about 10,000 results. Split larger lists into first_air_date.gte and first_air_date.lte windows. Discover results are cached for 30 minutes.

## Related pages

- [Discover API](https://amodb.dev/discover/): Discover API with the same filters as TMDB v3. List movies and TV shows by genre, cast, company, keyword, year, rating, runtime and provider, with sorting.
- [Keywords API](https://amodb.dev/keywords/): Movie keywords API with TMDB v3 paths: list plot tags for a movie or series, look up a keyword, list its movies and combine ids with discover with_keywords.
- [Genres and lookup lists](https://amodb.dev/genres/): Genre list API with TMDB v3 paths: movie and TV genre ids with translated names, plus countries, languages, jobs, certifications and watch provider lists.
- [Languages](https://amodb.dev/languages/): amodb serves titles, overviews and names in 14 languages. Pass a TMDB style tag such as ru-RU or pt-BR in language; any other tag falls back to English.
- [TV show API for series, seasons and episodes](https://amodb.dev/tv-show-api/): TV show API with series status, networks, seasons, episodes and next_episode_to_air. TMDB v3 compatible JSON in 14 languages, from 20 requests per minute.
- [Quickstart](https://amodb.dev/quickstart/): Make your first amodb call: get a key, request movie details in curl, JavaScript, Python, PHP or Go, then load the poster from img.amodb.dev. Under 2 minutes.

Updated: 2026-10-18. Source: https://amodb.dev/anime-api/
