{"openapi":"3.1.0","info":{"title":"anidub API","version":"1","description":"Dub status for anime, by AniList, MyAnimeList or anidub id. Works without a key up to 100 requests a day per IP; send X-Api-Key for more."},"servers":[{"url":"https://api.anidub.moe"}],"security":[{},{"apiKey":[]}],"paths":{"/v1/anime/{anilist_id}":{"get":{"operationId":"getByAnilistId","summary":"Dub status for one title, by AniList id.","parameters":[{"name":"anilist_id","in":"path","required":true,"description":"AniList id","schema":{"type":"integer","minimum":1}},{"name":"language","in":"query","required":false,"description":"BCP-47 dub language, such as \"en\", \"es-419\" or \"pt-BR\". Default \"en\"","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DubStatusResponse"}}}},"400":{"description":"INVALID_ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/anime/by-anidub/{anidub_id}":{"get":{"operationId":"getByAnidubId","summary":"Dub status for one title, by the anidub id used in anidub.moe/anime/:id URLs.","parameters":[{"name":"anidub_id","in":"path","required":true,"description":"anidub id, 10000–9,099,999","schema":{"type":"integer","minimum":10000,"maximum":9099999}},{"name":"language","in":"query","required":false,"description":"BCP-47 dub language, such as \"en\", \"es-419\" or \"pt-BR\". Default \"en\"","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DubStatusResponse"}}}},"400":{"description":"INVALID_ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/anime/lookup":{"post":{"operationId":"lookup","summary":"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":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","minimum":1},"minItems":1,"maxItems":50,"description":"AniList ids, 1–50"},"language":{"type":"string","description":"BCP-47 dub language, such as \"en\", \"es-419\" or \"pt-BR\". Default \"en\""}},"required":["ids"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}}}},"400":{"description":"BAD_REQUEST; VALIDATION_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/anime/lookup-mal":{"post":{"operationId":"lookupMal","summary":"Up to 50 titles in one request, by MyAnimeList id.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","minimum":1},"minItems":1,"maxItems":50,"description":"MyAnimeList ids, 1–50"},"language":{"type":"string","description":"BCP-47 dub language, such as \"en\", \"es-419\" or \"pt-BR\". Default \"en\""}},"required":["ids"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupResponse"}}}},"400":{"description":"BAD_REQUEST; VALIDATION_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/anime/search":{"get":{"operationId":"search","summary":"Search English, romaji and native titles, aliases and studios, closest match first. Takes every browse filter too.","parameters":[{"name":"q","in":"query","required":true,"description":"At least 2 characters","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Default 20","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"genre","in":"query","required":false,"description":"Repeatable; titles must match every genre, e.g. genre=Action&genre=Drama","schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true},{"name":"format","in":"query","required":false,"description":"Repeatable","schema":{"type":"array","items":{"type":"string","enum":["TV","TV_SHORT","MOVIE","OVA","ONA","SPECIAL"]}},"style":"form","explode":true},{"name":"yearFrom","in":"query","required":false,"description":"Earliest premiere year. year=2024 sets both bounds","schema":{"type":"integer","minimum":1960,"maximum":2100}},{"name":"yearTo","in":"query","required":false,"description":"Latest premiere year","schema":{"type":"integer","minimum":1960,"maximum":2100}},{"name":"season","in":"query","required":false,"description":"Premiere season","schema":{"type":"string","enum":["WINTER","SPRING","SUMMER","FALL"]}},{"name":"dubStatus","in":"query","required":false,"description":"Repeatable","schema":{"type":"array","items":{"type":"string","enum":["dubbed","in_production","announced","none","unknown"]}},"style":"form","explode":true},{"name":"dubbed","in":"query","required":false,"description":"any: has dubbed episodes; full: every episode; partial: some","schema":{"type":"string","enum":["any","full","partial"]}},{"name":"status","in":"query","required":false,"description":"Airing status, repeatable","schema":{"type":"array","items":{"type":"string","enum":["RELEASING","FINISHED","NOT_YET_RELEASED","HIATUS","CANCELLED"]}},"style":"form","explode":true},{"name":"adult","in":"query","required":false,"description":"Adult titles as flagged by AniList. Default show","schema":{"type":"string","enum":["show","hide","only"]}},{"name":"list","in":"query","required":false,"description":"Needs an API key: filter by the key owner's list","schema":{"type":"string","enum":["on","off","watching","planning","completed","paused","dropped"]}},{"name":"sort","in":"query","required":false,"description":"Default relevance with q, popularity without","schema":{"type":"string","enum":["relevance","popularity","score","newest","recent_dub","title"]}},{"name":"language","in":"query","required":false,"description":"BCP-47 dub language, such as \"en\", \"es-419\" or \"pt-BR\". Default \"en\"","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"400":{"description":"VALIDATION_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/anime/browse":{"get":{"operationId":"browse","summary":"Paginated browse. Every filter combines with the others and with an optional text query.","parameters":[{"name":"q","in":"query","required":false,"description":"Optional text search","schema":{"type":"string"}},{"name":"genre","in":"query","required":false,"description":"Repeatable; titles must match every genre, e.g. genre=Action&genre=Drama","schema":{"type":"array","items":{"type":"string"}},"style":"form","explode":true},{"name":"format","in":"query","required":false,"description":"Repeatable","schema":{"type":"array","items":{"type":"string","enum":["TV","TV_SHORT","MOVIE","OVA","ONA","SPECIAL"]}},"style":"form","explode":true},{"name":"yearFrom","in":"query","required":false,"description":"Earliest premiere year. year=2024 sets both bounds","schema":{"type":"integer","minimum":1960,"maximum":2100}},{"name":"yearTo","in":"query","required":false,"description":"Latest premiere year","schema":{"type":"integer","minimum":1960,"maximum":2100}},{"name":"season","in":"query","required":false,"description":"Premiere season","schema":{"type":"string","enum":["WINTER","SPRING","SUMMER","FALL"]}},{"name":"dubStatus","in":"query","required":false,"description":"Repeatable","schema":{"type":"array","items":{"type":"string","enum":["dubbed","in_production","announced","none","unknown"]}},"style":"form","explode":true},{"name":"dubbed","in":"query","required":false,"description":"any: has dubbed episodes; full: every episode; partial: some","schema":{"type":"string","enum":["any","full","partial"]}},{"name":"status","in":"query","required":false,"description":"Airing status, repeatable","schema":{"type":"array","items":{"type":"string","enum":["RELEASING","FINISHED","NOT_YET_RELEASED","HIATUS","CANCELLED"]}},"style":"form","explode":true},{"name":"adult","in":"query","required":false,"description":"Adult titles as flagged by AniList. Default show","schema":{"type":"string","enum":["show","hide","only"]}},{"name":"list","in":"query","required":false,"description":"Needs an API key: filter by the key owner's list","schema":{"type":"string","enum":["on","off","watching","planning","completed","paused","dropped"]}},{"name":"sort","in":"query","required":false,"description":"Default relevance with q, popularity without","schema":{"type":"string","enum":["relevance","popularity","score","newest","recent_dub","title"]}},{"name":"page","in":"query","required":false,"description":"Default 1","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","required":false,"description":"Default 24","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"language","in":"query","required":false,"description":"BCP-47 dub language, such as \"en\", \"es-419\" or \"pt-BR\". Default \"en\"","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowseResponse"}}}},"400":{"description":"VALIDATION_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/anime/trending":{"get":{"operationId":"trending","summary":"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":[{"name":"limit","in":"query","required":false,"description":"Default 10","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"language","in":"query","required":false,"description":"BCP-47 dub language, such as \"en\", \"es-419\" or \"pt-BR\". Default \"en\"","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendingResponse"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/health":{"get":{"operationId":"health","summary":"Service status, API version and server time.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"401":{"description":"INVALID_KEY; KEY_REVOKED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"RATE_LIMIT_EXCEEDED","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"INTERNAL_ERROR","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-Api-Key"}},"schemas":{"DubStatusResponse":{"type":"object","properties":{"animeId":{"type":"string","format":"uuid","description":"Internal database id"},"anilistId":{"type":"integer","description":"AniList id"},"anidubId":{"type":["integer","null"],"description":"anidub id (10000–9,099,999), as in anidub.moe/anime/:id"},"malId":{"type":["integer","null"],"description":"MyAnimeList id"},"kitsuId":{"type":["integer","null"],"description":"Kitsu id"},"titleEnglish":{"type":["string","null"],"description":"Official English title"},"titleRomaji":{"type":["string","null"],"description":"Romanized Japanese title"},"coverImage":{"type":["string","null"],"format":"uri","description":"Cover image URL (AniList CDN)"},"episodes":{"type":["integer","null"],"description":"Total episodes, when AniList knows it"},"dub":{"anyOf":[{"$ref":"#/components/schemas/DubInfo"},{"type":"null"}],"description":"The requested language. Status \"unknown\" when nobody has checked"},"dubs":{"type":"array","items":{"$ref":"#/components/schemas/DubInfo"},"description":"Every language we know anything about"}},"required":["animeId","anilistId","anidubId","malId","kitsuId","titleEnglish","titleRomaji","coverImage","episodes","dub","dubs"]},"DubInfo":{"type":"object","properties":{"language":{"type":"string","description":"BCP-47 language tag, such as \"en\", \"es-419\" or \"pt-BR\""},"status":{"type":"string","enum":["dubbed","in_production","announced","none","unknown"],"description":"Dub status; see Status values"},"confidence":{"type":"number","description":"0–1, from agreement between independent sources"},"dubbedEpisodes":{"type":["integer","null"],"description":"Dubbed episodes a source has counted. null means not counted, not zero"},"sources":{"type":"array","items":{"type":"string"},"description":"Sources backing this answer, strongest first"},"reason":{"type":["string","null"],"description":"One-line explanation suitable for display"},"lastVerifiedAt":{"type":["string","null"],"format":"date-time","description":"When the winning evidence was observed"}},"required":["language","status","confidence","dubbedEpisodes","sources","reason","lastVerifiedAt"]},"CatalogItem":{"type":"object","properties":{"anilistId":{"type":"integer","description":"AniList id"},"anidubId":{"type":["integer","null"],"description":"anidub id"},"malId":{"type":["integer","null"],"description":"MyAnimeList id"},"titleEnglish":{"type":["string","null"],"description":"Official English title"},"titleRomaji":{"type":["string","null"],"description":"Romanized Japanese title"},"titleNative":{"type":["string","null"],"description":"Native-script title"},"coverImage":{"type":["string","null"],"format":"uri","description":"Cover image URL"},"format":{"type":["string","null"],"description":"TV, TV_SHORT, MOVIE, OVA, ONA or SPECIAL"},"status":{"type":["string","null"],"description":"Airing status: RELEASING, FINISHED, NOT_YET_RELEASED, HIATUS or CANCELLED"},"episodes":{"type":["integer","null"],"description":"Total episodes, when known"},"seasonYear":{"type":["integer","null"],"description":"Premiere year"},"season":{"type":["string","null"],"description":"Premiere season: WINTER, SPRING, SUMMER or FALL"},"genres":{"type":["array","null"],"items":{"type":"string"},"description":"AniList genres"},"studio":{"type":["string","null"],"description":"Main animation studio"},"isAdult":{"type":"boolean","description":"AniList's adult-content flag"},"dubStatus":{"type":"string","enum":["dubbed","in_production","announced","none","unknown"],"description":"Dub status in the requested language; \"unknown\" when nobody has checked"},"dubConfidence":{"type":"number","description":"0–1"},"dubbedEpisodes":{"type":["integer","null"],"description":"Dubbed episodes a source has counted. null means not counted, not zero"},"dubLastVerifiedAt":{"type":["string","null"],"format":"date-time","description":"When the evidence behind dubStatus was observed"}},"required":["anilistId","anidubId","malId","titleEnglish","titleRomaji","titleNative","coverImage","format","status","episodes","seasonYear","season","genres","studio","isAdult","dubStatus","dubConfidence","dubbedEpisodes","dubLastVerifiedAt"]},"LookupResponse":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/DubStatusResponse"},"description":"Titles we hold"},"notFound":{"type":"array","items":{"type":"integer"},"description":"Requested ids we do not hold yet"}},"required":["results","notFound"]},"SearchResponse":{"type":"object","properties":{"query":{"type":"string","description":"The query as received"},"results":{"type":"array","items":{"$ref":"#/components/schemas/CatalogItem"},"description":"Closest match first"}},"required":["query","results"]},"BrowseResponse":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/CatalogItem"},"description":"One page of titles"},"page":{"type":"integer","description":"This page, from 1"},"hasMore":{"type":"boolean","description":"Whether another page follows"},"total":{"type":"integer","description":"Titles matching every filter"}},"required":["results","page","hasMore","total"]},"TrendingResult":{"type":"object","properties":{"anilistId":{"type":"integer","description":"AniList id"},"anidubId":{"type":["integer","null"],"description":"anidub id"},"titleEnglish":{"type":["string","null"],"description":"Official English title"},"titleRomaji":{"type":["string","null"],"description":"Romanized Japanese title"},"coverImage":{"type":["string","null"],"format":"uri","description":"Cover image URL"},"dubStatus":{"type":"string","enum":["dubbed","in_production","announced","none","unknown"],"description":"Dub status in the requested language"},"searchCount":{"type":"integer","description":"Visitors who looked this title up in the period"}},"required":["anilistId","anidubId","titleEnglish","titleRomaji","coverImage","dubStatus","searchCount"]},"TrendingResponse":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/TrendingResult"},"description":"Most looked-up first"},"period":{"type":"string","enum":["7d"],"description":"Window counted"}},"required":["results","period"]},"HealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded"],"description":"Overall state"},"version":{"type":"string","description":"API version"},"timestamp":{"type":"string","format":"date-time","description":"Server time"},"checks":{"type":"object","description":"Per-dependency state, e.g. { \"database\": \"ok\" }"}},"required":["status","version","timestamp"]},"ApiError":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable message"},"code":{"type":"string","description":"Machine-readable code; see Error codes"}},"required":["error","code"]}}}}