anidubDUB · TRACKER
HomeBrowseScheduleExtensionAPI
REST API · v1

Dub data for your app.

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.

BASE URL

https://api.anidub.moe

AUTHENTICATION

All 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.

Request
curl https://api.anidub.moe/v1/anime/21 \
  -H "X-Api-Key: your_key_here"

ENDPOINTS

GET/v1/anime/{anilist_id}
200 OK

Dub status for one title, by AniList id.

PARAMETERS
anilist_idPATH
AniList id
languageQUERY
BCP-47 dub language, such as "en", "es-419" or "pt-BR". Default "en"optional
ERROR RESPONSES
400INVALID_IDanilist_id is not a positive integer
404NOT_FOUNDWe do not hold this title
Request
curl "https://api.anidub.moe/v1/anime/21?language=en"
Response200 OK
{
  "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": [ … ]
}
GET/v1/anime/by-anidub/{anidub_id}
200 OK

Dub status for one title, by the anidub id used in anidub.moe/anime/:id URLs.

PARAMETERS
anidub_idPATH
anidub id, 10000–9,099,999
languageQUERY
BCP-47 dub language, such as "en", "es-419" or "pt-BR". Default "en"optional
ERROR RESPONSES
400INVALID_IDanidub_id is not between 10000 and 9,099,999
404NOT_FOUNDNo title has this anidub id
Request
curl "https://api.anidub.moe/v1/anime/by-anidub/10482"
Response200 OK
{
  "anilistId": 21,
  "anidubId": 10482,
  "titleEnglish": "One Piece",
  "episodes": null,
  "dub": { "language": "en", "status": "dubbed", "dubbedEpisodes": 1100, … },
  …
}
POST/v1/anime/lookup
200 OK

Up to 50 titles in one request, by AniList id. Titles we do not hold are imported shortly after, so a later lookup can answer.

PARAMETERS
idsBODY
AniList ids, 1–50
languageBODY
BCP-47 dub language, such as "en", "es-419" or "pt-BR". Default "en"optional
ERROR RESPONSES
400BAD_REQUESTThe body is not valid JSON
400VALIDATION_ERRORids is missing, empty, over 50 items, or language is unsupported
Request
curl https://api.anidub.moe/v1/anime/lookup \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"ids": [21, 11061, 1535]}'
Response200 OK
{
  "results": [
    { "anilistId": 21, "anidubId": 10482, "titleEnglish": "One Piece", "episodes": null,
      "dub": { "language": "en", "status": "dubbed", "dubbedEpisodes": 1100, … }, … }
  ],
  "notFound": [1535]
}
POST/v1/anime/lookup-mal
200 OK

Up to 50 titles in one request, by MyAnimeList id.

PARAMETERS
idsBODY
MyAnimeList ids, 1–50
languageBODY
BCP-47 dub language, such as "en", "es-419" or "pt-BR". Default "en"optional
ERROR RESPONSES
400BAD_REQUESTThe body is not valid JSON
400VALIDATION_ERRORids is missing, empty, over 50 items, or language is unsupported
Request
curl https://api.anidub.moe/v1/anime/lookup-mal \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"ids": [21, 11061]}'
Response200 OK
{
  "results": [
    { "anilistId": 21, "malId": 21, "anidubId": 10482, "titleEnglish": "One Piece",
      "dub": { "language": "en", "status": "dubbed", … }, … }
  ],
  "notFound": []
}
GET/v1/anime/search
200 OK

Search English, romaji and native titles, aliases and studios, closest match first. Takes every browse filter too.

