Skip to content

AniPulse/AnimeAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Banner

GitHub Stars GitHub Forks Node.js License Version GitHub last commit


A powerful and fast RestFul API made with Node.js for fetching comprehensive anime information.

⚠️ Disclaimer

  1. This API does not store any media files. It exclusively links to media hosted on 3rd party services.
  2. It is explicitly intended for educational purposes only and is not for commercial usage. The repository maintainers are not responsible for any misuse.

📋 Table of Contents

⚙️ Local installation

Make sure you have node installed on your device

  1. Run the following code to clone the repository and install all required dependencies
$ git clone https://github.com/Shineii86/AnimeAPI.git
$ cd AnimeAPI
$ npm install
  1. Refer the .env.example file to setup .env file
# Origins you want to allow

ALLOWED_ORIGIN=<https://site1.com>,<https://site2.com>,...
  1. Start the server
$ npm start #or npm run devStart

🌩️ Deployment

Vercel

Host your own instance of AnimeAPI on vercel

Deploy to Vercel

Render

Host your own instance of AnimeAPI on Render.

Deploy to Render

📚 Documentation

GET Home info

  GET /api/

Endpoint

  /api/

No parameter required ❌

Example of request

import axios from "axios";
const resp = await axios.get("/api/");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "spotlights": [
      {
        "id":string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "description": string,
        "tvInfo": {
          "showType": string,
          "duration": string,
          "releaseDate": string,
          "quality": string,
          "episodeInfo": [object]
        }
      },
      {...}
    ],
    "trending": [
      {
        "id":string,
        "data_id": number,
        "number": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
      }
      {...}
    ],
    "today":[
      "schedule":[
        {
          "id":string,
          "data_id":number,
          "title":string,
          "japanese_title":string,
          "releaseDate":string,
          "time":string,
          "episode_no":number,
        },{...}
      ]
    ],
    "topAiring":[
      {
        "id":string,
        "data_id":number,
        "poster":string,
        "title":string,
        "japanese_title":string,
        "description":string,
        tvInfo:[object]
      }
    ],
    "mostPopular":[
      {
        "id":string,
        "data_id":number,
        "poster":string,
        "title":string,
        "japanese_title":string,
        "description":string,
        tvInfo:[object]
      },
    "mostFavorite":[
      {
        "id":string,
        "data_id":number,
        "poster":string,
        "title":string,
        "japanese_title":string,
        "description":string,
        tvInfo:[object]
      }
    ],
    "latestCompleted":[
      {
        "id":string,
        "data_id":number,
        "poster":string,
        "title":string,
        "japanese_title":string,
        "description":string,
        tvInfo:[object]
      }
    ],
    "latestEpisode":[
      {
        "id":string,
        "data_id":number,
        "poster":string,
        "title":string,
        "japanese_title":string,
        "description":string,
        tvInfo:[object]
      }
    ],
    "genres":[
      string,
      string,
      string,
      ...
    ]
  }
}

GET Top 10 anime's info

  GET /api/top-ten

Endpoint

  /api/top-ten

No parameter required

Example of request

import axios from "axios";
const resp = await axios.get("/api/top-ten");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": [
    "topTen":[
      "today":[
        {
          "id":string,
          "data_id": number,
          "number": number,
          "name": string,
          "poster": string,
          "tvInfo": [Object]
        },
        {...}
      ],
      "week":[
        {
          "id":string,
          "data_id": number,
          "number": number,
          "name": string,
          "poster": string,
          "tvInfo": [Object]
        },
        {...}
      ],
      "month":[
        {
          "id":string,
          "data_id": number,
          "number": number,
          "name": string,
          "poster": string,
          "tvInfo": [Object]
        },
        {...}
      ],
    ]
  ]
}

GET Top Search

  GET /api/top-search

No parameter required ❌

Example of request

import axios from "axios";
const resp = await axios.get("/api/top-search");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": [
    {
      "title": string,
      "link": string
    },
    {...}
  ]
}

GET Specified anime's info

  GET /api/info

Endpoint

  /api/info?id={string}

Parameters

