Skip to content

ghoshRitesh12/aniwatch-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Logo

Aniwatch API

A free restful API serving anime information from aniwatch.to

Bug report Β· Feature request

codeql test coverage stars GitHub

Work In Progress πŸ› οΈ

This api is currently a work in progress

Table of Contents

πŸ’» Installation

Local

  1. Clone the repository and move into the directory.

    git clone https://github.com/ghoshRitesh12/aniwatch-api.git
    cd aniwatch-api
  2. Install all the dependencies.

    npm i #or yarn install
  3. Start the server!

    npm start #or yarn start

    Now the server should be running on http://localhost:4000

πŸ“š Documentation

Below are the endpoints exposed by the api:

GET Anime Home Page

Endpoint

http://localhost:4000/anime/home

Request sample

const resp = await fetch("http://localhost:4000/anime/home");
const data = await resp.json();
console.log(data);

Response Schema

{
  genres: ["Action", "Cars", "Adventure", ...],
  latestEpisodeAnimes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  spotlightAnimes: [
    {
      id: string,
      name: string,
      jname: string,
      poster: string,
      description: string,
      rank: number,
    },
    {...},
  ],
  top10Animes: {
    today: [
      {
        episodes: {
          sub: number,
          dub: number,
        },
        id: string,
        name: string,
        poster: string,
        rank: number
      },
      {...},
    ],
    month: [...],
    week: [...]
  },
  topAiringAnimes: [
    {
      id: string,
      name: string,
      jname: string,
      poster: string,
    },
    {...},
  ],
  topUpcomingAnimes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  trendingAnimes: [
    {
      id: string,
      name: string,
      poster: string,
      rank: number,
    },
    {...},
  ],
}

GET Anime About Info

Endpoint

http://localhost:4000/anime/info?id={anime-id}

Query Parameters

Parameter Type Description Required? Default
id string The unique anime id (in kebab case). Yes --

Request sample

const resp = await fetch(
  "http://localhost:4000/anime/info?id=attack-on-titan-112"
);
const data = await resp.json();
console.log(data);

Response Schema

{
  anime: [
    info: {
      id: string,
      name: string,
      poster: string,
      description: string,
      stats: {
        rating: string,
        quality: string,
        episodes: {
          sub: number,
          dub: number
        },
        type: string,
        duration: string
      }
    }
    moreInfo: {
      aired: string,
      genres: ["Action", "Mystery", ...],
      status: string,
      studios: string,
      duration: string
      ...
    }
  ],
  mostPopularAnimes: [
    {
      episodes: {
        sub: number,
        dub: number,
      },
      id: string,
      jname: string,
      name: string,
      poster: string,
      type: string
    },
    {...},
  ],
  recommendedAnimes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  relatedAnimes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  seasons: [
    {
      id: string,
      name: string,
      title: string,
      poster: string,
      isCurrent: boolean
    },
    {...}
  ]
}

GET Search Results

Endpoint

http://localhost:4000/anime/search?q={query}&page={page}

Query Parameters

Parameter Type Description Required? Default
q string The search query, i.e. the title of the item you are looking for. Yes --
page number The page number of the result. No 1

Request sample

const resp = await fetch("http://localhost:4000/anime/search?q=titan&page=1");
const data = await resp.json();
console.log(data);

Response Schema

{
  animes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  mostPopularAnimes: [
    {
      episodes: {
        sub: number,
        dub: number,
      },
      id: string,
      jname: string,
      name: string,
      poster: string,
      type: string
    },
    {...},
  ],
  currentPage: 1,
  totalPages: 1,
  hasNextPage: false
}

GET Search Suggestions

Endpoint

http://localhost:4000/anime/search/suggest?q={query}

Query Parameters

Parameter Type Description Required? Default
q string The search suggestion query. Yes --

Request sample

const resp = await fetch(
  "http://localhost:4000/anime/search/suggest?q=monster"
);
const data = await resp.json();
console.log(data);

Response Schema

{
  suggestions: [
    {
      id: string,
      name: string,
      poster: string,
      jname: string,
      moreInfo: ["Jan 21, 2022", "Movie", "17m"]
    },
    {...},
  ],
}

GET Producer Animes

Endpoint

http://localhost:4000/anime/producer/{name}?page={page}

Path Parameters

Parameter Type Description Required? Default
name string The name of anime producer (in kebab case). Yes --

Query Parameters

Parameter Type Description Required? Default
page number The page number of the result. No 1

Request sample

