A simple JSON REST API. No key needed for the first 100 requests per day. Batch up to 50 titles in one call. The full description is also available as OpenAPI 3.1.
https://api.anidub.moeAll endpoints work anonymously up to 100 requests per day (IP-based). For higher limits, create a key in Settings and send it in the X-Api-Key header.
curl https://api.anidub.moe/v1/anime/21 \
-H "X-Api-Key: your_key_here"/v1/anime/{anilist_id}Dub status for one title, by AniList id.
anilist_idPATHlanguageQUERYINVALID_IDanilist_id is not a positive integerNOT_FOUNDWe do not hold this titlecurl "https://api.anidub.moe/v1/anime/21?language=en"{
"animeId": "550e8400-e29b-41d4-a716-446655440000",
"anilistId": 21,
"anidubId": 10482,
"malId": 21,
"kitsuId": 12,
"titleEnglish": "One Piece",
"titleRomaji": "One Piece",
"coverImage": "https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx21.jpg",
"episodes": null,
"dub": {
"language": "en",
"status": "dubbed",
"confidence": 0.95,
"dubbedEpisodes": 1100,
"sources": ["animeschedule", "anilist-cast"],
"reason": "Dubbed episodes listed on Crunchyroll",
"lastVerifiedAt": "2026-10-01T06:30:00.000Z"
},
"dubs": [ … ]
}/v1/anime/by-anidub/{anidub_id}Dub status for one title, by the anidub id used in anidub.moe/anime/:id URLs.
anidub_idPATHlanguageQUERYINVALID_IDanidub_id is not between 10000 and 9,099,999NOT_FOUNDNo title has this anidub idcurl "https://api.anidub.moe/v1/anime/by-anidub/10482"{
"anilistId": 21,
"anidubId": 10482,
"titleEnglish": "One Piece",
"episodes": null,
"dub": { "language": "en", "status": "dubbed", "dubbedEpisodes": 1100, … },
…
}/v1/anime/lookupUp to 50 titles in one request, by AniList id. Titles we do not hold are imported shortly after, so a later lookup can answer.
idsBODYlanguageBODYBAD_REQUESTThe body is not valid JSONVALIDATION_ERRORids is missing, empty, over 50 items, or language is unsupportedcurl https://api.anidub.moe/v1/anime/lookup \
-X POST \
-H "Content-Type: application/json" \
-d '{"ids": [21, 11061, 1535]}'{
"results": [
{ "anilistId": 21, "anidubId": 10482, "titleEnglish": "One Piece", "episodes": null,
"dub": { "language": "en", "status": "dubbed", "dubbedEpisodes": 1100, … }, … }
],
"notFound": [1535]
}/v1/anime/lookup-malUp to 50 titles in one request, by MyAnimeList id.
idsBODYlanguageBODYBAD_REQUESTThe body is not valid JSONVALIDATION_ERRORids is missing, empty, over 50 items, or language is unsupportedcurl https://api.anidub.moe/v1/anime/lookup-mal \
-X POST \
-H "Content-Type: application/json" \
-d '{"ids": [21, 11061]}'{
"results": [
{ "anilistId": 21, "malId": 21, "anidubId": 10482, "titleEnglish": "One Piece",
"dub": { "language": "en", "status": "dubbed", … }, … }
],
"notFound": []
}/v1/anime/searchSearch English, romaji and native titles, aliases and studios, closest match first. Takes every browse filter too.
qQUERYlimitQUERYgenreQUERYformatQUERYyearFromQUERYyearToQUERYseasonQUERYdubStatusQUERYdubbedQUERYstatusQUERYadultQUERYlistQUERYsortQUERYlanguageQUERYVALIDATION_ERRORq is missing or shorter than 2 characterscurl "https://api.anidub.moe/v1/anime/search?q=one%20piece&limit=10"{
"query": "one piece",
"results": [
{
"anilistId": 21,
"anidubId": 10482,
"titleEnglish": "One Piece",
"format": "TV",
"status": "RELEASING",
"episodes": null,
"seasonYear": 1999,
"studio": "Toei Animation",
"isAdult": false,
"dubStatus": "dubbed",
"dubConfidence": 0.95,
"dubbedEpisodes": 1100,
"dubLastVerifiedAt": "2026-10-01T06:30:00.000Z",
…
}
]
}/v1/anime/browsePaginated browse. Every filter combines with the others and with an optional text query.
qQUERYgenreQUERYformatQUERYyearFromQUERYyearToQUERYseasonQUERYdubStatusQUERYdubbedQUERYstatusQUERYadultQUERYlistQUERYsortQUERYpageQUERYlimitQUERYlanguageQUERYVALIDATION_ERRORA year is out of range, or a dubStatus value is unknowncurl "https://api.anidub.moe/v1/anime/browse?genre=Action&dubStatus=dubbed&page=1"{
"results": [
{ "anilistId": 16498, "titleEnglish": "Attack on Titan", "dubStatus": "dubbed",
"dubbedEpisodes": 25, "episodes": 25, … }
],
"page": 1,
"hasMore": true,
"total": 1840
}/v1/anime/trendingMost looked-up titles over the past 7 days: searches and title views on the website and API, each visitor counted once per title per day.
limitQUERYlanguageQUERYcurl "https://api.anidub.moe/v1/anime/trending?limit=7"{
"period": "7d",
"results": [
{ "anilistId": 21, "anidubId": 10482, "titleEnglish": "One Piece",
"dubStatus": "dubbed", "searchCount": 842, … }
]
}/v1/healthService status, API version and server time.
curl https://api.anidub.moe/v1/health{
"status": "ok",
"version": "0.1.0",
"timestamp": "2026-10-07T12:00:00.000Z"
}animeId(string)anilistId(number)anidubId(number | null)malId(number | null)kitsuId(number | null)titleEnglish(string | null)titleRomaji(string | null)coverImage(string | null)episodes(number | null)dub(DubInfo | null)dubs(DubInfo[])language(string)status(DubStatus)confidence(number)dubbedEpisodes(number | null)sources(string[])reason(string | null)lastVerifiedAt(string | null)One title in search and browse results.
anilistId(number)anidubId(number | null)malId(number | null)titleEnglish(string | null)titleRomaji(string | null)titleNative(string | null)coverImage(string | null)format(string | null)status(string | null)episodes(number | null)seasonYear(number | null)season(string | null)genres(string[] | null)studio(string | null)isAdult(boolean)dubStatus(DubStatus)dubConfidence(number)dubbedEpisodes(number | null)dubLastVerifiedAt(string | null)dubbedin_productionannouncednoneunknownINVALID_IDanilist_id is not a positive integerBAD_REQUESTThe body is not valid JSONVALIDATION_ERRORids is missing, empty, over 50 items, or language is unsupportedINVALID_KEYThe X-Api-Key header does not match a keyKEY_REVOKEDThe key was revokedNOT_FOUNDWe do not hold this titleRATE_LIMIT_EXCEEDEDDaily limit reached; see Retry-AfterINTERNAL_ERRORUnexpected server errorAll error responses share the shape: { error: string, code: string }