Parameter Parameter-Type Data-Type Description Mandatory ? Default
id query string anime-id Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/info?id=yami-shibai-9-17879");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "data": {
      "adultContent":boolean,
      "id":string,
      "data_id": number,
      "title": string,
      "japanese_title": string,
      "poster": string,
      "showType":string,
      "animeInfo": {
        "Overview": string,
        "Japanese": string,
        "Synonyms": string,
        "Aired": string,
        "Premiered": string,
        "Duration": string,
        "Status": string,
        "MAL Score": string,
        "Genres": [Object],
        "Studios": string,
        "Producers": [Object]
      }
    },
    "seasons": [
      {
        "id":string,
        "data_number": number,
        "data_id": number,
        "season": string,
        "title": string,
        "japanese_title": string,
        "season_poster": string
      },
      {...}
    ],

  }
}

GET Random anime's info

  GET /api/random

Endpoint

  /api/random

Example of request

import axios from "axios";
const resp = await axios.get("/api/random");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "data": {
      "adultContent":boolean,
      "id":string,
      "data_id": number,
      "title": string,
      "japanese_title": string,
      "poster": string,
      "showType":string,
      "animeInfo": {
        "Overview": string,
        "Japanese": string,
        "Synonyms": string,
        "Aired": string,
        "Premiered": string,
        "Duration": string,
        "Status": string,
        "MAL Score": string,
        "Genres": [Object],
        "Studios": string,
        "Producers": [Object]
      }
    },
    "related_data":[
      [
       {
          "duration": "string",
          "data_id": "number",
          "id": "string",
          "title": "string",
          "japanese_title": "string",
          "poster": "string",
          "tvInfo": {
              "dub": "number",
              "sub": "number",
              "showType": "string",
              "eps": "number"
            }
        },{...}
      ]
    ],
    "recommended_data":[
      [
       {
          "duration": "string",
          "data_id": "number",
          "id": "string",
          "title": "string",
          "japanese_title": "string",
          "poster": "string",
          "tvInfo": {
              "dub": "number",
              "sub": "number",
              "showType": "string",
              "eps": "number"
            }
        },{...}
      ]
    ],
    "seasons": [
      {
        "id":string,
        "data_number": number,
        "data_id": number,
        "season": string,
        "title": string,
        "japanese_title": string,
        "season_poster": string
      },
      {...}
    ],

  }
}

GET Categories info

  GET /api/<category>

Endpoint

  /api/{string}?page={number}
  #or
  /api/{string}

Parameters

Parameter Parameter-Type Data-Type Description Mandatory ? Default
category path string Category Yes ✔️ --
page query number Page-no. No ❌ 1

List of Categories

  • top-airing
  • most-popular
  • most-favorite
  • completed
  • recently-updated
  • recently-added
  • top-upcoming
  • subbed-anime
  • dubbed-anime
  • top-upcoming
  • genre/action
  • genre/adventure
  • genre/cars
  • genre/comedy
  • genre/dementia
  • genre/demons
  • genre/drama
  • genre/ecchi
  • genre/fantasy
  • genre/game
  • genre/harem
  • genre/historical
  • genre/horror
  • genre/isekai
  • genre/josei
  • genre/kids
  • genre/magic
  • genre/martial-arts
  • genre/mecha
  • genre/military
  • genre/music
  • genre/mystery
  • genre/parody
  • genre/police
  • genre/psychological
  • genre/romance
  • genre/samurai
  • genre/school
  • genre/sci-fi
  • genre/seinen
  • genre/shoujo
  • genre/shoujo-ai
  • genre/shounen
  • genre/shounen-ai
  • genre/slice-of-life
  • genre/space
  • genre/sports
  • genre/super-power
  • genre/supernatural
  • genre/thriller
  • genre/vampire
  • az-list
  • az-list/other
  • az-list/0-9
  • az-list/a
  • az-list/b
  • az-list/c
  • az-list/d
  • az-list/e
  • az-list/f
  • az-list/g
  • az-list/h
  • az-list/i
  • az-list/j
  • az-list/k
  • az-list/l
  • az-list/m
  • az-list/n
  • az-list/o
  • az-list/p
  • az-list/q
  • az-list/r
  • az-list/s
  • az-list/t
  • az-list/u
  • az-list/v
  • az-list/w
  • az-list/x
  • az-list/y
  • az-list/z
  • movie
  • special
  • ova
  • ona
  • tv

