Skip to content

A RESTful API for anime relation mapping and auto redirect service across multiple anime databases

License

AGPL-3.0 and 2 other licenses found

Licenses found

AGPL-3.0
LICENSE
CC0-1.0
LICENSE-CC0
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

nattadasu/animeApi

nattadasu's AnimeAPI RESTful API

AnimeAPI (also known as aniApi) is a RESTful API that provides anime relation mapping across multiple anime databases. It mainly focuses on providing relations between anime titles from different databases.

This project was derived on anime-offline-database by manami-project and arm by kawaiioverflow, while adding support for more databases.

This project is primarily licensed under AGPL-3.0-only, unless otherwise stated. Please read more information regarding using the API on your project in Why avoid using AnimeAPI?.

Table of Contents

Click to expand

Why use AnimeAPI?

Compared to other relation mapping API, AnimeAPI provides more databases yet it's still easy to use. It also provides more data than other relation mapping API, such as the anime title itself.

Also, AnimeAPI uses object/dictionary format instead of array/list for each provider when you want to get individual relation mapping data. This makes it easier and faster to get the data you want since the machine doesn't need to iterate through the array/list to get the data you want, although with the cost of larger repository size.

Below is the comparison between AnimeAPI and other relation mapping API.

Highlights AnimeAPI ARM BQA Hato SIMKL Trakt AOD FAL ALAL ATIP
License AGPL-3.0-only, MIT, CC0 MIT AGPL-3.0 Apache-2.0 Proprietary Proprietary AGPL-3.0 Unknown Unknown Unknown
Access Public Public Public Paid, API Key API Key API Key Public Public Public Public
Format REST, JSON, TSV Node.js Package, REST, JSON REST REST REST REST JSON JSON XML JSON
Main Languages Python, JSON JavaScript, JSON TypeScript, SQLite C#, MySQL, PostgreSQL - - JSON JSON XLSL, XML PowerShell, JSON
Base Data AOD, ARM, ATIP, FAL
f:kz f:oo f:ntj
f:ntf FAL f:al f:kts f:ntf f:tvdb f:adb f:tmdb f:mal f:al f:adb f:kts f:lc f:as f:ap f:ntf AOD, ALAL f:adb f:tvdb f:tmdb f:imdb aniTrakt
Rate Limit - - - - 1000/day for unverified 1000/5 mins Unapplicable Unapplicable Unapplicable Unapplicable
Anime Title
f:adb aniDB
f:al AniList ✔ Result Only
f:ap Anime-Planet ✔ Result Only
f:as AniSearch ✔ Result Only
f:an Annict
f:bgm Bangumi
f:imdb IMDB
f:kz Kaize
f:kts Kitsu ✔ Result Only
f:lc LiveChart ✔ Result Only
f:mal MyAnimeList
f:ntj Nautiljon
f:ntf Notify
f:oo Otak Otaku
f:shk Shikimori ✔ via MAL ✔ via MAL ✔ via MAL ✔ via MAL ✔ via MAL ✔ via MAL ✔ via MAL
f:shb Shoboi Calendar
f:sy SilverYasha DBTI
f:smk SIMKL
f:tmdb TMDB ✔, only movie ✔, only movie ✔, only movie ✔, only movie
f:trk Trakt
f:tvdb TVDB
f:tvtm TVTime ✔ via TVDB ✔ via TVDB ✔ via TVDB ✔ via TVDB

Legends

Why Avoid Using AnimeAPI?

AnimeAPI is licensed under the AGPL-3.0-only, primarily because it's derived from the manami-project/anime-offline-database. We strongly discourage integrating this project into your own if you intend to maintain a permissive licensing model for your work.

There is an alternative approach you can consider. You could make your project closed-source and set up a private instance of AnimeAPI for your specific use. However, it's essential to recognize that this approach raises ethical considerations, and we recommend proceeding with caution while also exploring other options or alternatives.

It's worth noting that there are exceptions to this rule, particularly regarding the raw files from original sources. The scraper scripts for Kaize, Nautiljon, and Otak-Otaku are licensed under the MIT license, and the raw JSON files they generate are licensed under the CC0 license instead. You are free to use these files and build your own database with them. For more information, please refer to database/raw/README.md.

Featured on

Do you want to integrate AnimeAPI into your project? Or do you want to see how AnimeAPI is used in other projects and their use cases? Check out the list below!

Tip