const resp = await fetch(
  "http://localhost:4000/anime/producer/toei-animation?page=2"
);
const data = await resp.json();
console.log(data);

Response Schema

{
  producerName: "Toei Animation Anime",
  animes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  top10Animes: {
    today: [
      {
        episodes: {
          sub: number,
          dub: number,
        },
        id: string,
        name: string,
        poster: string,
        rank: number
      },
      {...},
    ],
    month: [...],
    week: [...]
  },
  topAiringAnimes: [
    {
      episodes: {
        sub: number,
        dub: number,
      },
      id: string,
      jname: string,
      name: string,
      poster: string,
      type: string
    },
    {...},
  ],
  currentPage: 2,
  totalPages: 11,
  hasNextPage: true,
}

GET Genre Animes

Endpoint

http://localhost:4000/anime/genre/{name}?page={page}

Path Parameters

Parameter Type Description Required? Default
name string The name of anime genre (in kebab case). Yes --

Query Parameters

Parameter Type Description Required? Default
page number The page number of the result. No 1

Request sample

const resp = await fetch("http://localhost:4000/anime/genre/shounen?page=2");
const data = await resp.json();
console.log(data);

Response Schema

{
  genreName: "Shounen Anime",
  animes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  genres: ["Action", "Cars", "Adventure", ...],
  topAiringAnimes: [
    {
      episodes: {
        sub: number,
        dub: number,
      },
      id: string,
      jname: string,
      name: string,
      poster: string,
      type: string
    },
    {...},
  ],
  currentPage: 2,
  totalPages: 38,
  hasNextPage: true
}

GET Category Anime

Endpoint

http://localhost:4000/anime/{category}?page={page}

Path Parameters

Parameter Type Description Required? Default
category string The category of anime. Yes --

Query Parameters

Parameter Type Description Required? Default
page number The page number of the result. No 1

Request sample

const resp = await fetch("http://localhost:4000/anime/tv?page=2");
const data = await resp.json();
console.log(data);

Response Schema

{
  category: "TV Series Anime",
  animes: [
    {
      id: string,
      name: string,
      poster: string,
      duration: string,
      type: string,
      rating: string,
      episodes: {
        sub: number,
        dub: number,
      }
    },
    {...},
  ],
  genres: ["Action", "Cars", "Adventure", ...],
  top10Animes: {
    today: [
      {
        episodes: {
          sub: number,
          dub: number,
        },
        id: string,
        name: string,
        poster: string,
        rank: number
      },
      {...},
    ],
    month: [...],
    week: [...]
  },
  currentPage: 2,
  totalPages: 100,
  hasNextPage: true
}

GET Anime Episodes

Endpoint

http://localhost:4000/anime/episodes/{animeId}

Path Parameters

Parameter Type Description Required? Default
animeId string The unique anime id. Yes --

Request sample

const resp = await fetch("http://localhost:4000/anime/episodes/steinsgate-3");
const data = await resp.json();
console.log(data);

Response Schema

{
  totalEpisodes: 24,
  episodes: [
    {
      number: 1,
      title: "Turning Point",
      episodeId: "steinsgate-3?ep=213"
      isFiller: false,
    },
    {...}
  ]
}

GET GET Anime Episode Streaming Links

Endpoint

http://localhost:4000/anime/episode-srcs?id={episodeId}&server={server}&category={category}

Query Parameters

Parameter Type Description Required? Default
episodeId string The id of the episode. Yes --
server string The name of the server. No "vidstreaming"
category string The category of the episode ('sub' or 'dub'). No "sub"

Request sample

const resp = await fetch(
  "http://localhost:4000/anime/episode-srcs?id=steinsgate-3?ep=230&server=vidstreaming&category=dub"
);
const data = await resp.json();
console.log(data);

Response Schema

{
  headers: {
    Referer: string,
    "User-Agent": string,
    ...
  },
  sources: [
    {
      url: string, // .m3u8 hls streaming file
      isM3U8: boolean,
      quality?: string,
    },
    {...}
  ],
  subtitles: [
    {
      lang: "English",
      url: string, // .vtt subtitle file
    },
    {...}
  ],
}

πŸ‘¨β€πŸ’» Development

Pull requests and stars are always welcome. If you encounter any bug or want to add a new feature to this api, consider creating a new issue. If you wish to contribute to this project, read the CONTRIBUTING.md file.

πŸ™Œ Support

Don't forget to leave a star 🌟

πŸ“œ License

This project is licensed under the MIT License - see the LICENSE file for more details.