Example of request

import axios from "axios";
const resp = await axios.get("/api/most-popular?page=1");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "totalPages": number,
    "data": [
      {
        "id":string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "description": string,
        "tvInfo": {
          "showType": string,
          "duration": string,
          "sub": number,
          "dub": number
        },
        "adultContent":boolean,
      },
      {
        "id":string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "description": string,
        "tvInfo": {
          "showType": sting,
          "duration": string,
          "sub": number,
          "dub": number,
          "eps": number
        },
        "adultContent":boolean,
      },
      {...}
    ],
    "totalPages":number
  }
}

GET Anime of specific producers or studio

  GET /api/<producer>/

Endpoint

  /api/producer/{string}?page={number}
  #or
  /api/producer/{string}

Parameters

Parameter Parameter-Type Data-Type Description Mandatory ? Default
producer path string Producer Yes ✔️ --
page query number Page-no. No ❌ 1

Example of request

import axios from "axios";
const resp = await axios.get("/api/producer/ufotable?page=1");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "totalPages": number,
    "data": [
      {
        "id":string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "description": string,
        "tvInfo": {
          "showType": string,
          "duration": string,
          "sub": number,
          "dub": number
        },
        "adultContent":boolean,
      },
      {
        "id":string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "description": string,
        "tvInfo": {
          "showType": sting,
          "duration": string,
          "sub": number,
          "dub": number,
          "eps": number
        },
        "adultContent":boolean,
      },
      {...}
    ],
    "totalPages":number
  }
}

GET Search result's info

  GET /api/search

Endpoint

  /api/search?keyword={string}

Parameters

Parameter Parameter-Type Type Description Mandatory ? Default
keyword query string keyword Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/search?keyword=one%20punch%20man");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": [
    {
        "id":string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "tvInfo": [Object]
      },
    {
        "id":string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "tvInfo": [Object]
      },
    {...}
  ]
}

GET Search suggestions

  GET /api/search/suggest

Endpoint

  /api/search/suggest?keyword={string}

Parameters

Parameter Parameter-Type Type Description Mandatory ? Default
keyword query string keyword Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/search/suggest?keyword=demon");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": [
    {
        "id":"string",
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "releaseDate": string,
        "showType": string,
        "duration": string,
      },
    {
        "id":"string",
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "releaseDate": string,
        "showType": string,
        "duration": string,
      },
    {...}
  ]
}

GET Filter Anime

GET /api/filter

Endpoint

/api/filter

Parameters

Parameter Parameter-Type Data-Type Description Mandatory ? Default
type query string Type of anime (e.g., movie, tv, etc.) No ❌ ALL
status query string Status of anime (e.g., finished, currently_airing, etc.) No ❌ ALL
rated query string Rating of anime (e.g., G, PG, etc.) No ❌ ALL
score query string Score rating (e.g., 1 to 10) No ❌ ALL
season query string Season of anime (e.g., spring, summer, etc.) No ❌ ALL
language query string Language of anime (e.g., sub, dub) No ❌ ALL
genres query string Comma-separated list of genres (e.g., action, comedy) No ❌ ALL
sort query string Sorting method (e.g., default, score, etc.) No ❌ DEFAULT
page query number Page number for pagination No ❌ 1
sy query number Start year No ❌ undefined
sm query number Start month No ❌ undefined
sd query number Start day No ❌ undefined
ey query number End year No ❌ undefined
em query number End month No ❌ undefined
ed query number End day No ❌ undefined
keyword query string Search keyword No ❌ undefined

Example of Request

import axios from "axios";

const params = {
  type: "2", // TV
  status: "1", // Finished
  rated: "5", // R+
  sort: "default",
  page: 1,
};

const resp = await axios.get("/api/filter", { params });
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "totalPages": number,
    "data": [
      {
        "id": string,
        "data_id": number,
        "poster": string,
        "title": string,
        "japanese_title": string,
        "description": string,
        "tvInfo": {
          "showType": string,
          "duration": string,
          "sub": number,
          "dub": number
        },
        "adultContent": boolean
      },
      {...}
    ]
  }
}