If you want to add your project to this list, please open a pull request adding your project to the table below. Please make sure to add a short description of your project and a link to your project's homepage.

Libraries

Package Name Language Package Link Description
animeapi-py Python pypi A Python wrapper for AnimeAPI with type hinting and additional async support

Projects, Apps, and Websites

Name Language Homepage Description
Ryuuzaki Ryuusei Python GitHub A Discord bot that uses AnimeAPI to fetch anime maps
animeManga-autoBackup Powershell, Python GitHub A script that uses AnimeAPI to get info one of your anime/manga lists and save it to a file
Hikaru Aegis (codename) Python GitHub Rewrite of animeManga-autoBackup in Python

Supported Platforms and Aliases

AnimeAPI supported following sites for media lookup. You can use this as an alias cheatsheet as well.

Note

  • The aliases are case-insensitive. You can use any of the aliases to get the data you want.
  • 2K is the two-letter abbreviation for the platform.
Platform 2K Aliases
anidb ad adb, anidb.net
anilist al anilist.co
animeplanet ap anime-planet.com anime-planet, animeplanet.com
anisearch as anisearch.com, anisearch.de, anisearch.it, anisearch.es, anisearch.fr, anisearch.jp
annict ac anc, act, annict.com, annict.jp, en.annict.com
imdb im imdb.com
kaize kz kaize.io
kitsu kt kts, kitsu.io, kitsu.app
livechart lc livechart.me
myanimelist ma mal, myanimelist.net
nautiljon nj ntj, nautiljon.com
notify nf ntf, ntm, notifymoe, notify.moe
otakotaku oo otakotaku.com
shikimori sh shiki, shk, shikimori.me, shikimori.one, shikimori.org
shoboi sb shb, syb, shobocal, syoboi, syobocal, cal.syoboi.jp
silveryasha sy dbti, db.silveryasha.id, db.silveryasha.web.id
simkl sm smk, simkl.com, animecountdown, animecountdown.com
themoviedb tm tmdb, themoviedb.org
trakt tr trk, trakt.tv

Statistic

So far, AnimeAPI has indexed data from 17 databases, with details as follows:

Last updated: 23 March 2025 05:17:22 UTC

Platform Count
aniDB 13720
AniList 21135
Anime-Planet 24573
aniSearch 19546
Annict 11619
IMDb 2271
Kaize 23161
Kitsu 20951
LiveChart 11637
MyAnimeList 28660
Nautiljon 8534
Notify.moe 16671
Otak Otaku 2885
Shikimori 28660
Shoboi/Syobocal 5246
Silver Yasha 4712
SIMKL 13685
The Movie Database 577
Trakt 4928
Total 35331

Usage

To use this API, you can access the following base URLs:

  • Latest/v3:

    GET https://animeapi.my.id

All requests must be GET, and response always will be in JSON format.

Get status and statistics

MIME Type: application/json

GET /status
Response example
{
  "mainrepo": "https://github.com/nattadasu/animeApi/tree/v3",
  "updated": {
    "timestamp": 1742707042,
    "iso": "2025-03-23T05:17:22.621082+00:00"
  },
  "contributors": [
    "nattadasu"
  ],
  "sources": [
    "kawaiioverflow/arm",
    "manami-project/anime-offline-database",
    "rensetsu/db.rensetsu.public-dump",
    "rensetsu/db.trakt.anitrakt",
    "https://kaize.io",
    "https://nautiljon.com",
    "https://otakotaku.com"
  ],
  "license": "AGPL-3.0-only AND MIT AND CC0-1.0+",
  "website": "https://animeapi.my.id",
  "counts": {
    "anidb": 13720,
    "anilist": 21135,
    "animeplanet": 24573,
    "anisearch": 19546,
    "annict": 11619,
    "imdb": 2271,
    "kaize": 23161,
    "kitsu": 20951,
    "livechart": 11637,
    "myanimelist": 28660,
    "nautiljon": 8534,
    "notify": 16671,
    "otakotaku": 2885,
    "shikimori": 28660,
    "shoboi": 5246,
    "silveryasha": 4712,
    "simkl": 13685,
    "themoviedb": 577,
    "trakt": 4928,
    "total": 35331
  },
  "endpoints": {
    "$comment": "The endpoints are stated in Python regex format. Platform aliases supported for direct lookup for platform specific endpoints (see ?P<alias> in regex).",
    "anidb": "/(?P<alias>anidb)/(?P<media_id>\\d+)",
    "anilist": "/(?P<alias>anilist)/(?P<media_id>\\d+)",
    "animeapi_dump": "/(anime(?:a|A)pi|aa)(?:\\\\\\.json)?",
    "animeapi_tsv": "/(anime(?:a|A)pi|aa).tsv",
    "animeplanet": "/(?P<alias>animeplanet)/(?P<media_id>[\\w\\-]+)",
    "anisearch": "/(?P<alias>anisearch)/(?P<media_id>\\d+)",
    "annict": "/(?P<alias>annict)/(?P<media_id>\\d+)",
    "heartbeat": "/(heartbeat|ping)",
    "imdb": "/(?P<alias>imdb)/(?P<media_id>tt[\\d]+)",
    "kaize": "/(?P<alias>kaize)/(?P<media_id>[\\w\\-]+)",
    "kitsu": "/(?P<alias>kitsu)/(?P<media_id>\\d+)",
    "livechart": "/(?P<alias>livechart)/(?P<media_id>\\d+)",
    "myanimelist": "/(?P<alias>myanimelist)/(?P<media_id>\\d+)",
    "nautiljon": "/(?P<alias>nautiljon)/(?P<media_id>[\\w\\+!\\-_\\(\\)\\[\\]]+)",
    "notify": "/(?P<alias>notify)/(?P<media_id>[\\w\\-_]+)",
    "otakotaku": "/(?P<alias>otakotaku)/(?P<media_id>\\d+)",
    "platform_dump": "/(?P<alias>[\\w\\-]+)(?:\\\\\\.json)?",
    "redirect": "/(redirect|rd)",
    "repo": "/",
    "schema": "/schema(?:\\\\\\.json)?",
    "shikimori": "/(?P<alias>shikimori)/(?P<media_id>\\d+)",
    "shoboi": "/(?P<alias>shoboi)/(?P<media_id>\\d+)",
    "silveryasha": "/(?P<alias>silveryasha)/(?P<media_id>\\d+)",
    "simkl": "/(?P<alias>simkl)/(?P<media_id>\\d+)",
    "status": "/status",
    "syobocal": "/(?P<alias>syobocal)/(?P<media_id>\\d+)",
    "themoviedb": "/(?P<alias>themoviedb)/movie/(?P<media_id>\\d+)",
    "trakt": "/(?P<alias>trakt)/(?P<media_type>show|movie)(s)?/(?P<media_id>\\d+)(?:/season(s)?/(?P<season_id>\\d+))?",
    "updated": "/updated"
  }
}

Get latency report

MIME Type: application/json

GET /heartbeat
Response example
{
  "status": "OK",
  "code": 200,
  "response_time": "0.000s",
  "request_time": "0.000s",
  "request_epoch": 1626682566.0,
}

Get updated date and time

MIME Type: text/plain

GET /updated
Response example
Updated on 03/23/2025 05:17:22 UTC

Get all items in Array

HTTP Status Code: 302 (redirect to GitHub raw file URL)
MIME Type: application/json

GET /animeApi.json

or

GET /aa.json

Fetch all item as TSV (Tab Separated Values) file

Tip

Use this endpoint if you want to import the data to spreadsheet.

MIME Type: text/tab-separated-values

GET /animeApi.tsv

or

GET /aa.tsv

Get All ID in Object/Dictionary format of each provider

HTTP Status Code: 302 (redirect to GitHub raw file URL)
MIME Type: application/json

GET /:platform.json

:platform can be one of the following listed in Supported Platforms and Aliases.

Get All ID in Array/List format of each provider

HTTP Status Code: 302 (redirect to GitHub raw file URL)
MIME Type: application/json

GET /:platform().json

:platform can be one of the following listed in Supported Platforms and Aliases.

Note

The () in the endpoint is not a typo, it's part of the endpoint. If you can't access the endpoint, try to encode the () to %28%29.

Get anime relation mapping data

MIME Type: application/json

GET /:platform/:mediaid
  • :platform can be one of the following listed in Supported Platforms and Aliases.
  • :mediaid is the ID of the anime in the platform.
  • To use kitsu, simkl, shikimori, themoviedb, and trakt path, please read additional information in # Provider exclusive rules before proceeding to avoid unwanted error.
Response example
GET https://animeapi.my.id/myanimelist/1
{
  "title": "Cowboy Bebop",
  "anidb": 23,
  "anilist": 1,
  "animeplanet": "cowboy-bebop",
  "anisearch": 1572,
  "annict": 360,
  "imdb": null,
  "kaize": "cowboy-bebop",
  "kaize_id": 265,
  "kitsu": 1,
  "livechart": 3418,
  "myanimelist": 1,
  "nautiljon": null,
  "nautiljon_id": null,
  "notify": "Tk3ccKimg",
  "otakotaku": 1149,
  "shikimori": 1,
  "shoboi": 538,
  "silveryasha": 2652,
  "simkl": 37089,
  "themoviedb": null,
  "trakt": 30857,
  "trakt_type": "shows",
  "trakt_season": 1
}

Provider exclusive rules

Kitsu

kitsu ID must in numerical value. If your application obtained slug as ID instead, you can resolve/convert it to ID using following Kitsu API endpoint:

GET https://kitsu.app/api/edge/anime?filter[slug]=<ID>

For example, if you want to get anime data from Kitsu with slug cowboy-bebop, you can use the following endpoint:

GET https://kitsu.app/api/edge/anime?filter[slug]=cowboy-bebop

The response will be in JSON format, and you can get the ID from data[0].id

SIMKL

Note

Also applicable to AnimeCountdown

simkl ID is only applicable for media entries in Anime category.

Shikimori

shikimori IDs are basically the same as myanimelist IDs. If you get a 404 status code, remove any alphabetical prefix from the ID and try again.

For example: z218218

The Movie DB

For The Movie DB (TMDB), the ID is in the format of :provider/:mediatype/:mediaid where :mediatype is only movie and :mediaid is the ID of the title in the provider instead of typical :provider/:mediaid format.

Trakt

For Trakt, the ID is in the format of :provider/:mediatype/:mediaid where :mediatype is either movies or shows and :mediaid is the ID of the title in the provider instead of typical :provider/:mediaid format.

An ID on Trakt must in numerical value. If your application obtained slug as ID instead, you can resolve/convert it to ID using following Trakt API endpoint:

GET https://api.trakt.tv/search/trakt/<ID>?type=<movie|show>

Note

The Trakt API requires an API key to access the endpoint. You can get the API key by registering on the Trakt website.

To get exact season mapping, append /seasons/:season_inc to the end of the ID, where :season_inc is the season number of the title in the provider.

Warning

/seasons/0 is invalid, and will return 400 status code.

For example, to get the ID of Mairimashita Iruma-kun Season 3, you can use:

GET https://animeapi.my.id/trakt/shows/152334/seasons/3
Response example from Trakt
{
  "title": "Mairimashita! Iruma-kun 3rd Season",
  "anidb": 16627,
  "anilist": 139092,
  "animeplanet": "welcome-to-demon-school-iruma-kun-3",
  "anisearch": 16582,
  "annict": 8883,
  "imdb": null,
  "kaize": "mairimashita-iruma-kun-3rd-season",
  "kaize_id": 4989,
  "kitsu": 45154,
  "livechart": 10780,
  "myanimelist": 49784,
  "nautiljon": null,
  "nautiljon_id": null,
  "notify": "Okl9YtInR",
  "otakotaku": null,
  "shikimori": 49784,
  "shoboi": 6489,
  "silveryasha": 3702,
  "simkl": 1728821,
  "themoviedb": null,
  "trakt": 152334,
  "trakt_type": "shows",
  "trakt_season": 3
}

Redirect to provider's page

HTTP Status Code: 302 OR 200 (if required)
MIME Type: None OR text/plain (if required)

GET /redirect?platform=:platform&mediaid=:mediaid&target=:platform

or

GET /rd?from=:platform&id=:mediaid&to=:platform
  • :platform can be one of the following listed in Supported Platforms and Aliases.

    Additionally, on target/to parameter, there are additional supported platforms, and can't be used as source/from due to some limitations:

    Platform 2K Aliases Additional Notes
    kurozora kr krz, kurozora.app Requires Kurozora+ subscription and MAL ID
    letterboxd lb letterboxd.com Only available for movies, requires TMDB ID
    myanili my myani.li Requires MAL ID; a web app to manage list
  • :mediaid is the ID of the anime in the platform. Please follow the instruction written in Provider exclusive rules to avoid any conflict during redirection.

Redirect: Parameters

In AnimeAPI, we use query parameters to specify the output of the API. The query parameters are as follows:

