This repository has been archived on 2026-07-27 . You can view files and clone it. You cannot open issues or pull requests or push a commit.
681a4487156c3eab9a2bddacd6a0b06388b68c6a
Aniwatch API
A free restful API serving anime information from aniwatch.to
Bug report
·
Feature request
Work In Progress 🛠️
This api is currently a work in progress
Table of Contents
💻 Installation
Local
-
Clone the repository and move into the directory.
git clone https://github.com/ghoshRitesh12/aniwatch-api.git cd aniwatch-api -
Install all the dependencies.
npm i #or yarn install -
Start the server!
npm start #or yarn startNow 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.
Description
NodeJS API for obtaining anime data from https://hianime.to
https://aniwatch.service.wtr.qzz.io
Readme
2.6 MiB
Languages
TypeScript
72.9%
HTML
21.2%
Dockerfile
3.2%
JavaScript
2%
Shell
0.7%