PARAMETERS
qQUERY
At least 2 characters
limitQUERY
Default 20optional
genreQUERY
Repeatable; titles must match every genre, e.g. genre=Action&genre=Dramaoptional
formatQUERY
Repeatable. One of TV, TV_SHORT, MOVIE, OVA, ONA, SPECIALoptional
yearFromQUERY
Earliest premiere year. year=2024 sets both boundsoptional
yearToQUERY
Latest premiere yearoptional
seasonQUERY
Premiere season. One of WINTER, SPRING, SUMMER, FALLoptional
dubStatusQUERY
Repeatable. One of dubbed, in_production, announced, none, unknownoptional
dubbedQUERY
any: has dubbed episodes; full: every episode; partial: some. One of any, full, partialoptional
statusQUERY
Airing status, repeatable. One of RELEASING, FINISHED, NOT_YET_RELEASED, HIATUS, CANCELLEDoptional
adultQUERY
Adult titles as flagged by AniList. Default show. One of show, hide, onlyoptional
listQUERY
Needs an API key: filter by the key owner's list. One of on, off, watching, planning, completed, paused, droppedoptional
sortQUERY
Default relevance with q, popularity without. One of relevance, popularity, score, newest, recent_dub, titleoptional
languageQUERY
BCP-47 dub language, such as "en", "es-419" or "pt-BR". Default "en"optional
ERROR RESPONSES
400VALIDATION_ERRORq is missing or shorter than 2 characters
Request
curl "https://api.anidub.moe/v1/anime/search?q=one%20piece&limit=10"
Response200 OK
{
  "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",
      …
    }
  ]
}
GET/v1/anime/browse
200 OK

Paginated browse. Every filter combines with the others and with an optional text query.

PARAMETERS
qQUERY
Optional text searchoptional
genreQUERY
Repeatable; titles must match every genre, e.g. genre=Action&genre=Dramaoptional
formatQUERY
Repeatable. One of TV, TV_SHORT, MOVIE, OVA, ONA, SPECIALoptional
yearFromQUERY
Earliest premiere year. year=2024 sets both boundsoptional
yearToQUERY
Latest premiere yearoptional
seasonQUERY
Premiere season. One of WINTER, SPRING, SUMMER, FALLoptional
dubStatusQUERY
Repeatable. One of dubbed, in_production, announced, none, unknownoptional
dubbedQUERY
any: has dubbed episodes; full: every episode; partial: some. One of any, full, partialoptional
statusQUERY
Airing status, repeatable. One of RELEASING, FINISHED, NOT_YET_RELEASED, HIATUS, CANCELLEDoptional
adultQUERY
Adult titles as flagged by AniList. Default show. One of show, hide, onlyoptional
listQUERY
Needs an API key: filter by the key owner's list. One of on, off, watching, planning, completed, paused, droppedoptional
sortQUERY
Default relevance with q, popularity without. One of relevance, popularity, score, newest, recent_dub, titleoptional
pageQUERY
Default 1optional
limitQUERY
Default 24optional
languageQUERY
BCP-47 dub language, such as "en", "es-419" or "pt-BR". Default "en"optional
ERROR RESPONSES
400VALIDATION_ERRORA year is out of range, or a dubStatus value is unknown
Request
curl "https://api.anidub.moe/v1/anime/browse?genre=Action&dubStatus=dubbed&page=1"
Response200 OK
{
  "results": [
    { "anilistId": 16498, "titleEnglish": "Attack on Titan", "dubStatus": "dubbed",
      "dubbedEpisodes": 25, "episodes": 25, … }
  ],
  "page": 1,
  "hasMore": true,
  "total": 1840
}
GET/v1/anime/trending
200 OK

Most 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.

PARAMETERS
limitQUERY
Default 10optional
languageQUERY
BCP-47 dub language, such as "en", "es-419" or "pt-BR". Default "en"optional
Request
curl "https://api.anidub.moe/v1/anime/trending?limit=7"
Response200 OK
{
  "period": "7d",
  "results": [
    { "anilistId": 21, "anidubId": 10482, "titleEnglish": "One Piece",
      "dubStatus": "dubbed", "searchCount": 842, … }
  ]
}
GET/v1/health
200 OK

Service status, API version and server time.

Request
curl https://api.anidub.moe/v1/health
Response200 OK
{
  "status": "ok",
  "version": "0.1.0",
  "timestamp": "2026-10-07T12:00:00.000Z"
}

RESPONSE SCHEMA

DubStatusResponse
FIELDTYPEDESCRIPTION
FIELDDESCRIPTION
animeId(string)string
Internal database id
anilistId(number)number
AniList id
anidubId(number | null)number | null
anidub id (10000–9,099,999), as in anidub.moe/anime/:id
malId(number | null)number | null
MyAnimeList id
kitsuId(number | null)number | null
Kitsu id
titleEnglish(string | null)string | null
Official English title
titleRomaji(string | null)string | null
Romanized Japanese title
coverImage(string | null)string | null
Cover image URL (AniList CDN)
episodes(number | null)number | null
Total episodes, when AniList knows it
dub(DubInfo | null)DubInfo | null
The requested language. Status "unknown" when nobody has checked
dubs(DubInfo[])DubInfo[]
Every language we know anything about
DubInfo
FIELDTYPEDESCRIPTION
FIELDDESCRIPTION
language(string)string
BCP-47 language tag, such as "en", "es-419" or "pt-BR"
status(DubStatus)DubStatus
Dub status; see Status values
confidence(number)number
0–1, from agreement between independent sources
dubbedEpisodes(number | null)number | null
Dubbed episodes a source has counted. null means not counted, not zero
sources(string[])string[]
Sources backing this answer, strongest first
reason(string | null)string | null
One-line explanation suitable for display
lastVerifiedAt(string | null)string | null
When the winning evidence was observed
CatalogItem

One title in search and browse results.

FIELDTYPEDESCRIPTION
FIELDDESCRIPTION
anilistId(number)number
AniList id
anidubId(number | null)number | null
anidub id
malId(number | null)number | null
MyAnimeList id
titleEnglish(string | null)string | null
Official English title
titleRomaji(string | null)string | null
Romanized Japanese title
titleNative(string | null)string | null
Native-script title
coverImage(string | null)string | null
Cover image URL
format(string | null)string | null
TV, TV_SHORT, MOVIE, OVA, ONA or SPECIAL
status(string | null)string | null
Airing status: RELEASING, FINISHED, NOT_YET_RELEASED, HIATUS or CANCELLED
episodes(number | null)number | null
Total episodes, when known
seasonYear(number | null)number | null
Premiere year
season(string | null)string | null
Premiere season: WINTER, SPRING, SUMMER or FALL
genres(string[] | null)string[] | null
AniList genres
studio(string | null)string | null
Main animation studio
isAdult(boolean)boolean
AniList's adult-content flag
dubStatus(DubStatus)DubStatus
Dub status in the requested language; "unknown" when nobody has checked
dubConfidence(number)number
0–1
dubbedEpisodes(number | null)number | null
Dubbed episodes a source has counted. null means not counted, not zero
dubLastVerifiedAt(string | null)string | null
When the evidence behind dubStatus was observed

STATUS VALUES

dubbed
Full dub is available on streaming platforms
in_production
Studio confirmed; dubbing is actively in progress
announced
Dub is greenlit but recording has not started yet
none
A source checked and found no dub
unknown
No source has reported on this title yet. Not the same as none

ERROR CODES

STATUSCODEDESCRIPTION
400
INVALID_IDanilist_id is not a positive integer
400
BAD_REQUESTThe body is not valid JSON
400
VALIDATION_ERRORids is missing, empty, over 50 items, or language is unsupported
401
INVALID_KEYThe X-Api-Key header does not match a key
401
KEY_REVOKEDThe key was revoked
404
NOT_FOUNDWe do not hold this title
429
RATE_LIMIT_EXCEEDEDDaily limit reached; see Retry-After
500
INTERNAL_ERRORUnexpected server error

All error responses share the shape: { error: string, code: string }

RATE LIMITS

TIERLIMITAPI KEYNOTES
Anonymous
Limit100 / day
API KeyNone
NotePer IP address
Browser extension
Limit2,000 / day
API KeyNone
NotePer install, 20,000 per IP
Free key
Limit1,000 / day
API KeyRequired
NoteCreate one in Settings
Pro
Limit100,000 / day
API KeyRequired
Note$5 / month
Scale
LimitUnlimited
API KeyRequired
NoteContact us
anidub

Built by dub-watchers who got tired of refreshing reddit. Every status is derived from recorded evidence — see how it works on the methodology page.

Product
HomeBrowse allAll animeScheduleAPI docsSubmit dubChangelog
Extension
How it worksSource
About
AboutMethodologyStatus pageChangelogContactPrivacyTermsDiscord
© 2026 ANIDUB · ENGLISH DUB TRACKERPRIVACYTERMSv0.4.0 · ALL SYSTEMS GREEN