GET Anime's episode list

  GET /api/episodes/

Endpoint

  /api/episodes/{param}

Parameters

Parameter-Type Data-Type Description Mandatory ? Default
param string anime-id Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/episodes/one-piece-100");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": [
    "totalEpisodes":number,
    "episodes":[
    { "episode_no": number,
      "id": string,
      "data_id": number,
      "jname": string,
      "title": string,
      "japanese_title": string
    },
    {...}
    ]
  ]
}

GET Schedule of upcoming anime

  GET /api/schedule

Endpoint

  /api/schedule?date={string}

Parameters

Parameter Parameter-Type Data-Type Description Mandatory ? Default
date query string date Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/schedule?date=2024-09-23");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": [
    {
      "id":string,
      "data_id":number,
      "title":string,
      "japanese_title":string,
      "releaseDate":string,
      "time":string,
      "episode_no":number
    },
    {...}
  ]
}

GET Schedule of next episode of Anime

  GET /api/schedule/

Endpoint

  /api/schedule/:id

Parameters

Parameter Parameter-Type Data-Type Description Mandatory ? Default
id param string anime-id Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/schedule/one-piece-100");
console.log(resp.data);

Sample Response

{
  "success":true,
  "results":
  {
    "nextEpisodeSchedule":"2025-02-08 16:30:00"
  }
}

GET Qtip info

   GET /api/qtip/

Endpoint

   /api/qtip/{id}

Parameters

Parameter Data-Type Description Mandatory ? Default
param number id Yes ✔️ Yes ✔️

Example of request

import axios from "axios";
const resp = await axios.get("/api/qtip/3365");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "title": string,
    "rating": double,
    "quality": string,
    "subCount": number,
    "dubCount": number,
    "episodeCount": number,
    "type": string,
    "description": string,
    "japaneseTitle": string,
    "Synonyms": string,
    "airedDate": string,
    "status": string,
    "genres": [Object],
    "watchLink": string
  }
}

GET Characters

   GET /api/character/list/

Endpoint

   /api/character/list/{id}

Parameters

Parameter-Type Data-Type Description Mandatory ? Default
param string anime-id Yes ✔️ Yes ✔️

Example of request

import axios from "axios";
const resp = await axios.get("/api/character/list/one-piece-100");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "currentPage": number,
    "totalPages": number,
    "data": [
      {
        "character": {
          "id": string,
          "poster": string,
          "name": string,
          "cast": string
        },
        "voiceActors": [
          {
            "id": string,
            "poster": string,
            "name": string
          },
          {
            "id": string,
            "poster": string,
            "name": string
          },
          {...}
        ]
      },{...}
    ]
  }
}

GET Streaming info

  GET /api/stream

Endpoint

  /api/stream?id={string}&server={string}&type={string}

Parameters

Parameters Parameter-Type Type Mandatory ? Default
id , server , type query string Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get(
  "/api/stream?id=frieren-beyond-journeys-end-18542?ep=107257&server=hd-1&type=sub"
);
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "streamingLink": [
      {
            "id":number,
            "type": "sub",
            "link": {
              "file":string,
              "type":string,
            },
            "tracks": [
              {
                "file": string,
                "label": string,
                "kind": string,
                "default": boolean
              },{...}
            ],
            "intro": [Object],
            "outro": [Object],
            "server":string
      }
    ],
    "servers": [
      {
        "type":string,
        "data_id": number,
        "server_id": number,
        "server_name": string
      },
      {...}
    ]
  }
}

GET Fallback Streaming info

  GET /api/stream/fallback

Endpoint

  /api/stream/fallback?id={string}&server={string}&type={string}

Parameters

Parameters Parameter-Type Type Mandatory ? Default
id , server , type query string Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get(
  "/api/stream/fallback?id=frieren-beyond-journeys-end-18542?ep=107257&server=hd-1&type=sub"
);
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "streamingLink": [
      {
            "id":number,
            "type": "sub",
            "link": {
              "file":string,
              "type":string,
            },
            "tracks": [
              {
                "file": string,
                "label": string,
                "kind": string,
                "default": boolean
              },{...}
            ],
            "intro": [Object],
            "outro": [Object],
            "server":string
      }
    ],
    "servers": [
      {
        "type":string,
        "data_id": number,
        "server_id": number,
        "server_name": string
      },
      {...}
    ]
  }
}

