Git Product home page Git Product logo

aniwatch-api's Introduction

Logo

Aniwatch API

A free restful API serving anime information from aniwatch.to

Bug report ยท Feature request

codeql docker-build test coverage stars forks GitHub

Important

  1. https://api-aniwatch.onrender.com is only meant to demo the API and has rate-limiting enabled to minimise bandwidth consumption. It is recommended to deploy your own instance for personal use by customizing the api as you need it to be.
  2. This API is just an unofficial api for aniwatch.to and is in no other way officially related to the same.
  3. The content that this api provides is not mine, nor is it hosted by me. These belong to their respective owners. This api just demonstrates how to build an api that scrapes websites and uses their content.

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 or pnpm i
  3. Start the server!

    npm start #or yarn start or pnpm start

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

Docker

Docker image is available at GitHub Container Registry.

Run the following commands to pull and run the docker image.

docker pull ghcr.io/ghoshritesh12/aniwatch
docker run -p 4000:4000 ghcr.io/ghoshritesh12/aniwatch

The above command will start the server on port 4000. You can access the server at http://localhost:4000 and you can also change the port by changing the -p option to -p <port>:4000.

You can also add the -d flag to run the container in detached mode.

โ›… Host your instance

Vercel

Deploy your own instance of Aniwatch API on Vercel.

Deploy with Vercel

Note

When deploying to vercel, set an env named IS_VERCEL_DEPLOYMENT to true or anything, but this env should be present.

Render

Deploy your own instance of Aniwatch API on Render.

Deploy to Render

๐Ÿ“š Documentation

The endpoints exposed by the api are listed below with examples that uses the Fetch API, but you can use any http library.

GET Anime Home Page

Endpoint

https://api-aniwatch.onrender.com/anime/home

Request sample

const resp = await fetch("https://api-aniwatch.onrender.com/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,
      otherInfo: string[],
      episodes: {
        sub: number,
        dub: 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,
    },
    {...},
  ],
}

๐Ÿ”ผ Back to Top

GET Anime About Info

Endpoint

https://api-aniwatch.onrender.com/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(
  "https://api-aniwatch.onrender.com/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
    },
    {...}
  ]
}

๐Ÿ”ผ Back to Top

GET Search Results

Endpoint

https://api-aniwatch.onrender.com/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(
  "https://api-aniwatch.onrender.com/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
}

๐Ÿ”ผ Back to Top

GET Search Suggestions

Endpoint

https://api-aniwatch.onrender.com/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(
  "https://api-aniwatch.onrender.com/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"]
    },
    {...},
  ],
}

๐Ÿ”ผ Back to Top

GET Producer Animes

Endpoint

https://api-aniwatch.onrender.com/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(
  "https://api-aniwatch.onrender.com/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,
}

๐Ÿ”ผ Back to Top

GET Genre Animes

Endpoint

https://api-aniwatch.onrender.com/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(
  "https://api-aniwatch.onrender.com/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
}

๐Ÿ”ผ Back to Top

GET Category Anime

Endpoint

https://api-aniwatch.onrender.com/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

// categories -> "most-favorite", "most-popular", "subbed-anime", "dubbed-anime", "recently-updated", "recently-added", "top-upcoming", "top-airing", "movie", "special", "ova", "ona", "tv", "completed"

const resp = await fetch("https://api-aniwatch.onrender.com/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
}

๐Ÿ”ผ Back to Top

GET Estimated Schedules

Endpoint

https://api-aniwatch.onrender.com/anime/schedule?date={date}

Query Parameters

Parameter Type Description Required? Default
date (yyyy-mm-dd) string The date of the desired schedule. (months & days must have 2 digits) Yes --

Request sample

const resp = await fetch(
  "https://api-aniwatch.onrender.com/anime/schedule?date=2023-01-14"
);
const data = await resp.json();
console.log(data);

Response Schema

{
  scheduledAnimes: [
    {
      id: string,
      time: string, // 24 hours format
      name: string,
      jname: string,
    },
    {...}
  ]
}

๐Ÿ”ผ Back to Top

GET Anime Episodes

Endpoint

https://api-aniwatch.onrender.com/anime/episodes/{animeId}

Path Parameters

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

Request sample

const resp = await fetch(
  "https://api-aniwatch.onrender.com/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,
    },
    {...}
  ]
}

๐Ÿ”ผ Back to Top

GET Anime Episode Servers

Endpoint

https://api-aniwatch.onrender.com/anime/servers?episodeId={id}

Query Parameters

Parameter Type Description Required? Default
episodeId string The unique episode id. Yes --

Request sample

const resp = await fetch(
  "https://api-aniwatch.onrender.com/anime/servers?episodeId=steinsgate-0-92?ep=2055"
);
const data = await resp.json();
console.log(data);

Response Schema

{
  episodeId: "steinsgate-0-92?ep=2055",
  episodeNo: 5,
  sub: [
    {
      serverId: 4,
      serverName: "vidstreaming",
    },
    {...}
  ],
  dub: [
    {
      serverId: 1,
      serverName: "megacloud",
    },
    {...}
  ],
}

๐Ÿ”ผ Back to Top

GET Anime Episode Streaming Links

Endpoint

https://api-aniwatch.onrender.com/anime/episode-srcs?id={episodeId}&server={server}&category={category}

Query Parameters

Parameter Type Description Required? Default
id 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(
  "https://api-aniwatch.onrender.com/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
    },
    {...}
  ],
  anilistID: number | null,
  malID: number | null,
}

๐Ÿ”ผ Back to Top

๐Ÿ‘จโ€๐Ÿ’ป 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.

๐Ÿค Thanks

๐Ÿ™Œ Support

Don't forget to leave a star ๐ŸŒŸ. You can also follow me on Twitter @_riteshghosh.

๐Ÿ“œ License

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

Made with ๐Ÿ’– by Ritesh

aniwatch-api's People

Contributors

ghoshritesh12 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.