Parameter Aliases Is Required Description
platform from, f Yes The platform you want to get the data from.
mediaid id, i Yes The ID of the anime in the platform.
target to, t No The platform you want to redirect to. If you don't specify this parameter, the API will redirect to specified platform's homepage.
israw raw, r No As long as this parameter is present, the API will return the raw URL instead of redirecting.

Redirect: Response

Recommended/verbose path format
GET https://animeapi.my.id/redirect?platform=myanimelist&mediaid=1&target=trakt

HTTP/1.1 302 Found
Location: https://trakt.tv/shows/30857/seasons/1
Short/aliased/alternative path format
GET https://animeapi.my.id/rd?from=al&id=154587&to=shk

HTTP/1.1 302 Found
Location: https://shikimori.me/animes/52991
Provider with slash (/) in mediaid

There is no exclusive rule in this, as AnimeAPI will automatically understand your query

GET https://animeapi.my.id/redirect?platform=trakt&mediaid=shows/152334/seasons/3&target=myanimelist

HTTP/1.1 302 Found
Location: https://myanimelist.net/anime/49784
Raw path format
GET https://animeapi.my.id/redirect?platform=animeplanet&mediaid=cells-at-work&target=simkl&israw

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8

https://simkl.com/anime/757695

Schema

If you want to validate the response from the API, you can use the following schema in JSON Schema, TypeScript, or Python Dataclass.

JSON Schema

Add the following schema URI to your JSON file.