GET Available servers of anime

  GET /api/servers/

Endpoint

  /api/servers/{id}

Parameters

Parameter-Type Data-Type Description Mandatory ? Default
params string keyword Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get(
  "/api/servers/demon-slayer-kimetsu-no-yaiba-hashira-training-arc-19107?ep=124260"
);
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": [
    {
      "type": string,
      "data_id": number,
      "server_id": number,
      "serverName": string
    },
    {...},
  ]
}

GET Character Details

  GET /api/character/

Endpoint

  /api/character/{id}

Parameters

Parameter-Type Data-Type Description Mandatory ? Default
params string character-id Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/character/asta-340");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "data": [{
      "id": "asta-340",
      "name": "Asta",
      "profile": "https://cdn.noitatnemucod.net/thumbnail/400x400/100/945515d313d02fdcd33be3085512c550.jpg",
      "japaneseName": "アスタ",
      "about": {
        "description": "Asta is the main protagonist of Black Clover...",
        "style": "<p>Asta is the main protagonist of Black Clover...</p>"
      },
      "voiceActors": [
        {
          "name": "Kajiwara, Gakuto",
          "profile": "https://example.com/profile.jpg",
          "language": "Japanese",
          "id": "gakuto-kajiwara-534"
        },
        {
          "name": "Dallas Reid",
          "profile": "https://example.com/profile2.jpg",
          "language": "English",
          "id": "dallas-reid-892"
        }
      ],
      "animeography": [
        {
          "title": "Black Clover",
          "id": "2404",
          "role": "Main",
          "type": "TV",
          "poster": "https://example.com/poster.jpg"
        },
        {
          "title": "Black Clover: Sword of the Wizard King",
          "id": "2405",
          "role": "Main",
          "type": "Movie",
          "poster": "https://example.com/poster2.jpg"
        }
      ]
    }]
  }
}

GET Voice Actor Details

  GET /api/actors/

Endpoint

  /api/actors/{id}

Parameters

Parameter-Type Data-Type Description Mandatory ? Default
params string voice-actor-id Yes ✔️ --

Example of request

import axios from "axios";
const resp = await axios.get("/api/actors/gakuto-kajiwara-534");
console.log(resp.data);

Sample Response

{
  "success": true,
  "results": {
    "data": [{
      "id": "gakuto-kajiwara-534",
      "name": "Kajiwara, Gakuto",
      "profile": "https://cdn.noitatnemucod.net/thumbnail/400x400/100/945515d313d02fdcd33be3085512c550.jpg",
      "japaneseName": "梶原岳人",
      "about": {
        "description": "Kajiwara Gakuto is a Japanese voice actor...",
        "style": "<p>Kajiwara Gakuto is a Japanese voice actor...</p>"
      },
      "roles": [
        {
          "anime": {
            "title": "Black Clover",
            "poster": "https://example.com/poster.jpg",
            "type": "TV",
            "year": "2017",
            "id": "black-clover"
          },
          "character": {
            "name": "Asta",
            "profile": "https://example.com/asta.jpg",
            "role": "Main"
          }
        },
        // ... more roles ...
      ]
    }]
  }
}

🤝 Contributing

Contributions are welcome! Feel free to:

  • 💡 Suggest features or improvements
  • 🐛 Report bugs or usability issues
  • 🤝 Submit pull requests

🚧 How to Contribute

  1. Fork this repo

  2. Create your feature branch:

    git checkout -b feature/amazing-feature
  3. Commit your changes:

    git commit -m "Add amazing feature"
  4. Push to your branch:

    git push origin feature/amazing-feature
  5. Open a Pull Request

Please follow the Contributor Covenant Code of Conduct.


📜 License

This project is licensed under the MIT License. See the LICENSE file for details.


💕 Loved My Work?

🚨 Follow me on GitHub

Give a star to this project

Banner

For inquiries or collaborations

Telegram Badge Instagram Badge Pinterest Badge Gmail Badge

Copyright © 2025 Shinei Nouzen All Rights Reserved

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks