A free restful API serving anime information from aniwatch.to
Bug report
·
Feature request
This api is currently a work in progress
Clone the repository and move into the directory.
git clone https://github.com/ghoshRitesh12/aniwatch-api.git
cd aniwatch-api
Install all the dependencies.
Start the server!
Now the server should be running on http://localhost:4000
Below are the endpoints exposed by the api:
http://localhost:4000/anime/home
const resp = await fetch ( "http://localhost:4000/anime/home" ) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
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 ,
} ,
{ ...} ,
] ,
}
http://localhost:4000/anime/info? id={anime-id}
Parameter
Type
Description
Required?
Default
id
string
The unique anime id (in kebab case).
Yes
--
const resp = await fetch (
"http://localhost:4000/anime/info?id=attack-on-titan-112"
) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
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
} ,
{ ...}
]
}
http://localhost:4000/anime/search? q={query}& page={page}
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
const resp = await fetch ( "http://localhost:4000/anime/search?q=titan&page=1" ) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
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
}
http://localhost:4000/anime/search/suggest? q={query}
Parameter
Type
Description
Required?
Default
q
string
The search suggestion query.
Yes
--
const resp = await fetch (
"http://localhost:4000/anime/search/suggest?q=monster"
) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
suggestions : [
{
id : string ,
name : string ,
poster : string ,
jname : string ,
moreInfo : [ "Jan 21, 2022" , "Movie" , "17m" ]
} ,
{ ...} ,
] ,
}
http://localhost:4000/anime/producer/{name}? page={page}
Parameter
Type
Description
Required?
Default
name
string
The name of anime producer (in kebab case).
Yes
--
Parameter
Type
Description
Required?
Default
page
number
The page number of the result.
No
1
const resp = await fetch (
"http://localhost:4000/anime/producer/toei-animation?page=2"
) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
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 ,
}
http://localhost:4000/anime/genre/{name}? page={page}
Parameter
Type
Description
Required?
Default
name
string
The name of anime genre (in kebab case).
Yes
--
Parameter
Type
Description
Required?
Default
page
number
The page number of the result.
No
1
const resp = await fetch ( "http://localhost:4000/anime/genre/shounen?page=2" ) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
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
}
http://localhost:4000/anime/{category}? page={page}
Parameter
Type
Description
Required?
Default
category
string
The category of anime.
Yes
--
Parameter
Type
Description
Required?
Default
page
number
The page number of the result.
No
1
const resp = await fetch ( "http://localhost:4000/anime/tv?page=2" ) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
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
}
http://localhost:4000/anime/episodes/{animeId}
Parameter
Type
Description
Required?
Default
animeId
string
The unique anime id.
Yes
--
const resp = await fetch ( "http://localhost:4000/anime/episodes/steinsgate-3" ) ;
const data = await resp . json ( ) ;
console . log ( data ) ;
{
totalEpisodes : 24 ,
episodes : [
{
number : 1 ,
title : "Turning Point" ,
episodeId : "steinsgate-3?ep=213"
isFiller : false ,
} ,
{ ...}
]
}
GET
GET Anime Episode Streaming Links
http://localhost:4000/anime/episode-srcs? id={episodeId}& server={server}& category={category}
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"
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 ) ;
{
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
} ,
{ ...}
] ,
}
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.
Don't forget to leave a star 🌟
This project is licensed under the MIT License - see the LICENSE file for more details.