{ "$schema": "https://animeapi.my.id/schema.json" }
Click to expand, if you want to see the content of the schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "anime": {
      "$comment": "Interface: Anime",
      "additionalProperties": false,
      "dependencies": {
        "themoviedb_type": {
          "properties": {
            "themoviedb_season": {
              "type": "number"
            }
          },
          "required": [
            "themoviedb_season"
          ]
        },
        "trakt_type": {
          "properties": {
            "trakt_season": {
              "type": "number"
            }
          },
          "required": [
            "trakt_season"
          ]
        }
      },
      "description": "Schema for anime",
      "properties": {
        "anidb": {
          "$ref": "#/definitions/numbernull",
          "description": "aniDB ID, website: https://anidb.net/",
          "title": "aniDB"
        },
        "anilist": {
          "$ref": "#/definitions/numbernull",
          "description": "AniList ID, website: https://anilist.co/",
          "title": "AniList"
        },
        "animeplanet": {
          "$ref": "#/definitions/stringnull",
          "description": "Anime-Planet slug, website: https://www.anime-planet.com/",
          "pattern": "^[a-z0-9\\-]+$",
          "title": "Anime-Planet"
        },
        "anisearch": {
          "$ref": "#/definitions/numbernull",
          "description": "AniSearch ID, website: https://www.anisearch.com/, https://anisearch.de, https://anisearch.it, https://anisearch.es, https://anisearch.fr, https://anisearch.jp",
          "title": "AniSearch"
        },
        "annict": {
          "$ref": "#/definitions/numbernull",
          "description": "Annict ID, website: https://annict.com/, https://en.annict.com/, https://annict.jp/",
          "title": "Annict"
        },
        "imdb": {
          "$ref": "#/definitions/stringnull",
          "description": "IMDb ID, website: https://www.imdb.com/",
          "pattern": "^tt[\\d]+$",
          "title": "IMDb"
        },
        "kaize": {
          "$ref": "#/definitions/stringnull",
          "description": "Kaize slug, website: https://kaize.io/",
          "pattern": "^[a-z0-9\\-]+$",
          "title": "Kaize"
        },
        "kaize_id": {
          "$ref": "#/definitions/numbernull",
          "description": "Kaize ID in integer format, not recommended as some entry can't be found its ID compared to slug",
          "title": "Kaize ID"
        },
        "kitsu": {
          "$ref": "#/definitions/numbernull",
          "description": "Kitsu ID in integer, slug not suppported, website: https://kitsu.app/",
          "title": "Kitsu"
        },
        "livechart": {
          "$ref": "#/definitions/numbernull",
          "description": "LiveChart ID, website: https://www.livechart.me/",
          "title": "LiveChart"
        },
        "myanimelist": {
          "$ref": "#/definitions/numbernull",
          "description": "MyAnimeList ID, website: https://myanimelist.net/",
          "title": "MyAnimeList"
        },
        "nautiljon": {
          "$ref": "#/definitions/stringnull",
          "description": "Nautiljon slug in plus, website: https://www.nautiljon.com/",
          "title": "Nautiljon"
        },
        "nautiljon_id": {
          "$ref": "#/definitions/numbernull",
          "description": "Nautiljon ID in integer format, used internally",
          "title": "Nautiljon ID"
        },
        "notify": {
          "$ref": "#/definitions/stringnull",
          "description": "Notify.moe Base64 ID, website: https://notify.moe/",
          "pattern": "^[a-zA-Z0-9\\-\\_]+$",
          "title": "Notify.moe"
        },
        "otakotaku": {
          "$ref": "#/definitions/numbernull",
          "description": "Otak Otaku ID, website: https://otakotaku.com/",
          "title": "Otak Otaku"
        },
        "shikimori": {
          "$ref": "#/definitions/numbernull",
          "description": "Shikimori ID (nonprefixed), based on MyAnimeList ID. Remove prefix if found on the ID, website: https://shikimori.one/",
          "title": "Shikimori/Шикимори"
        },
        "shoboi": {
          "$ref": "#/definitions/numbernull",
          "description": "Shoboi ID, website: http://cal.syoboi.jp/",
          "title": "Shoboi/Syobocal/しょぼいカレンダー"
        },
        "silveryasha": {
          "$ref": "#/definitions/numbernull",
          "description": "Silveryasha ID, website: https://db.silveryasha.id/",
          "title": "Silveryasha"
        },
        "simkl": {
          "$ref": "#/definitions/numbernull",
          "description": "SIMKL ID, website: https://simkl.com/",
          "title": "SIMKL"
        },
        "themoviedb": {
          "$ref": "#/definitions/numbernull",
          "description": "The Movie Database ID, website: https://www.themoviedb.org/",
          "title": "The Movie Database (TMDB)"
        },
        "themoviedb_season": {
          "$ref": "#/definitions/numbernull",
          "description": "The Movie Database season number, only used if themoviedb_type is 'shows', else null",
          "title": "The Movie Database (TMDB) Season"
        },
        "themoviedb_type": {
          "$ref": "#/definitions/themoviedbtype",
          "description": "The Movie Database type, either 'movie' or 'tv'",
          "title": "The Movie Database (TMDB) Type"
        },
        "title": {
          "description": "Title of the anime",
          "title": "Title",
          "type": "string"
        },
        "trakt": {
          "$ref": "#/definitions/numbernull",
          "description": "Trakt ID, slug not supported, website: https://trakt.tv/",
          "title": "Trakt"
        },
        "trakt_season": {
          "$ref": "#/definitions/numbernull",
          "description": "Trakt season number, only used if trakt_type is 'shows', else null",
          "title": "Trakt Season"
        },
        "trakt_type": {
          "$ref": "#/definitions/trakttype",
          "description": "Trakt type, either 'movies' or 'shows'",
          "title": "Trakt Type"
        }
      },
      "required": [
        "title",
        "anidb",
        "anilist",
        "animeplanet",
        "anisearch",
        "annict",
        "imdb",
        "kaize",
        "kaize_id",
        "kitsu",
        "livechart",
        "myanimelist",
        "nautiljon",
        "nautiljon_id",
        "notify",
        "otakotaku",
        "shikimori",
        "shoboi",
        "silveryasha",
        "simkl",
        "themoviedb",
        "trakt",
        "trakt_type",
        "trakt_season"
      ],
      "title": "Anime Schema",
      "type": "object"
    },
    "numbernull": {
      "$comment": "Type: number or null",
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Type: this field value is either number or null",
      "title": "Number or Null"
    },
    "stringnull": {
      "$comment": "Type: string or null",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Type: this field value is either string or null",
      "title": "String or Null"
    },
    "themoviedbtype": {
      "$comment": "Type: 'movie', 'tv', or null",
      "anyOf": [
        {
          "enum": [
            "movie",
            "tv"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Type: this field value is either an enum of['movie', 'tv'], or null",
      "title": "The Movie Database Type"
    },
    "trakttype": {
      "$comment": "Type: 'movies', 'shows', or null",
      "anyOf": [
        {
          "enum": [
            "movies",
            "shows"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Type: this field value is either an enum of['movies', 'shows'], or null",
      "title": "Trakt Type"
    }
  },
  "description": "This schema is used to validate the JSON response from AnimeAPI V3. Schema is not backward compatible with previous versions. Website: https://animeapi.my.id",
  "oneOf": [
    {
      "$comment": "Use this schema if you want to validate an array of anime",
      "description": "Schema for array of anime",
      "items": {
        "$ref": "#/definitions/anime"
      },
      "title": "Array of Anime",
      "type": "array"
    },
    {
      "$comment": "Use this schema if you want to validate an object known in each provider",
      "description": "Schema for anime object",
      "oneOf": [
        {
          "$ref": "#/definitions/anime"
        },
        {
          "additionalProperties": {
            "$ref": "#/definitions/anime"
          }
        }
      ],
      "title": "Anime Object",
      "type": "object"
    }
  ],
  "title": "JSON Schema for AnimeAPI V3"
}

You can also read human-readable schema in JSON Schema if you want to create your own wrapper.

TypeScript

Click to expand
type StringNull = string | null;
type NumberNull = number | null;
// type TmdbType = "movie" | "tv" | null;
type TraktType = "movies" | "shows" | null;

interface Anime = {
    title:                 string; // Required, title of the anime
    anidb:             NumberNull;
    anilist:           NumberNull;
    animeplanet:       StringNull; // Slug based
    anisearch:         NumberNull;
    annict:            NumberNull;
    imdb:              StringNull; // ttXXXXXXX format
    kaize:             StringNull; // Slug based
    kaize_id:          NumberNull; // int counterpart of Kaize slug, not recommended
    kitsu:             NumberNull; // Kitsu ID, slug is not supported
    livechart:         NumberNull;
    myanimelist:       NumberNull;
    nautiljon:         StringNull; // Plus Slug based
    nautiljon_id:      NumberNull; // int counterpart of Nautiljon slug, used internally
    notify:            StringNull; // Base64 based
    otakotaku:         NumberNull;
    simkl:             NumberNull;
    shikimori:         NumberNull;
    shoboi:            NumberNull;
    silveryasha:       NumberNull;
    themoviedb:        NumberNull;
 // themoviedb_type:     TmdbType; // Not supported yet
 // themoviedb_season: NumberNull; // Not supported yet
    trakt:             NumberNull; // Trakt ID, slug is not supported
    trakt_type:         TraktType;
    trakt_season:      NumberNull;
}

// Array/List format
type AnimeList = Anime[];

// Object/Dictionary format
type AnimeObject = {
    [key: string]: Anime;
}

Python Dataclass

Click to expand
from enum import Enum
from typing import Dict, List, Literal, Optional

StringNull = Optonal[str]
NumberNull = Optional[int]

# TmdbType = Optional[Literal["movie", "tv"]]
TraktType = Optional[Literal["shows", "movies"]]

@dataclass
class Anime:
    title:                    str  # Required, title of the anime
    anidb:             NumberNull
    anilist:           NumberNull
    animeplanet:       StringNull  # Slug based
    anisearch:         NumberNull
    annict:            NumberNull
    imdb:              StringNull  # ttXXXXXXX format
    kaize:             StringNull  # Slug based
    kaize_id:          NumberNull  # int counterpart of Kaize slug, not recommended
    kitsu:             NumberNull  # Kitsu ID, slug is not supported
    livechart:         NumberNull
    myanimelist:       NumberNull
    nautiljon:         StringNull  # Plus Slug based
    nautijlon_id:      NumberNull  # int counterpart of Nautiljon slug, used internally
    notify:            StringNull  # Base64 based
    otakotaku:         NumberNull
    simkl:             NumberNull
    shikimori:         NumberNull
    shoboi:            NumberNull
    silveryasha:       NumberNull
    themoviedb:        NumberNull
  # themoviedb_type:     TmdbType  # Not supported yet
  # themoviedb_season: NumberNull  # Not supported yet
    trakt:             NumberNull  # Trakt ID, slug is currently not supported
    trakt_type:         TraktType
    trakt_season:      NumberNull

# Array/List format
anime_list = List[Anime]

# Object/Dictionary format
anime_object = Dict[str, Anime]

Acknowledgements

This project uses multiple sources to compile the data, including:

About

A RESTful API for anime relation mapping and auto redirect service across multiple anime databases

Topics

Resources

License

AGPL-3.0 and 2 other licenses found

Licenses found

AGPL-3.0
LICENSE
CC0-1.0
LICENSE-CC0
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages