{"openapi":"3.0.3","info":{"title":"Tenrai API","description":"Tenrai is a free **Unofficial** public REST API for the full MyAnimeList public catalogue. Anime, manga, characters, people, producers, seasons, and more.\n\nTenrai was built because MyAnimeList lacks a complete API of its own. Implemented endpoints follow the **Jikan v4 schema**, so an existing application can use Tenrai instead of or alongside Jikan by changing only the base URL.\n\nPlease note that the API is in beta. Expect some rough edges and occasional downtime while we polish things. Thank you for being patient with us.\n\n<div class=\"tenrai-patreon-notice\" role=\"status\">\n  Patreon not yet available</div>\n\n---\n\n## Jikan v4 Notes\n\nTenrai covers the public catalogue. Some Jikan endpoints are not available yet; we may add them in future.\n\n<div class=\"tenrai-specs\">\n<div><span>Available</span><span>Anime, manga, characters, people, producers, magazines, genres, seasons, schedules, top lists, reviews, recommendations and random</span></div>\n<div><span>Limited</span><span>Anime <code>/forum</code> returns episode threads only and manga <code>/forum</code> chapter threads only; the filters <code>all</code> and <code>other</code> are not supported</span></div>\n<div><span>Not available yet</span><span><code>/users</code>, <code>/clubs</code>, <code>/watch</code>, <code>/random/users</code>, and <code>/userupdates</code> for anime and manga</span></div>\n</div>\n\n---\n\n## Auth & Rate Limits\n\n> Public requests work without credentials. Add `X-Server-Key` when you need higher throughput. Limits are enforced by tier.\n\n| Access | Header | RPM | RPS | RPD |\n|---|---|---:|---:|---:|\n| **Public** | *(none)* | 120 | 4 | Unlimited |\n| **Server Key** | `X-Server-Key` | 300 | 5 | Unlimited |\n\nOnce a limit is exceeded, the API returns `429 Too Many Requests`. When you receive `429 Too Many Requests`, wait for the `Retry-After` value before retrying. Requests resume automatically after the window resets.\n\nPublic limits are counted per IP address, Server Key limits per key.\n\n### Server Key request example\n\nPass your Server Key in the `X-Server-Key` header:\n\n```bash\ncurl \"https://api.tenrai.org/v1/anime/38680/full\" \\\n  -H \"X-Server-Key: YOUR_SERVER_KEY\"\n```\n\n<div class=\"tenrai-note\">\n\nKeep your Server Key in server-side code and never expose it in browser or mobile client code. Server Keys are not Bearer tokens, so `Authorization: Bearer YOUR_SERVER_KEY` is not supported.\n\n</div>\n\n---\n\n## Server Keys\n\nServer Keys are private keys reserved for **[Patreon supporters](https://www.patreon.com/TenraiAPI)**. They offer higher rate limits for large-scale data work.\n\n- Despite the name, they are standard API keys that work in any project: servers, local scripts, personal databases.\n- Limits are enforced per key, not per IP, so a Server Key cannot raise the limits for users of a client-side or mobile app.\n- Server Key requests use their own cache, which keeps responses for 10 minutes, so recent data arrives sooner.\n- The Server Key quota stacks on top of the public quota. Requests sent without the key still count toward the public limits, so you can use both at once for more requests.\n\n<div class=\"tenrai-note\">\n\nYou can obtain a free temporary Server Key through our [Discord](https://discord.gg/MQ3X3sjdgK) server.\n\n</div>\n\n---\n\n## SFW Filtering\n\nSFW filtering is content-based. SFW-capable endpoints support two modes; strict mode also filters out `Ecchi`.\n\n| Mode | Parameter | Filtered Out |\n|---|---|---|\n| **Normal SFW** | `?sfw` | `R+ - Mild Nudity`, `Rx - Hentai`, `Hentai`, `Erotica` |\n| **Strict SFW** | `?sfw-strict` | `R+ - Mild Nudity`, `Rx - Hentai`, `Hentai`, `Erotica`, `Ecchi` |\n\nAdd the name to the query string (`?sfw`) or set it to `true` to switch a mode on, and set it to `false` to switch it off. `1`/`0`, `yes`/`no` and `on`/`off` work too; any other value is refused with `400`.\n\n---\n\n## Caching & Data\n\nWe pre-gather data algorithmically on a dynamic schedule. This difference in architecture is what allows us to offer higher rate limits, better stability and features that are unavailable in Jikan.\n\nPopular, currently airing, newly released entries etc... are updated daily and much more frequently, while older and less active titles are updated less frequently. For example: Currently airing One Piece is updated on site much more frequently than a title like Clannad that finished long ago. One Piece will therefore have a higher priority in our systems than Clannad.\n\nScores, member statistics, rankings, metrics, things that are highly dynamic etc... are always refreshed daily regardless of entry age or status.\n\nNewly added MAL entries are made available within a few hours.\n\nEvery response carries an `ETag` header. Send its value in `If-None-Match` on your next request, and you get an empty `304 Not Modified` if nothing has changed. A `304` still counts toward your rate limit.\n\nPublic API responses are cached for a few hours up to a maximum of 12 hours depending on endpoint. Server Key users largely bypass this. You will notice that on some areas our data updates are much faster than Jikan, while on other areas we are slower.\n\nIf you notice any issues with persistent stale data, please report it so we can refine the system. Our goal is to find the perfect balance between the amount of outbound requests and data freshness.\n\n---\n\n## Version 2\n\nVersion 1 (v1) is an interim version: a bridge between Tenrai and Jikan, so that an alternative to Jikan exists. It will not be perfectly polished, and we aim to move to v2 as quickly as possible.\n\nVersion 2 will be the API we actually want to build, a big upgrade over anything currently available.\n\n<div class=\"tenrai-note\">\n\nWhen v2 is available, there will be several months of notice before v1 is discontinued. For updates, join our [Discord](https://discord.gg/MQ3X3sjdgK) server.\n\n</div>\n\n---\n\n## JSON Error Response\n\n> Non-2xx error responses use a consistent JSON envelope with a machine-readable `type`, human-readable `message`, and request `path`.\n\n```json\n{\n  \"status\": 404,\n  \"type\": \"ResourceNotFoundException\",\n  \"message\": \"Anime with ID 0 not found.\",\n  \"error\": \"The requested resource does not exist in our database or the ID is invalid.\",\n  \"path\": \"/v1/anime/0\"\n}\n```\n\n| Property | Remarks |\n|---|---|\n| `status` | HTTP status code returned for the request |\n| `type` | Machine-readable error category |\n| `message` | Human-readable explanation of what happened |\n| `error` | Additional context or recovery guidance |\n| `path` | Request path that produced the error |\n\nA record that does not exist answers with the type `ResourceNotFoundException`. An address that is not part of the API answers with `ROUTE_NOT_FOUND` or `NotFoundException`.\n\n---\n\n## User Data\n\nThis API only deals with public catalogue data. It has no endpoints for user-specific data such as profiles, animelists or mangalists.\n\nIf you need user data, please use the [Official MyAnimeList API](https://myanimelist.net/apiconfig/references/api/v2).\n\n---\n\n## Usage Policy\n\nAll use cases listed below should be perfectly fine:\n\n<div class=\"tenrai-columns\">\n\n- Educational and university projects\n- Data science and research\n- Mobile and desktop apps\n- Unofficial MAL clients\n- Browser extensions and scripts\n- Bots, including Discord bots\n- Personal projects\n- Media server and metadata plugins\n\n</div>\n\nAnd much more. Please note that we don't own the data provided by the API, so we don't really have a say in what you can and can't do.\n\n---\n\n## Contact\n\n<div class=\"tenrai-specs tenrai-contact\">\n<div><a href=\"https://discord.gg/MQ3X3sjdgK\">Discord</a><span>The quickest way to reach us</span></div>\n<div><a href=\"mailto:contact@tenrai.org\">contact@tenrai.org</a><span>Personal matters; a reply is not guaranteed</span></div>\n<div><a href=\"mailto:security@tenrai.org\">security@tenrai.org</a><span>Security issues</span></div>\n</div>\n\n---\n\n## Disclaimer\n\nThis API is provided \"as is\" without any warranties, express or implied. We do not guarantee the accuracy, completeness, or availability of the data. Use of this service is at your own risk.\n\n**By using this API, you acknowledge that you are aware of, have read, and expressly agree to be bound by our [Terms of Service](https://tenrai.org/terms).**\n\n**Tenrai and this API are not affiliated with, endorsed by, or sponsored by MyAnimeList.net or its parent companies in any way.** All MyAnimeList data is property of its respective owners.","version":"1.0.33","termsOfService":"https://tenrai.org/terms"},"components":{"securitySchemes":{"serverKey":{"type":"apiKey","name":"X-Server-Key","in":"header","description":"Private backend-only key for 300 RPM / 5 RPS throughput."}},"schemas":{}},"paths":{"/anime":{"get":{"summary":"Anime Search","tags":["Anime"],"description":"Search and browse the full anime catalogue with advanced filters and sorting.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Title search query (fuzzy matched against English, Japanese, and default titles)"},{"schema":{"type":"string","minLength":1,"maxLength":1},"in":"query","name":"letter","required":false,"description":"Only anime whose title starts with this letter. One letter, in any case. Cannot be combined with `q`."},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `tv`: TV series\n- `movie`: Movie\n- `ova`: OVA (original video animation)\n- `special`: Special\n- `ona`: ONA (original net animation, e.g. web releases)\n- `music`: Music video\n- `cm`: CM (commercial)\n- `pv`: PV (promotional video)\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type_exclude","required":false,"description":"Exclude entries with any selected type. Multiple values exclude any selected type.\n\n- `tv`: TV series\n- `movie`: Movie\n- `ova`: OVA (original video animation)\n- `special`: Special\n- `ona`: ONA (original net animation, e.g. web releases)\n- `music`: Music video\n- `cm`: CM (commercial)\n- `pv`: PV (promotional video)\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["airing","complete","upcoming"],"x-enumDescriptions":{}}},"in":"query","name":"status","required":false,"description":"Only entries with any selected status. Multiple values match any selected status.\n\n- `airing`: Currently Airing\n- `complete`: Finished Airing\n- `upcoming`: Not yet aired","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["airing","complete","upcoming"],"x-enumDescriptions":{}}},"in":"query","name":"status_exclude","required":false,"description":"Exclude entries with any selected status. Multiple values exclude any selected status.\n\n- `airing`: Currently Airing\n- `complete`: Finished Airing\n- `upcoming`: Not yet aired","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating_exclude","required":false,"description":"Exclude entries with any selected rating. Multiple values exclude any selected rating. Entries without a rating are kept.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["original","manga","4_koma_manga","web_manga","digital_manga","novel","web_novel","light_novel","visual_novel","game","card_game","book","picture_book","radio","music","mixed_media","other","unknown"]}},"in":"query","name":"source","required":false,"description":"Only entries with any selected source material. Multiple values match any selected source.\n\n- `original`: Original\n- `manga`: Manga\n- `4_koma_manga`: 4-koma manga\n- `web_manga`: Web manga\n- `digital_manga`: Digital manga\n- `novel`: Novel\n- `web_novel`: Web novel\n- `light_novel`: Light novel\n- `visual_novel`: Visual novel\n- `game`: Game\n- `card_game`: Card game\n- `book`: Book\n- `picture_book`: Picture book\n- `radio`: Radio\n- `music`: Music\n- `mixed_media`: Mixed media\n- `other`: Other\n- `unknown`: Unknown / missing classification","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["original","manga","4_koma_manga","web_manga","digital_manga","novel","web_novel","light_novel","visual_novel","game","card_game","book","picture_book","radio","music","mixed_media","other","unknown"]}},"in":"query","name":"source_exclude","required":false,"description":"Exclude entries with any selected source material. Multiple values exclude any selected source.\n\n- `original`: Original\n- `manga`: Manga\n- `4_koma_manga`: 4-koma manga\n- `web_manga`: Web manga\n- `digital_manga`: Digital manga\n- `novel`: Novel\n- `web_novel`: Web novel\n- `light_novel`: Light novel\n- `visual_novel`: Visual novel\n- `game`: Game\n- `card_game`: Card game\n- `book`: Book\n- `picture_book`: Picture book\n- `radio`: Radio\n- `music`: Music\n- `mixed_media`: Mixed media\n- `other`: Other\n- `unknown`: Unknown / missing classification","style":"form","explode":false},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"has_trailer","required":false,"description":"Filter by whether a main-trailer YouTube ID or URL is available. Playback availability is not checked.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","maxItems":25,"items":{"type":"string"}},"in":"query","name":"streaming_service","required":false,"description":"Only anime with a streaming link from any of these providers, e.g. Crunchyroll, Netflix or HIDIVE. Names ignore capitalization, spacing and common spelling variants. Links are not checked for current availability or region.","style":"form","explode":false},{"schema":{"type":"string","enum":["false","true","only"],"default":"true","x-enumDescriptions":{}},"in":"query","name":"has_relations","required":false,"description":"Filter recorded MyAnimeList relations: true includes entries with or without relations, false returns entries with no recorded relations, and only returns entries with at least one recorded relation. Includes anime and manga relations.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated IDs. Entries must have all of them.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated IDs. Entries with any of them are left out.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"producers","required":false,"description":"Comma-separated IDs. Entries must have at least one of them.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"producers_exclude","required":false,"description":"Exclude entries with any of these producer, studio or licensor MAL IDs. Uses the same IDs as producers.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"staff","required":false,"description":"Filter by credited staff MAL person IDs. Multiple IDs match any selected person.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"characters","required":false,"description":"Filter by recorded MAL character IDs. Multiple IDs match any selected character.","style":"form","explode":false},{"schema":{"type":"string","enum":["main","supporting"],"x-enumDescriptions":{}},"in":"query","name":"character_role","required":false,"description":"Only count the characters in `characters` when MAL lists them in this role. Requires `characters`.\n\n- `main`: Main character\n- `supporting`: Supporting character","examples":{"default":{"value":"main","x-disabled":true}}},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"voice_actors","required":false,"description":"Filter by recorded voice-actor MAL person IDs. Multiple IDs match any selected person. With `characters`, a selected person must voice a selected character in that anime, in the `character_role` and the `voice_language` when they are given too.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["english","french","german","hebrew","hungarian","italian","japanese","korean","mandarin","portuguese_br","spanish"]}},"in":"query","name":"voice_language","required":false,"description":"Only anime with a voice cast credited in any of these languages, e.g. an English dub. When used with `voice_actors`, a selected voice actor must be credited in that language. A credited dub doesn't mean it can be streamed.\n\n- `english`: English\n- `french`: French\n- `german`: German\n- `hebrew`: Hebrew\n- `hungarian`: Hungarian\n- `italian`: Italian\n- `japanese`: Japanese\n- `korean`: Korean\n- `mandarin`: Mandarin\n- `portuguese_br`: Portuguese (BR)\n- `spanish`: Spanish","style":"form","explode":false},{"schema":{"type":"integer","format":"int32","minimum":1},"in":"query","name":"min_id","required":false,"description":"Minimum MAL ID, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":1},"in":"query","name":"max_id","required":false,"description":"Maximum MAL ID, inclusive."},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"ids","required":false,"description":"Only search within the entries whose MAL IDs you choose, such as the ones on a user's list. All other filters and sorting still apply. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"score","required":false,"description":"Only entries with exactly this score, e.g. `8.2` for 8.20. Cannot be combined with `min_score` or `max_score`; use those for a range."},{"schema":{"type":"number","minimum":0,"maximum":10},"in":"query","name":"min_score","required":false,"description":"Only entries with this score or higher."},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"max_score","required":false,"description":"Only entries with this score or lower."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_scored_by","required":false,"description":"Minimum number of scoring users, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":0},"in":"query","name":"max_scored_by","required":false,"description":"Maximum number of scoring users, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":0},"in":"query","name":"min_reviews","required":false,"description":"Minimum number of available reviews, inclusive, including spoiler and preliminary reviews. This is not a complete MyAnimeList-wide total. 0 applies no limit."},{"schema":{"type":"integer","format":"int32","minimum":0},"in":"query","name":"max_reviews","required":false,"description":"Maximum number of available reviews, inclusive, including spoiler and preliminary reviews. This is not a complete MyAnimeList-wide total. 0 returns entries with no stored reviews."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_episodes","required":false,"description":"Minimum known positive episode count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_episodes","required":false,"description":"Maximum known positive episode count, inclusive."},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","minimum":1,"maximum":9999}},"in":"query","name":"year","required":false,"description":"Calendar year of the aired or published start date. Cannot be combined with min_year or max_year. For anime, this can differ from MAL's season year. Multiple years match any selected year.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["winter","spring","summer","fall"]}},"in":"query","name":"season","required":false,"description":"Filter by MAL's debut-season classification. Multiple seasons match any selected season.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","minimum":1,"maximum":9999}},"in":"query","name":"season_year","required":false,"description":"Filter by MAL's debut-season year. This can differ from the calendar start year. Multiple years match any selected year; with `season`, any selected season of any selected year matches.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday","other","today","tomorrow"]}},"in":"query","name":"broadcast_day","required":false,"description":"Filter by the day of the week the anime airs in Japan (JST). Multiple days match any selected day. `other` matches anime that MAL lists without a regular day. Anime without a recorded broadcast day never match. `today` and `tomorrow` follow the date in Japan, so they move on at midnight Japan time (15:00 UTC).","style":"form","explode":false},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"min_year","required":false,"description":"Minimum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"max_year","required":false,"description":"Maximum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"string","format":"date"},"in":"query","name":"start_date","required":false,"description":"Only anime that started airing on or after this date. Format: YYYY-MM-DD. A year (2020) or a year and month (2020-05) is also accepted."},{"schema":{"type":"string","format":"date"},"in":"query","name":"end_date","required":false,"description":"Only anime that finished airing on or before this date. Format: YYYY-MM-DD. A year (2020) or a year and month (2020-05) is also accepted and covers up to its last day. Anime with no end date, such as films shown on a single day, are left out, as on Jikan."},{"schema":{"type":"string","format":"date"},"in":"query","name":"added_after","required":false,"description":"Only anime that MAL added on or after this date (UTC). Format: YYYY-MM-DD. A year (2026) or a year and month (2026-10) is also accepted and means its first day. Only works with approved anime: unapproved anime are never matched, even with `unapproved`."},{"schema":{"type":"string","format":"date"},"in":"query","name":"added_before","required":false,"description":"Only anime that MAL added before this date (UTC), not on it. Format: YYYY-MM-DD. A year (2026) or a year and month (2026-11) is also accepted and means its first day, so `added_after=2026-10&added_before=2026-11` is October. Only works with approved anime: unapproved anime are never matched, even with `unapproved`."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["false","true","only",""],"default":"false"},"in":"query","name":"unapproved","required":false,"description":"When true, also includes unapproved entries.","examples":{"default":{"value":"false","x-disabled":true}}},{"schema":{"type":"string","enum":["mal_id","title","title_english","title_japanese","start_date","end_date","episodes","score","scored_by","rank","popularity","members","favorites","added"]},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.\n\n- `mal_id`: MAL ID\n- `title`: Title\n- `title_english`: English title\n- `title_japanese`: Japanese title\n- `start_date`: Start date\n- `end_date`: End date\n- `episodes`: Number of episodes\n- `score`: Score\n- `scored_by`: Number of users who scored it\n- `rank`: Rank\n- `popularity`: Popularity rank\n- `members`: Members\n- `favorites`: Favorites\n- `added`: Date MAL added it, newest first with `sort=desc`; approved anime only, even with `unapproved`","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending. Only applies together with `order_by`.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"string","enum":["first","last","exclude"],"x-enumDescriptions":{}},"in":"query","name":"nulls","required":false,"description":"Applies to the field you sort by with `order_by`. `first` puts entries without a value first, `last` puts them last, and `exclude` leaves them out of results and totals. Example: `order_by=end_date&nulls=exclude` leaves out entries without an end date. Requires `order_by`. When omitted, entries without a value come first with sort=asc and last with sort=desc. With `order_by=rank` or `order_by=popularity`, they come last either way, and a rank or popularity of 0 counts as no value.","examples":{"default":{"value":"first","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning matching anime series","content":{"application/json":{"schema":{"description":"Successful response returning matching anime series","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":1231,"has_next_page":true,"current_page":1,"items":{"count":25,"total":30770,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube-nocookie.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"},{"type":"English","title":"Cowboy Bebop"}],"title":"Cowboy Bebop","title_english":"Cowboy Bebop","title_japanese":"カウボーイビバップ","title_synonyms":[],"type":"TV","source":"Original","episodes":26,"status":"Finished Airing","airing":false,"aired":{"from":"1998-04-03T00:00:00+00:00","to":"1999-04-24T00:00:00+00:00","prop":{"from":{"day":3,"month":4,"year":1998},"to":{"day":24,"month":4,"year":1999}},"string":"Apr 3, 1998 to Apr 24, 1999"},"duration":"24 min per ep","rating":"R - 17+ (violence & profanity)","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"synopsis":"Crime is timeless. By the year 2071, humanity has expanded across the galaxy, filling the surface of other planets with settlements like those on Earth. These new societies are plagued by murder, drug use, and theft, and intergalactic outlaws are hunted by a growing number of tough bounty hunters.\n\nSpike Spiegel and Jet Black pursue criminals throughout space to make a humble living. Beneath his goofy and aloof demeanor, Spike is haunted by the weight of his violent past. Meanwhile, Jet manages his own troubled memories while taking care of Spike and the Bebop, their ship. The duo is joined by the beautiful con artist Faye Valentine, odd child Edward Wong Hau Pepelu Tivrusky IV, and Ein, a bioengineered Welsh corgi.\n\nWhile developing bonds and working to catch a colorful cast of criminals, the Bebop crew's lives are disrupted by a menace from Spike's past. As a rival's maniacal plot continues to unravel, Spike must choose between life with his newfound family or revenge for his old wounds.\n\n[Written by MAL Rewrite]","background":"When Cowboy Bebop first aired in spring of 1998 on TV Tokyo, only episodes 2-3, 7-15, and 18 were broadcast, it was concluded with a recap special known as Yose Atsume Blues. This was due to anime censorship having increased following the big controversies over Evangelion, as a result most of the series was pulled from the air due to violent content. Satellite channel WOWOW picked up the series in the fall of that year and aired it in its entirety uncensored. Cowboy Bebop was not a ratings hit in Japan, but sold over 19,000 DVD units in the initial release run, and 81,000 overall. Protagonist Spike Spiegel won Best Male Character, and Megumi Hayashibara won Best Voice Actor for her role as Faye Valentine in the 1999 and 2000 Anime Grand Prix, respectively.\n\n\n\nCowboy Bebop's biggest influence has been in the United States, where it premiered on Adult Swim in 2001 with many reruns since. The show's heavy Western influence struck a chord with American viewers, where it became a \"gateway drug\" to anime aimed at adult audiences.","season":"spring","year":1998,"broadcast":{"day":"Saturdays","time":"01:00","timezone":"Asia/Tokyo","string":"Saturdays at 01:00 (JST)"},"producers":[{"mal_id":23,"type":"anime","name":"Bandai Visual","url":"https://myanimelist.net/anime/producer/23/Bandai_Visual"},{"mal_id":123,"type":"anime","name":"Victor Entertainment","url":"https://myanimelist.net/anime/producer/123/Victor_Entertainment"},{"mal_id":1506,"type":"anime","name":"Audio Planning U","url":"https://myanimelist.net/anime/producer/1506/Audio_Planning_U"}],"licensors":[{"mal_id":102,"type":"anime","name":"Funimation","url":"https://myanimelist.net/anime/producer/102/Funimation"}],"studios":[{"mal_id":14,"type":"anime","name":"Sunrise","url":"https://myanimelist.net/anime/producer/14/Sunrise"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]}]},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":1231,"has_next_page":true,"current_page":1,"items":{"count":25,"total":30770,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube-nocookie.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"},{"type":"English","title":"Cowboy Bebop"}],"title":"Cowboy Bebop","title_english":"Cowboy Bebop","title_japanese":"カウボーイビバップ","title_synonyms":[],"type":"TV","source":"Original","episodes":26,"status":"Finished Airing","airing":false,"aired":{"from":"1998-04-03T00:00:00+00:00","to":"1999-04-24T00:00:00+00:00","prop":{"from":{"day":3,"month":4,"year":1998},"to":{"day":24,"month":4,"year":1999}},"string":"Apr 3, 1998 to Apr 24, 1999"},"duration":"24 min per ep","rating":"R - 17+ (violence & profanity)","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"synopsis":"Crime is timeless. By the year 2071, humanity has expanded across the galaxy, filling the surface of other planets with settlements like those on Earth. These new societies are plagued by murder, drug use, and theft, and intergalactic outlaws are hunted by a growing number of tough bounty hunters.\n\nSpike Spiegel and Jet Black pursue criminals throughout space to make a humble living. Beneath his goofy and aloof demeanor, Spike is haunted by the weight of his violent past. Meanwhile, Jet manages his own troubled memories while taking care of Spike and the Bebop, their ship. The duo is joined by the beautiful con artist Faye Valentine, odd child Edward Wong Hau Pepelu Tivrusky IV, and Ein, a bioengineered Welsh corgi.\n\nWhile developing bonds and working to catch a colorful cast of criminals, the Bebop crew's lives are disrupted by a menace from Spike's past. As a rival's maniacal plot continues to unravel, Spike must choose between life with his newfound family or revenge for his old wounds.\n\n[Written by MAL Rewrite]","background":"When Cowboy Bebop first aired in spring of 1998 on TV Tokyo, only episodes 2-3, 7-15, and 18 were broadcast, it was concluded with a recap special known as Yose Atsume Blues. This was due to anime censorship having increased following the big controversies over Evangelion, as a result most of the series was pulled from the air due to violent content. Satellite channel WOWOW picked up the series in the fall of that year and aired it in its entirety uncensored. Cowboy Bebop was not a ratings hit in Japan, but sold over 19,000 DVD units in the initial release run, and 81,000 overall. Protagonist Spike Spiegel won Best Male Character, and Megumi Hayashibara won Best Voice Actor for her role as Faye Valentine in the 1999 and 2000 Anime Grand Prix, respectively.\n\n\n\nCowboy Bebop's biggest influence has been in the United States, where it premiered on Adult Swim in 2001 with many reruns since. The show's heavy Western influence struck a chord with American viewers, where it became a \"gateway drug\" to anime aimed at adult audiences.","season":"spring","year":1998,"broadcast":{"day":"Saturdays","time":"01:00","timezone":"Asia/Tokyo","string":"Saturdays at 01:00 (JST)"},"producers":[{"mal_id":23,"type":"anime","name":"Bandai Visual","url":"https://myanimelist.net/anime/producer/23/Bandai_Visual"},{"mal_id":123,"type":"anime","name":"Victor Entertainment","url":"https://myanimelist.net/anime/producer/123/Victor_Entertainment"},{"mal_id":1506,"type":"anime","name":"Audio Planning U","url":"https://myanimelist.net/anime/producer/1506/Audio_Planning_U"}],"licensors":[{"mal_id":102,"type":"anime","name":"Funimation","url":"https://myanimelist.net/anime/producer/102/Funimation"}],"studios":[{"mal_id":14,"type":"anime","name":"Sunrise","url":"https://myanimelist.net/anime/producer/14/Sunrise"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]}]}},"noMatches":{"summary":"No matches","value":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":0,"total":0,"per_page":25}},"data":[]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime"}}}}}}},"operationId":"getAnime"}},"/anime/{id}":{"get":{"summary":"Anime Details","tags":["Anime"],"description":"Get an anime by its MyAnimeList ID.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning anime details","content":{"application/json":{"schema":{"description":"Successful response returning anime details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube-nocookie.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"},{"type":"English","title":"Cowboy Bebop"}],"title":"Cowboy Bebop","title_english":"Cowboy Bebop","title_japanese":"カウボーイビバップ","title_synonyms":[],"type":"TV","source":"Original","episodes":26,"status":"Finished Airing","airing":false,"aired":{"from":"1998-04-03T00:00:00+00:00","to":"1999-04-24T00:00:00+00:00","prop":{"from":{"day":3,"month":4,"year":1998},"to":{"day":24,"month":4,"year":1999}},"string":"Apr 3, 1998 to Apr 24, 1999"},"duration":"24 min per ep","rating":"R - 17+ (violence & profanity)","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"synopsis":"Crime is timeless. By the year 2071, humanity has expanded across the galaxy, filling the surface of other planets with settlements like those on Earth. These new societies are plagued by murder, drug use, and theft, and intergalactic outlaws are hunted by a growing number of tough bounty hunters.\n\nSpike Spiegel and Jet Black pursue criminals throughout space to make a humble living. Beneath his goofy and aloof demeanor, Spike is haunted by the weight of his violent past. Meanwhile, Jet manages his own troubled memories while taking care of Spike and the Bebop, their ship. The duo is joined by the beautiful con artist Faye Valentine, odd child Edward Wong Hau Pepelu Tivrusky IV, and Ein, a bioengineered Welsh corgi.\n\nWhile developing bonds and working to catch a colorful cast of criminals, the Bebop crew's lives are disrupted by a menace from Spike's past. As a rival's maniacal plot continues to unravel, Spike must choose between life with his newfound family or revenge for his old wounds.\n\n[Written by MAL Rewrite]","background":"When Cowboy Bebop first aired in spring of 1998 on TV Tokyo, only episodes 2-3, 7-15, and 18 were broadcast, it was concluded with a recap special known as Yose Atsume Blues. This was due to anime censorship having increased following the big controversies over Evangelion, as a result most of the series was pulled from the air due to violent content. Satellite channel WOWOW picked up the series in the fall of that year and aired it in its entirety uncensored. Cowboy Bebop was not a ratings hit in Japan, but sold over 19,000 DVD units in the initial release run, and 81,000 overall. Protagonist Spike Spiegel won Best Male Character, and Megumi Hayashibara won Best Voice Actor for her role as Faye Valentine in the 1999 and 2000 Anime Grand Prix, respectively.\n\n\n\nCowboy Bebop's biggest influence has been in the United States, where it premiered on Adult Swim in 2001 with many reruns since. The show's heavy Western influence struck a chord with American viewers, where it became a \"gateway drug\" to anime aimed at adult audiences.","season":"spring","year":1998,"broadcast":{"day":"Saturdays","time":"01:00","timezone":"Asia/Tokyo","string":"Saturdays at 01:00 (JST)"},"producers":[{"mal_id":23,"type":"anime","name":"Bandai Visual","url":"https://myanimelist.net/anime/producer/23/Bandai_Visual"},{"mal_id":123,"type":"anime","name":"Victor Entertainment","url":"https://myanimelist.net/anime/producer/123/Victor_Entertainment"},{"mal_id":1506,"type":"anime","name":"Audio Planning U","url":"https://myanimelist.net/anime/producer/1506/Audio_Planning_U"}],"licensors":[{"mal_id":102,"type":"anime","name":"Funimation","url":"https://myanimelist.net/anime/producer/102/Funimation"}],"studios":[{"mal_id":14,"type":"anime","name":"Sunrise","url":"https://myanimelist.net/anime/producer/14/Sunrise"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1"}}}}}}},"operationId":"getAnimeById"}},"/anime/{id}/full":{"get":{"summary":"Anime Full Details","tags":["Anime"],"description":"Get an anime with all its extra details in one request.\n\nYou can request multiple IDs to be included in the same response using the `ids` parameter.\n\n> SFW flags filter out non-sfw relations.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"ids","required":false,"description":"Additional MAL IDs to include in this response. Accepts comma-separated or repeated values. Maximum 25 unique IDs in total, including the ID in the path. Duplicates are removed, preserving the requested order. When omitted, returns the existing single-entry response. All IDs use the same mode and SFW options."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["denied","deleted"],"x-enumDescriptions":{}},"in":"query","name":"mode","required":false,"description":"Choose which archive to search: denied or deleted. Searches only the selected archive and returns 404 if the ID is absent, even if it exists in the regular approved or unapproved catalogue. When omitted, searches the regular catalogue.","examples":{"default":{"value":"denied","x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning full anime details","content":{"application/json":{"schema":{"description":"Successful response returning full anime details","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."},"relations":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"media_type":{"type":"string","nullable":true},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}}}}}},"theme":{"type":"object","properties":{"openings":{"type":"array","items":{"type":"string"}},"endings":{"type":"array","items":{"type":"string"}}}},"external":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"streaming":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"moreinfo":{"type":"string","nullable":true}}},"included":{"type":"array","description":"Full details for additional IDs, in the requested order. Present only when ids is supplied.","items":{"type":"object","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."},"relations":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"media_type":{"type":"string","nullable":true},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}}}}}},"theme":{"type":"object","properties":{"openings":{"type":"array","items":{"type":"string"}},"endings":{"type":"array","items":{"type":"string"}}}},"external":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"streaming":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"moreinfo":{"type":"string","nullable":true}}}},"missing_ids":{"type":"array","description":"Additional IDs not found in the selected catalogue or archive, in the requested order. Present only when ids is supplied. A missing path ID returns 404. A temporary failure returns 503 instead of listing an ID here.","items":{"type":"integer"}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube-nocookie.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"},{"type":"English","title":"Cowboy Bebop"}],"title":"Cowboy Bebop","title_english":"Cowboy Bebop","title_japanese":"カウボーイビバップ","title_synonyms":[],"type":"TV","source":"Original","episodes":26,"status":"Finished Airing","airing":false,"aired":{"from":"1998-04-03T00:00:00+00:00","to":"1999-04-24T00:00:00+00:00","prop":{"from":{"day":3,"month":4,"year":1998},"to":{"day":24,"month":4,"year":1999}},"string":"Apr 3, 1998 to Apr 24, 1999"},"duration":"24 min per ep","rating":"R - 17+ (violence & profanity)","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"synopsis":"Crime is timeless. By the year 2071, humanity has expanded across the galaxy, filling the surface of other planets with settlements like those on Earth. These new societies are plagued by murder, drug use, and theft, and intergalactic outlaws are hunted by a growing number of tough bounty hunters.\n\nSpike Spiegel and Jet Black pursue criminals throughout space to make a humble living. Beneath his goofy and aloof demeanor, Spike is haunted by the weight of his violent past. Meanwhile, Jet manages his own troubled memories while taking care of Spike and the Bebop, their ship. The duo is joined by the beautiful con artist Faye Valentine, odd child Edward Wong Hau Pepelu Tivrusky IV, and Ein, a bioengineered Welsh corgi.\n\nWhile developing bonds and working to catch a colorful cast of criminals, the Bebop crew's lives are disrupted by a menace from Spike's past. As a rival's maniacal plot continues to unravel, Spike must choose between life with his newfound family or revenge for his old wounds.\n\n[Written by MAL Rewrite]","background":"When Cowboy Bebop first aired in spring of 1998 on TV Tokyo, only episodes 2-3, 7-15, and 18 were broadcast, it was concluded with a recap special known as Yose Atsume Blues. This was due to anime censorship having increased following the big controversies over Evangelion, as a result most of the series was pulled from the air due to violent content. Satellite channel WOWOW picked up the series in the fall of that year and aired it in its entirety uncensored. Cowboy Bebop was not a ratings hit in Japan, but sold over 19,000 DVD units in the initial release run, and 81,000 overall. Protagonist Spike Spiegel won Best Male Character, and Megumi Hayashibara won Best Voice Actor for her role as Faye Valentine in the 1999 and 2000 Anime Grand Prix, respectively.\n\n\n\nCowboy Bebop's biggest influence has been in the United States, where it premiered on Adult Swim in 2001 with many reruns since. The show's heavy Western influence struck a chord with American viewers, where it became a \"gateway drug\" to anime aimed at adult audiences.","season":"spring","year":1998,"broadcast":{"day":"Saturdays","time":"01:00","timezone":"Asia/Tokyo","string":"Saturdays at 01:00 (JST)"},"producers":[{"mal_id":23,"type":"anime","name":"Bandai Visual","url":"https://myanimelist.net/anime/producer/23/Bandai_Visual"},{"mal_id":123,"type":"anime","name":"Victor Entertainment","url":"https://myanimelist.net/anime/producer/123/Victor_Entertainment"},{"mal_id":1506,"type":"anime","name":"Audio Planning U","url":"https://myanimelist.net/anime/producer/1506/Audio_Planning_U"}],"licensors":[{"mal_id":102,"type":"anime","name":"Funimation","url":"https://myanimelist.net/anime/producer/102/Funimation"}],"studios":[{"mal_id":14,"type":"anime","name":"Sunrise","url":"https://myanimelist.net/anime/producer/14/Sunrise"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[],"relations":[{"relation":"Adaptation","entry":[{"mal_id":174,"type":"manga","name":"Shooting Star Bebop: Cowboy Bebop","url":"https://myanimelist.net/manga/174/Shooting_Star_Bebop__Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.webp"}}},{"mal_id":173,"type":"manga","name":"Cowboy Bebop","url":"https://myanimelist.net/manga/173/Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":5,"type":"anime","name":"Cowboy Bebop: Tengoku no Tobira","url":"https://myanimelist.net/anime/5/Cowboy_Bebop__Tengoku_no_Tobira","media_type":"Movie","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.webp"}}},{"mal_id":17205,"type":"anime","name":"Cowboy Bebop: Ein no Natsuyasumi","url":"https://myanimelist.net/anime/17205/Cowboy_Bebop__Ein_no_Natsuyasumi","media_type":"Special","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.webp"}}}]}],"theme":{"openings":["\"Tank!\" by The Seatbelts (eps 1-25)"],"endings":["1: \"The Real Folk Blues\" by The Seatbelts feat. Mai Yamane (eps 1-12, 14-25)","2: \"Space Lion\" by The Seatbelts (eps 13)","3: \"Blue\" by The Seatbelts feat. Mai Yamane (eps 26)"]},"external":[{"name":"Official Site","url":"http://www.cowboy-bebop.net/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=23"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=13"},{"name":"Wikipedia","url":"http://en.wikipedia.org/wiki/Cowboy_Bebop"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%A6%E3%83%9C%E3%83%BC%E3%82%A4%E3%83%93%E3%83%90%E3%83%83%E3%83%97"},{"name":"Syoboi","url":"https://cal.syoboi.jp/tid/538"}],"streaming":[{"name":"Crunchyroll","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJDcnVuY2h5cm9sbCIsIm1vbmV0aXphdGlvblR5cGUiOiJmbGF0cmF0ZSIsInByZXNlbnRhdGlvblR5cGUiOiJoZCIsImN1cnJlbmN5IjoiVVNEIiwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyODMsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MzQ0MzUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMzQ0MzUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3M1MTkyMyJ9fV19&r=https%3A%2F%2Fcrunchyroll.pxf.io%2Fxk92Nv%3Fu%3Dhttps%253A%252F%252Fwww.crunchyroll.com%252Fwatch%252FG7PU4VJEJ%26subId3%3Djustappsvod&uct_country=us"},{"name":"Apple TV Store","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJBcHBsZSBUViBTdG9yZSIsIm1vbmV0aXphdGlvblR5cGUiOiJidXkiLCJwcmVzZW50YXRpb25UeXBlIjoiaGQiLCJjdXJyZW5jeSI6IlVTRCIsInByaWNlIjo3Ny43NCwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyLCJjbGlja291dFR5cGUiOiJqdy1jb250ZW50LXBhcnRuZXItZXhwb3J0LWFwaSJ9fSx7InNjaGVtYSI6ImlnbHU6Y29tLmp1c3R3YXRjaC90aXRsZV9jb250ZXh0L2pzb25zY2hlbWEvMS0zLTAiLCJkYXRhIjp7InRpdGxlSWQiOjM0NDM1LCJvYmplY3RUeXBlIjoic2hvdyIsImp3RW50aXR5SWQiOiJ0czM0NDM1Iiwic2Vhc29uTnVtYmVyIjoxLCJqd1Jhd0VudGl0eUlkIjoidHNzNTE5MjMifX1dfQ&r=https%3A%2F%2Ftv.apple.com%2Fus%2Fepisode%2Fasteroid-blues%2Fumc.cmc.4w0mtpme6lxpjcpvuvrvs0krg%3Fat%3D1000l3V2%26ct%3Dapp_tv%26itscg%3D30200%26itsct%3Djustwatch_tv%26playableId%3Dtvs.sbd.9001%253A944008283%26showId%3Dumc.cmc.p83rtqx9v5ptlevdexc1v6b4&uct_country=us"}],"moreinfo":"Suggested Order of Viewing\n\n1. TV Series (26 episodes)\n\n2. Movie (takes place between episodes 22 and 23)"}},"required":["data"]},"examples":{"default":{"summary":"Single","value":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube-nocookie.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"},{"type":"English","title":"Cowboy Bebop"}],"title":"Cowboy Bebop","title_english":"Cowboy Bebop","title_japanese":"カウボーイビバップ","title_synonyms":[],"type":"TV","source":"Original","episodes":26,"status":"Finished Airing","airing":false,"aired":{"from":"1998-04-03T00:00:00+00:00","to":"1999-04-24T00:00:00+00:00","prop":{"from":{"day":3,"month":4,"year":1998},"to":{"day":24,"month":4,"year":1999}},"string":"Apr 3, 1998 to Apr 24, 1999"},"duration":"24 min per ep","rating":"R - 17+ (violence & profanity)","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"synopsis":"Crime is timeless. By the year 2071, humanity has expanded across the galaxy, filling the surface of other planets with settlements like those on Earth. These new societies are plagued by murder, drug use, and theft, and intergalactic outlaws are hunted by a growing number of tough bounty hunters.\n\nSpike Spiegel and Jet Black pursue criminals throughout space to make a humble living. Beneath his goofy and aloof demeanor, Spike is haunted by the weight of his violent past. Meanwhile, Jet manages his own troubled memories while taking care of Spike and the Bebop, their ship. The duo is joined by the beautiful con artist Faye Valentine, odd child Edward Wong Hau Pepelu Tivrusky IV, and Ein, a bioengineered Welsh corgi.\n\nWhile developing bonds and working to catch a colorful cast of criminals, the Bebop crew's lives are disrupted by a menace from Spike's past. As a rival's maniacal plot continues to unravel, Spike must choose between life with his newfound family or revenge for his old wounds.\n\n[Written by MAL Rewrite]","background":"When Cowboy Bebop first aired in spring of 1998 on TV Tokyo, only episodes 2-3, 7-15, and 18 were broadcast, it was concluded with a recap special known as Yose Atsume Blues. This was due to anime censorship having increased following the big controversies over Evangelion, as a result most of the series was pulled from the air due to violent content. Satellite channel WOWOW picked up the series in the fall of that year and aired it in its entirety uncensored. Cowboy Bebop was not a ratings hit in Japan, but sold over 19,000 DVD units in the initial release run, and 81,000 overall. Protagonist Spike Spiegel won Best Male Character, and Megumi Hayashibara won Best Voice Actor for her role as Faye Valentine in the 1999 and 2000 Anime Grand Prix, respectively.\n\n\n\nCowboy Bebop's biggest influence has been in the United States, where it premiered on Adult Swim in 2001 with many reruns since. The show's heavy Western influence struck a chord with American viewers, where it became a \"gateway drug\" to anime aimed at adult audiences.","season":"spring","year":1998,"broadcast":{"day":"Saturdays","time":"01:00","timezone":"Asia/Tokyo","string":"Saturdays at 01:00 (JST)"},"producers":[{"mal_id":23,"type":"anime","name":"Bandai Visual","url":"https://myanimelist.net/anime/producer/23/Bandai_Visual"},{"mal_id":123,"type":"anime","name":"Victor Entertainment","url":"https://myanimelist.net/anime/producer/123/Victor_Entertainment"},{"mal_id":1506,"type":"anime","name":"Audio Planning U","url":"https://myanimelist.net/anime/producer/1506/Audio_Planning_U"}],"licensors":[{"mal_id":102,"type":"anime","name":"Funimation","url":"https://myanimelist.net/anime/producer/102/Funimation"}],"studios":[{"mal_id":14,"type":"anime","name":"Sunrise","url":"https://myanimelist.net/anime/producer/14/Sunrise"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[],"relations":[{"relation":"Adaptation","entry":[{"mal_id":174,"type":"manga","name":"Shooting Star Bebop: Cowboy Bebop","url":"https://myanimelist.net/manga/174/Shooting_Star_Bebop__Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.webp"}}},{"mal_id":173,"type":"manga","name":"Cowboy Bebop","url":"https://myanimelist.net/manga/173/Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":5,"type":"anime","name":"Cowboy Bebop: Tengoku no Tobira","url":"https://myanimelist.net/anime/5/Cowboy_Bebop__Tengoku_no_Tobira","media_type":"Movie","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.webp"}}},{"mal_id":17205,"type":"anime","name":"Cowboy Bebop: Ein no Natsuyasumi","url":"https://myanimelist.net/anime/17205/Cowboy_Bebop__Ein_no_Natsuyasumi","media_type":"Special","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.webp"}}}]}],"theme":{"openings":["\"Tank!\" by The Seatbelts (eps 1-25)"],"endings":["1: \"The Real Folk Blues\" by The Seatbelts feat. Mai Yamane (eps 1-12, 14-25)","2: \"Space Lion\" by The Seatbelts (eps 13)","3: \"Blue\" by The Seatbelts feat. Mai Yamane (eps 26)"]},"external":[{"name":"Official Site","url":"http://www.cowboy-bebop.net/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=23"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=13"},{"name":"Wikipedia","url":"http://en.wikipedia.org/wiki/Cowboy_Bebop"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%A6%E3%83%9C%E3%83%BC%E3%82%A4%E3%83%93%E3%83%90%E3%83%83%E3%83%97"},{"name":"Syoboi","url":"https://cal.syoboi.jp/tid/538"}],"streaming":[{"name":"Crunchyroll","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJDcnVuY2h5cm9sbCIsIm1vbmV0aXphdGlvblR5cGUiOiJmbGF0cmF0ZSIsInByZXNlbnRhdGlvblR5cGUiOiJoZCIsImN1cnJlbmN5IjoiVVNEIiwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyODMsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MzQ0MzUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMzQ0MzUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3M1MTkyMyJ9fV19&r=https%3A%2F%2Fcrunchyroll.pxf.io%2Fxk92Nv%3Fu%3Dhttps%253A%252F%252Fwww.crunchyroll.com%252Fwatch%252FG7PU4VJEJ%26subId3%3Djustappsvod&uct_country=us"},{"name":"Apple TV Store","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJBcHBsZSBUViBTdG9yZSIsIm1vbmV0aXphdGlvblR5cGUiOiJidXkiLCJwcmVzZW50YXRpb25UeXBlIjoiaGQiLCJjdXJyZW5jeSI6IlVTRCIsInByaWNlIjo3Ny43NCwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyLCJjbGlja291dFR5cGUiOiJqdy1jb250ZW50LXBhcnRuZXItZXhwb3J0LWFwaSJ9fSx7InNjaGVtYSI6ImlnbHU6Y29tLmp1c3R3YXRjaC90aXRsZV9jb250ZXh0L2pzb25zY2hlbWEvMS0zLTAiLCJkYXRhIjp7InRpdGxlSWQiOjM0NDM1LCJvYmplY3RUeXBlIjoic2hvdyIsImp3RW50aXR5SWQiOiJ0czM0NDM1Iiwic2Vhc29uTnVtYmVyIjoxLCJqd1Jhd0VudGl0eUlkIjoidHNzNTE5MjMifX1dfQ&r=https%3A%2F%2Ftv.apple.com%2Fus%2Fepisode%2Fasteroid-blues%2Fumc.cmc.4w0mtpme6lxpjcpvuvrvs0krg%3Fat%3D1000l3V2%26ct%3Dapp_tv%26itscg%3D30200%26itsct%3Djustwatch_tv%26playableId%3Dtvs.sbd.9001%253A944008283%26showId%3Dumc.cmc.p83rtqx9v5ptlevdexc1v6b4&uct_country=us"}],"moreinfo":"Suggested Order of Viewing\n\n1. TV Series (26 episodes)\n\n2. Movie (takes place between episodes 22 and 23)"}}},"batch":{"summary":"Batch","value":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube-nocookie.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"},{"type":"English","title":"Cowboy Bebop"}],"title":"Cowboy Bebop","title_english":"Cowboy Bebop","title_japanese":"カウボーイビバップ","title_synonyms":[],"type":"TV","source":"Original","episodes":26,"status":"Finished Airing","airing":false,"aired":{"from":"1998-04-03T00:00:00+00:00","to":"1999-04-24T00:00:00+00:00","prop":{"from":{"day":3,"month":4,"year":1998},"to":{"day":24,"month":4,"year":1999}},"string":"Apr 3, 1998 to Apr 24, 1999"},"duration":"24 min per ep","rating":"R - 17+ (violence & profanity)","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"synopsis":"Crime is timeless. By the year 2071, humanity has expanded across the galaxy, filling the surface of other planets with settlements like those on Earth. These new societies are plagued by murder, drug use, and theft, and intergalactic outlaws are hunted by a growing number of tough bounty hunters.\n\nSpike Spiegel and Jet Black pursue criminals throughout space to make a humble living. Beneath his goofy and aloof demeanor, Spike is haunted by the weight of his violent past. Meanwhile, Jet manages his own troubled memories while taking care of Spike and the Bebop, their ship. The duo is joined by the beautiful con artist Faye Valentine, odd child Edward Wong Hau Pepelu Tivrusky IV, and Ein, a bioengineered Welsh corgi.\n\nWhile developing bonds and working to catch a colorful cast of criminals, the Bebop crew's lives are disrupted by a menace from Spike's past. As a rival's maniacal plot continues to unravel, Spike must choose between life with his newfound family or revenge for his old wounds.\n\n[Written by MAL Rewrite]","background":"When Cowboy Bebop first aired in spring of 1998 on TV Tokyo, only episodes 2-3, 7-15, and 18 were broadcast, it was concluded with a recap special known as Yose Atsume Blues. This was due to anime censorship having increased following the big controversies over Evangelion, as a result most of the series was pulled from the air due to violent content. Satellite channel WOWOW picked up the series in the fall of that year and aired it in its entirety uncensored. Cowboy Bebop was not a ratings hit in Japan, but sold over 19,000 DVD units in the initial release run, and 81,000 overall. Protagonist Spike Spiegel won Best Male Character, and Megumi Hayashibara won Best Voice Actor for her role as Faye Valentine in the 1999 and 2000 Anime Grand Prix, respectively.\n\n\n\nCowboy Bebop's biggest influence has been in the United States, where it premiered on Adult Swim in 2001 with many reruns since. The show's heavy Western influence struck a chord with American viewers, where it became a \"gateway drug\" to anime aimed at adult audiences.","season":"spring","year":1998,"broadcast":{"day":"Saturdays","time":"01:00","timezone":"Asia/Tokyo","string":"Saturdays at 01:00 (JST)"},"producers":[{"mal_id":23,"type":"anime","name":"Bandai Visual","url":"https://myanimelist.net/anime/producer/23/Bandai_Visual"},{"mal_id":123,"type":"anime","name":"Victor Entertainment","url":"https://myanimelist.net/anime/producer/123/Victor_Entertainment"},{"mal_id":1506,"type":"anime","name":"Audio Planning U","url":"https://myanimelist.net/anime/producer/1506/Audio_Planning_U"}],"licensors":[{"mal_id":102,"type":"anime","name":"Funimation","url":"https://myanimelist.net/anime/producer/102/Funimation"}],"studios":[{"mal_id":14,"type":"anime","name":"Sunrise","url":"https://myanimelist.net/anime/producer/14/Sunrise"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[],"relations":[{"relation":"Adaptation","entry":[{"mal_id":174,"type":"manga","name":"Shooting Star Bebop: Cowboy Bebop","url":"https://myanimelist.net/manga/174/Shooting_Star_Bebop__Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.webp"}}},{"mal_id":173,"type":"manga","name":"Cowboy Bebop","url":"https://myanimelist.net/manga/173/Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":5,"type":"anime","name":"Cowboy Bebop: Tengoku no Tobira","url":"https://myanimelist.net/anime/5/Cowboy_Bebop__Tengoku_no_Tobira","media_type":"Movie","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.webp"}}},{"mal_id":17205,"type":"anime","name":"Cowboy Bebop: Ein no Natsuyasumi","url":"https://myanimelist.net/anime/17205/Cowboy_Bebop__Ein_no_Natsuyasumi","media_type":"Special","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.webp"}}}]}],"theme":{"openings":["\"Tank!\" by The Seatbelts (eps 1-25)"],"endings":["1: \"The Real Folk Blues\" by The Seatbelts feat. Mai Yamane (eps 1-12, 14-25)","2: \"Space Lion\" by The Seatbelts (eps 13)","3: \"Blue\" by The Seatbelts feat. Mai Yamane (eps 26)"]},"external":[{"name":"Official Site","url":"http://www.cowboy-bebop.net/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=23"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=13"},{"name":"Wikipedia","url":"http://en.wikipedia.org/wiki/Cowboy_Bebop"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%A6%E3%83%9C%E3%83%BC%E3%82%A4%E3%83%93%E3%83%90%E3%83%83%E3%83%97"},{"name":"Syoboi","url":"https://cal.syoboi.jp/tid/538"}],"streaming":[{"name":"Crunchyroll","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJDcnVuY2h5cm9sbCIsIm1vbmV0aXphdGlvblR5cGUiOiJmbGF0cmF0ZSIsInByZXNlbnRhdGlvblR5cGUiOiJoZCIsImN1cnJlbmN5IjoiVVNEIiwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyODMsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MzQ0MzUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMzQ0MzUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3M1MTkyMyJ9fV19&r=https%3A%2F%2Fcrunchyroll.pxf.io%2Fxk92Nv%3Fu%3Dhttps%253A%252F%252Fwww.crunchyroll.com%252Fwatch%252FG7PU4VJEJ%26subId3%3Djustappsvod&uct_country=us"},{"name":"Apple TV Store","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJBcHBsZSBUViBTdG9yZSIsIm1vbmV0aXphdGlvblR5cGUiOiJidXkiLCJwcmVzZW50YXRpb25UeXBlIjoiaGQiLCJjdXJyZW5jeSI6IlVTRCIsInByaWNlIjo3Ny43NCwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyLCJjbGlja291dFR5cGUiOiJqdy1jb250ZW50LXBhcnRuZXItZXhwb3J0LWFwaSJ9fSx7InNjaGVtYSI6ImlnbHU6Y29tLmp1c3R3YXRjaC90aXRsZV9jb250ZXh0L2pzb25zY2hlbWEvMS0zLTAiLCJkYXRhIjp7InRpdGxlSWQiOjM0NDM1LCJvYmplY3RUeXBlIjoic2hvdyIsImp3RW50aXR5SWQiOiJ0czM0NDM1Iiwic2Vhc29uTnVtYmVyIjoxLCJqd1Jhd0VudGl0eUlkIjoidHNzNTE5MjMifX1dfQ&r=https%3A%2F%2Ftv.apple.com%2Fus%2Fepisode%2Fasteroid-blues%2Fumc.cmc.4w0mtpme6lxpjcpvuvrvs0krg%3Fat%3D1000l3V2%26ct%3Dapp_tv%26itscg%3D30200%26itsct%3Djustwatch_tv%26playableId%3Dtvs.sbd.9001%253A944008283%26showId%3Dumc.cmc.p83rtqx9v5ptlevdexc1v6b4&uct_country=us"}],"moreinfo":"Suggested Order of Viewing\n\n1. TV Series (26 episodes)\n\n2. Movie (takes place between episodes 22 and 23)"},"included":[{"mal_id":20,"url":"https://myanimelist.net/anime/20/Naruto","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1141/142503.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1141/142503.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503l.webp"}},"trailer":{"youtube_id":null,"url":null,"embed_url":null,"images":{"image_url":null,"small_image_url":null,"medium_image_url":null,"large_image_url":null,"maximum_image_url":null},"title":null,"views":null,"likes":null,"dislikes":null,"comment_count":null,"published_at":null,"duration":null,"privacy_status":null,"region_restriction":null,"embeddable":null},"approved":true,"titles":[{"type":"Default","title":"Naruto"},{"type":"Japanese","title":"ナルト"},{"type":"English","title":"Naruto"},{"type":"Synonym","title":"NARUTO"}],"title":"Naruto","title_english":"Naruto","title_japanese":"ナルト","title_synonyms":["NARUTO"],"type":"TV","source":"Manga","episodes":220,"status":"Finished Airing","airing":false,"aired":{"from":"2002-10-03T00:00:00+00:00","to":"2007-02-08T00:00:00+00:00","prop":{"from":{"day":3,"month":10,"year":2002},"to":{"day":8,"month":2,"year":2007}},"string":"Oct 3, 2002 to Feb 8, 2007"},"duration":"23 min per ep","rating":"PG-13 - Teens 13 or older","score":8.03,"scored_by":2180469,"rank":726,"popularity":9,"members":3178786,"favorites":88207,"synopsis":"Twelve years ago, a colossal demon fox terrorized the world. During the monster's attack on the Hidden Leaf Village, the Hokage—the village's leader and most powerful ninja—sacrifices himself to seal the beast inside a newborn, relieving civilization from destruction while dooming the baby to a lonely life.\n\nNow, after years of being shunned and bullied, Naruto Uzumaki pesters the village with elaborate pranks and vandalism. Despite these antics, he works hard to achieve his dream: to become the Hokage and earn the acknowledgement of those who have mistreated him for his entire life. Naruto joins Team 7, a ninja squad made up of two of his peers—prodigy Sasuke Uchiha and clever Sakura Haruno.\n\nUnder the aloof Kakashi Hatake's leadership, Team 7 takes on a series of difficult missions, forcing its members to grow in strength and comradery despite their many differences. Naruto strives to stand out in his rivalry with Sasuke and earn the romantic affection of Sakura. But as the trio brush against danger and death, their tragic pasts threaten to tear them apart.\n\n[Written by MAL Rewrite]","background":"Naruto received numerous awards during its airing, including the Best Full-Length Animation Program Award in the third UStv Awards and the 38th Best Animated Show in IGN's Top 100 Animated Series.\n\n\n\nThe anime was released on DVD in 16 volumes by VIZ Media from July 4, 2006, to September 22, 2009. The company rereleased it in eight volumes from October 6, 2009, to December 14, 2010. VIZ Media also made available a Blu-ray version in eight volumes from November 3, 2020, to October 18, 2022.\n\n\n\nThe series adapts the first 27 volumes of the original manga.","season":"fall","year":2002,"broadcast":{"day":"Thursdays","time":"19:30","timezone":"Asia/Tokyo","string":"Thursdays at 19:30 (JST)"},"producers":[{"mal_id":16,"type":"anime","name":"TV Tokyo","url":"https://myanimelist.net/anime/producer/16/TV_Tokyo"},{"mal_id":17,"type":"anime","name":"Aniplex","url":"https://myanimelist.net/anime/producer/17/Aniplex"}],"licensors":[{"mal_id":119,"type":"anime","name":"VIZ Media","url":"https://myanimelist.net/anime/producer/119/VIZ_Media"}],"studios":[{"mal_id":1,"type":"anime","name":"Studio Pierrot","url":"https://myanimelist.net/anime/producer/1/Studio_Pierrot"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":2,"type":"anime","name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure"},{"mal_id":10,"type":"anime","name":"Fantasy","url":"https://myanimelist.net/anime/genre/10/Fantasy"}],"explicit_genres":[],"themes":[{"mal_id":17,"type":"anime","name":"Martial Arts","url":"https://myanimelist.net/anime/genre/17/Martial_Arts"}],"demographics":[{"mal_id":27,"type":"anime","name":"Shounen","url":"https://myanimelist.net/anime/genre/27/Shounen"}],"relations":[{"relation":"Sequel","entry":[{"mal_id":1735,"type":"anime","name":"Naruto: Shippuuden","url":"https://myanimelist.net/anime/1735/Naruto__Shippuuden","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/111305.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/111305.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305l.webp"}}}]},{"relation":"Adaptation","entry":[{"mal_id":11,"type":"manga","name":"Naruto","url":"https://myanimelist.net/manga/11/Naruto","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/249658.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/249658t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/249658l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/249658.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/249658t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/249658l.webp"}}}]}],"theme":{"openings":["1: \"R★O★C★K★S\" by Hound Dog (eps 1-25)","2: \"Haruka Kanata (遥か彼方)\" by Asian Kung-fu Generation (eps 26-53)","3: \"Kanashimi wo Yasashisa ni (悲しみをやさしさに)\" by little by little (eps 54-77)","4: \"GO!!!\" by FLOW (eps 78-103)","5: \"Seishun Kyosokyoku (青春狂騒曲)\" by Sambomaster (eps 104-128)","6: \"No Boy, No Cry (ノーボーイ・ノークライ)\" by Stance Punks (eps 129-153)","7: \"Namikaze Satellite (波風サテライト)\" by Snowkel (eps 154-178)","8: \"Re:member\" by FLOW (eps 179-202)","9: \"YURA YURA (ユラユラ)\" by Hearts Grow (eps 203-220)"],"endings":["1: \"Wind\" by Akeboshi (eps 1-25)","2: \"Harmonia\" by Rythem (eps 26-51)","3: \"Viva Rock ~Japanese Side~\" by Orange Range (eps 52-64)","4: \"ALIVE\" by Raiko (eps 65-77)","5: \"Ima made Nando mo\" by the Mass Missile (eps 78-89)","6: \"Ryusei\" by Tia (eps 90-103)","7: \"Mountain A Go Go Too\" by Captain Straydum (eps 104-115)","8: \"Hajimete Kimi to Shabetta\" by GagagaSP (eps 116-128)","9: \"Nakushita Kotoba\" by No Regret Life (eps 129-141)","10: \"Speed\" by Analogfish (eps 142-153)","11: \"Soba ni Iru Kara\" by Amadori (eps 154-165)","12: \"Parade\" by CHABA (eps 166-178)","13: \"Yellow Moon\" by Akeboshi (eps 179-191)","14: \"Pinocchio\" by Ore Ska Band (eps 192-202)","15: \"Scenario\" by SABOTEN (eps 203-220)"]},"external":[{"name":"Official Site","url":"http://www.tv-tokyo.co.jp/anime/naruto2002/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=239"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=1825"},{"name":"Wikipedia","url":"http://en.wikipedia.org/wiki/Naruto"},{"name":"Bangumi","url":"https://bangumi.tv/subject/3425"}],"streaming":[{"name":"Crunchyroll","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJDcnVuY2h5cm9sbCIsIm1vbmV0aXphdGlvblR5cGUiOiJmbGF0cmF0ZSIsInByZXNlbnRhdGlvblR5cGUiOiJoZCIsImN1cnJlbmN5IjoiVVNEIiwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyODMsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MjAzMDUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMjAzMDUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3MyMDQyMiJ9fV19&r=https%3A%2F%2Fcrunchyroll.pxf.io%2Fxk92Nv%3Fu%3Dhttps%253A%252F%252Fwww.crunchyroll.com%252Fwatch%252FGYK5PJV7R%26subId3%3Djustappsvod&uct_country=us"},{"name":"Netflix","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJOZXRmbGl4IiwibW9uZXRpemF0aW9uVHlwZSI6ImZsYXRyYXRlIiwicHJlc2VudGF0aW9uVHlwZSI6InNkIiwiY3VycmVuY3kiOiJVU0QiLCJwYXJ0bmVySWQiOjI0OTAsInByb3ZpZGVySWQiOjgsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MjAzMDUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMjAzMDUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3MyMDQyMiJ9fV19&r=https%3A%2F%2Fwww.netflix.com%2Ftitle%2F70205012&uct_country=us"}],"moreinfo":null},{"mal_id":1535,"url":"https://myanimelist.net/anime/1535/Death_Note","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1079/138100.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1079/138100.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100l.webp"}},"trailer":{"youtube_id":"Vt_3c8BgxV4","url":"https://www.youtube.com/watch?v=Vt_3c8BgxV4","embed_url":"https://www.youtube-nocookie.com/embed/Vt_3c8BgxV4?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/Vt_3c8BgxV4/default.jpg","small_image_url":"https://img.youtube.com/vi/Vt_3c8BgxV4/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/Vt_3c8BgxV4/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/Vt_3c8BgxV4/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/Vt_3c8BgxV4/maxresdefault.jpg"},"title":"アニメ「デスノート」Blu-ray BOXアップコンバート比較動画","views":203668,"likes":2453,"dislikes":52,"comment_count":144,"published_at":"2016-10-05T03:00:01+00:00","duration":"PT1M31S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Death Note"},{"type":"Japanese","title":"デスノート"},{"type":"English","title":"Death Note"},{"type":"Synonym","title":"DN"}],"title":"Death Note","title_english":"Death Note","title_japanese":"デスノート","title_synonyms":["DN"],"type":"TV","source":"Manga","episodes":37,"status":"Finished Airing","airing":false,"aired":{"from":"2006-10-04T00:00:00+00:00","to":"2007-06-27T00:00:00+00:00","prop":{"from":{"day":4,"month":10,"year":2006},"to":{"day":27,"month":6,"year":2007}},"string":"Oct 4, 2006 to Jun 27, 2007"},"duration":"23 min per ep","rating":"R - 17+ (violence & profanity)","score":8.62,"scored_by":3066525,"rank":103,"popularity":2,"members":4390335,"favorites":188768,"synopsis":"Brutal murders, petty thefts, and senseless violence pollute the human world. In contrast, the realm of death gods is a humdrum, unchanging gambling den. The ingenious 17-year-old Japanese student Light Yagami and sadistic god of death Ryuk share one belief: their worlds are rotten.\n\nFor his own amusement, Ryuk drops his Death Note into the human world. Light stumbles upon it, deeming the first of its rules ridiculous: the human whose name is written in this note shall die. However, the temptation is too great, and Light experiments by writing a felon's name, which disturbingly enacts his first murder.\n\nAware of the terrifying godlike power that has fallen into his hands, Light—under the alias Kira—follows his wicked sense of justice with the ultimate goal of cleansing the world of all evil-doers. The meticulous mastermind detective L is already on his trail, but as Light's brilliance rivals L's, the grand chase for Kira turns into an intense battle of wits that can only end when one of them is dead.\n\n[Written by MAL Rewrite]","background":null,"season":"fall","year":2006,"broadcast":{"day":"Wednesdays","time":"00:56","timezone":"Asia/Tokyo","string":"Wednesdays at 00:56 (JST)"},"producers":[{"mal_id":29,"type":"anime","name":"VAP","url":"https://myanimelist.net/anime/producer/29/VAP"},{"mal_id":1003,"type":"anime","name":"Nippon Television Network","url":"https://myanimelist.net/anime/producer/1003/Nippon_Television_Network"},{"mal_id":1365,"type":"anime","name":"Shueisha","url":"https://myanimelist.net/anime/producer/1365/Shueisha"},{"mal_id":1791,"type":"anime","name":"D.N. Dream Partners","url":"https://myanimelist.net/anime/producer/1791/DN_Dream_Partners"}],"licensors":[{"mal_id":119,"type":"anime","name":"VIZ Media","url":"https://myanimelist.net/anime/producer/119/VIZ_Media"}],"studios":[{"mal_id":11,"type":"anime","name":"Madhouse","url":"https://myanimelist.net/anime/producer/11/Madhouse"}],"genres":[{"mal_id":37,"type":"anime","name":"Supernatural","url":"https://myanimelist.net/anime/genre/37/Supernatural"},{"mal_id":41,"type":"anime","name":"Suspense","url":"https://myanimelist.net/anime/genre/41/Suspense"}],"explicit_genres":[],"themes":[{"mal_id":40,"type":"anime","name":"Psychological","url":"https://myanimelist.net/anime/genre/40/Psychological"}],"demographics":[{"mal_id":27,"type":"anime","name":"Shounen","url":"https://myanimelist.net/anime/genre/27/Shounen"}],"relations":[{"relation":"Adaptation","entry":[{"mal_id":21,"type":"manga","name":"Death Note","url":"https://myanimelist.net/manga/21/Death_Note","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/258245.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/258245t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/258245l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/258245.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/258245t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/258245l.webp"}}}]},{"relation":"Summary","entry":[{"mal_id":2994,"type":"anime","name":"Death Note: Rewrite","url":"https://myanimelist.net/anime/2994/Death_Note__Rewrite","media_type":"TV Special","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/13/8518.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/13/8518t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/13/8518l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/13/8518.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/13/8518t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/13/8518l.webp"}}}]}],"theme":{"openings":["\"What's up, people?!\" by Maximum the Hormone (eps 20-37)","1: \"the WORLD\" by Nightmare (eps 1-19)"],"endings":["1: \"Alumina\" by Nightmare (eps 1-19)","2: \"Zetsubō Billy\" by Maximum the Hormone (eps 20-36)","3: \"Coda ~ Death Note\" by Yoshihisa Hirano (eps 37)"]},"external":[{"name":"Official Site","url":"http://www.ntv.co.jp/deathnote/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=4563"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=6592"},{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Death_Note"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/DEATH_NOTE_%28%E3%82%A2%E3%83%8B%E3%83%A1%29"},{"name":"Syoboi","url":"https://cal.syoboi.jp/tid/945"},{"name":"Bangumi","url":"https://bgm.tv/subject/1773"}],"streaming":[{"name":"Netflix","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJOZXRmbGl4IiwibW9uZXRpemF0aW9uVHlwZSI6ImZsYXRyYXRlIiwicHJlc2VudGF0aW9uVHlwZSI6ImhkIiwiY3VycmVuY3kiOiJVU0QiLCJwYXJ0bmVySWQiOjI0OTAsInByb3ZpZGVySWQiOjgsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MTEzMTMsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMTEzMTMiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3MxMTEzMCJ9fV19&r=https%3A%2F%2Fwww.netflix.com%2Ftitle%2F70204970&uct_country=us"},{"name":"Amazon Prime Video","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJBbWF6b24gUHJpbWUgVmlkZW8iLCJtb25ldGl6YXRpb25UeXBlIjoiZmxhdHJhdGUiLCJwcmVzZW50YXRpb25UeXBlIjoiaGQiLCJjdXJyZW5jeSI6IlVTRCIsInBhcnRuZXJJZCI6MjQ5MCwicHJvdmlkZXJJZCI6OSwiY2xpY2tvdXRUeXBlIjoianctY29udGVudC1wYXJ0bmVyLWV4cG9ydC1hcGkifX0seyJzY2hlbWEiOiJpZ2x1OmNvbS5qdXN0d2F0Y2gvdGl0bGVfY29udGV4dC9qc29uc2NoZW1hLzEtMy0wIiwiZGF0YSI6eyJ0aXRsZUlkIjoxMTMxMywib2JqZWN0VHlwZSI6InNob3ciLCJqd0VudGl0eUlkIjoidHMxMTMxMyIsInNlYXNvbk51bWJlciI6MSwiandSYXdFbnRpdHlJZCI6InRzczExMTMwIn19XX0&r=https%3A%2F%2Fwatch.amazon.com%2Fdetail%3Fgti%3Damzn1.dv.gti.cd1b7007-3c53-436e-bafe-caf45beac504&uct_country=us"}],"moreinfo":null}],"missing_ids":[]}},"batchMissing":{"summary":"Batch with a missing ID","value":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube-nocookie.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"},{"type":"English","title":"Cowboy Bebop"}],"title":"Cowboy Bebop","title_english":"Cowboy Bebop","title_japanese":"カウボーイビバップ","title_synonyms":[],"type":"TV","source":"Original","episodes":26,"status":"Finished Airing","airing":false,"aired":{"from":"1998-04-03T00:00:00+00:00","to":"1999-04-24T00:00:00+00:00","prop":{"from":{"day":3,"month":4,"year":1998},"to":{"day":24,"month":4,"year":1999}},"string":"Apr 3, 1998 to Apr 24, 1999"},"duration":"24 min per ep","rating":"R - 17+ (violence & profanity)","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"synopsis":"Crime is timeless. By the year 2071, humanity has expanded across the galaxy, filling the surface of other planets with settlements like those on Earth. These new societies are plagued by murder, drug use, and theft, and intergalactic outlaws are hunted by a growing number of tough bounty hunters.\n\nSpike Spiegel and Jet Black pursue criminals throughout space to make a humble living. Beneath his goofy and aloof demeanor, Spike is haunted by the weight of his violent past. Meanwhile, Jet manages his own troubled memories while taking care of Spike and the Bebop, their ship. The duo is joined by the beautiful con artist Faye Valentine, odd child Edward Wong Hau Pepelu Tivrusky IV, and Ein, a bioengineered Welsh corgi.\n\nWhile developing bonds and working to catch a colorful cast of criminals, the Bebop crew's lives are disrupted by a menace from Spike's past. As a rival's maniacal plot continues to unravel, Spike must choose between life with his newfound family or revenge for his old wounds.\n\n[Written by MAL Rewrite]","background":"When Cowboy Bebop first aired in spring of 1998 on TV Tokyo, only episodes 2-3, 7-15, and 18 were broadcast, it was concluded with a recap special known as Yose Atsume Blues. This was due to anime censorship having increased following the big controversies over Evangelion, as a result most of the series was pulled from the air due to violent content. Satellite channel WOWOW picked up the series in the fall of that year and aired it in its entirety uncensored. Cowboy Bebop was not a ratings hit in Japan, but sold over 19,000 DVD units in the initial release run, and 81,000 overall. Protagonist Spike Spiegel won Best Male Character, and Megumi Hayashibara won Best Voice Actor for her role as Faye Valentine in the 1999 and 2000 Anime Grand Prix, respectively.\n\n\n\nCowboy Bebop's biggest influence has been in the United States, where it premiered on Adult Swim in 2001 with many reruns since. The show's heavy Western influence struck a chord with American viewers, where it became a \"gateway drug\" to anime aimed at adult audiences.","season":"spring","year":1998,"broadcast":{"day":"Saturdays","time":"01:00","timezone":"Asia/Tokyo","string":"Saturdays at 01:00 (JST)"},"producers":[{"mal_id":23,"type":"anime","name":"Bandai Visual","url":"https://myanimelist.net/anime/producer/23/Bandai_Visual"},{"mal_id":123,"type":"anime","name":"Victor Entertainment","url":"https://myanimelist.net/anime/producer/123/Victor_Entertainment"},{"mal_id":1506,"type":"anime","name":"Audio Planning U","url":"https://myanimelist.net/anime/producer/1506/Audio_Planning_U"}],"licensors":[{"mal_id":102,"type":"anime","name":"Funimation","url":"https://myanimelist.net/anime/producer/102/Funimation"}],"studios":[{"mal_id":14,"type":"anime","name":"Sunrise","url":"https://myanimelist.net/anime/producer/14/Sunrise"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[],"relations":[{"relation":"Adaptation","entry":[{"mal_id":174,"type":"manga","name":"Shooting Star Bebop: Cowboy Bebop","url":"https://myanimelist.net/manga/174/Shooting_Star_Bebop__Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.webp"}}},{"mal_id":173,"type":"manga","name":"Cowboy Bebop","url":"https://myanimelist.net/manga/173/Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":5,"type":"anime","name":"Cowboy Bebop: Tengoku no Tobira","url":"https://myanimelist.net/anime/5/Cowboy_Bebop__Tengoku_no_Tobira","media_type":"Movie","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.webp"}}},{"mal_id":17205,"type":"anime","name":"Cowboy Bebop: Ein no Natsuyasumi","url":"https://myanimelist.net/anime/17205/Cowboy_Bebop__Ein_no_Natsuyasumi","media_type":"Special","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/127387.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/127387l.webp"}}}]}],"theme":{"openings":["\"Tank!\" by The Seatbelts (eps 1-25)"],"endings":["1: \"The Real Folk Blues\" by The Seatbelts feat. Mai Yamane (eps 1-12, 14-25)","2: \"Space Lion\" by The Seatbelts (eps 13)","3: \"Blue\" by The Seatbelts feat. Mai Yamane (eps 26)"]},"external":[{"name":"Official Site","url":"http://www.cowboy-bebop.net/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=23"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=13"},{"name":"Wikipedia","url":"http://en.wikipedia.org/wiki/Cowboy_Bebop"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/%E3%82%AB%E3%82%A6%E3%83%9C%E3%83%BC%E3%82%A4%E3%83%93%E3%83%90%E3%83%83%E3%83%97"},{"name":"Syoboi","url":"https://cal.syoboi.jp/tid/538"}],"streaming":[{"name":"Crunchyroll","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJDcnVuY2h5cm9sbCIsIm1vbmV0aXphdGlvblR5cGUiOiJmbGF0cmF0ZSIsInByZXNlbnRhdGlvblR5cGUiOiJoZCIsImN1cnJlbmN5IjoiVVNEIiwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyODMsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MzQ0MzUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMzQ0MzUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3M1MTkyMyJ9fV19&r=https%3A%2F%2Fcrunchyroll.pxf.io%2Fxk92Nv%3Fu%3Dhttps%253A%252F%252Fwww.crunchyroll.com%252Fwatch%252FG7PU4VJEJ%26subId3%3Djustappsvod&uct_country=us"},{"name":"Apple TV Store","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJBcHBsZSBUViBTdG9yZSIsIm1vbmV0aXphdGlvblR5cGUiOiJidXkiLCJwcmVzZW50YXRpb25UeXBlIjoiaGQiLCJjdXJyZW5jeSI6IlVTRCIsInByaWNlIjo3Ny43NCwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyLCJjbGlja291dFR5cGUiOiJqdy1jb250ZW50LXBhcnRuZXItZXhwb3J0LWFwaSJ9fSx7InNjaGVtYSI6ImlnbHU6Y29tLmp1c3R3YXRjaC90aXRsZV9jb250ZXh0L2pzb25zY2hlbWEvMS0zLTAiLCJkYXRhIjp7InRpdGxlSWQiOjM0NDM1LCJvYmplY3RUeXBlIjoic2hvdyIsImp3RW50aXR5SWQiOiJ0czM0NDM1Iiwic2Vhc29uTnVtYmVyIjoxLCJqd1Jhd0VudGl0eUlkIjoidHNzNTE5MjMifX1dfQ&r=https%3A%2F%2Ftv.apple.com%2Fus%2Fepisode%2Fasteroid-blues%2Fumc.cmc.4w0mtpme6lxpjcpvuvrvs0krg%3Fat%3D1000l3V2%26ct%3Dapp_tv%26itscg%3D30200%26itsct%3Djustwatch_tv%26playableId%3Dtvs.sbd.9001%253A944008283%26showId%3Dumc.cmc.p83rtqx9v5ptlevdexc1v6b4&uct_country=us"}],"moreinfo":"Suggested Order of Viewing\n\n1. TV Series (26 episodes)\n\n2. Movie (takes place between episodes 22 and 23)"},"included":[{"mal_id":20,"url":"https://myanimelist.net/anime/20/Naruto","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1141/142503.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1141/142503.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1141/142503l.webp"}},"trailer":{"youtube_id":null,"url":null,"embed_url":null,"images":{"image_url":null,"small_image_url":null,"medium_image_url":null,"large_image_url":null,"maximum_image_url":null},"title":null,"views":null,"likes":null,"dislikes":null,"comment_count":null,"published_at":null,"duration":null,"privacy_status":null,"region_restriction":null,"embeddable":null},"approved":true,"titles":[{"type":"Default","title":"Naruto"},{"type":"Japanese","title":"ナルト"},{"type":"English","title":"Naruto"},{"type":"Synonym","title":"NARUTO"}],"title":"Naruto","title_english":"Naruto","title_japanese":"ナルト","title_synonyms":["NARUTO"],"type":"TV","source":"Manga","episodes":220,"status":"Finished Airing","airing":false,"aired":{"from":"2002-10-03T00:00:00+00:00","to":"2007-02-08T00:00:00+00:00","prop":{"from":{"day":3,"month":10,"year":2002},"to":{"day":8,"month":2,"year":2007}},"string":"Oct 3, 2002 to Feb 8, 2007"},"duration":"23 min per ep","rating":"PG-13 - Teens 13 or older","score":8.03,"scored_by":2180469,"rank":726,"popularity":9,"members":3178786,"favorites":88207,"synopsis":"Twelve years ago, a colossal demon fox terrorized the world. During the monster's attack on the Hidden Leaf Village, the Hokage—the village's leader and most powerful ninja—sacrifices himself to seal the beast inside a newborn, relieving civilization from destruction while dooming the baby to a lonely life.\n\nNow, after years of being shunned and bullied, Naruto Uzumaki pesters the village with elaborate pranks and vandalism. Despite these antics, he works hard to achieve his dream: to become the Hokage and earn the acknowledgement of those who have mistreated him for his entire life. Naruto joins Team 7, a ninja squad made up of two of his peers—prodigy Sasuke Uchiha and clever Sakura Haruno.\n\nUnder the aloof Kakashi Hatake's leadership, Team 7 takes on a series of difficult missions, forcing its members to grow in strength and comradery despite their many differences. Naruto strives to stand out in his rivalry with Sasuke and earn the romantic affection of Sakura. But as the trio brush against danger and death, their tragic pasts threaten to tear them apart.\n\n[Written by MAL Rewrite]","background":"Naruto received numerous awards during its airing, including the Best Full-Length Animation Program Award in the third UStv Awards and the 38th Best Animated Show in IGN's Top 100 Animated Series.\n\n\n\nThe anime was released on DVD in 16 volumes by VIZ Media from July 4, 2006, to September 22, 2009. The company rereleased it in eight volumes from October 6, 2009, to December 14, 2010. VIZ Media also made available a Blu-ray version in eight volumes from November 3, 2020, to October 18, 2022.\n\n\n\nThe series adapts the first 27 volumes of the original manga.","season":"fall","year":2002,"broadcast":{"day":"Thursdays","time":"19:30","timezone":"Asia/Tokyo","string":"Thursdays at 19:30 (JST)"},"producers":[{"mal_id":16,"type":"anime","name":"TV Tokyo","url":"https://myanimelist.net/anime/producer/16/TV_Tokyo"},{"mal_id":17,"type":"anime","name":"Aniplex","url":"https://myanimelist.net/anime/producer/17/Aniplex"}],"licensors":[{"mal_id":119,"type":"anime","name":"VIZ Media","url":"https://myanimelist.net/anime/producer/119/VIZ_Media"}],"studios":[{"mal_id":1,"type":"anime","name":"Studio Pierrot","url":"https://myanimelist.net/anime/producer/1/Studio_Pierrot"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":2,"type":"anime","name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure"},{"mal_id":10,"type":"anime","name":"Fantasy","url":"https://myanimelist.net/anime/genre/10/Fantasy"}],"explicit_genres":[],"themes":[{"mal_id":17,"type":"anime","name":"Martial Arts","url":"https://myanimelist.net/anime/genre/17/Martial_Arts"}],"demographics":[{"mal_id":27,"type":"anime","name":"Shounen","url":"https://myanimelist.net/anime/genre/27/Shounen"}],"relations":[{"relation":"Sequel","entry":[{"mal_id":1735,"type":"anime","name":"Naruto: Shippuuden","url":"https://myanimelist.net/anime/1735/Naruto__Shippuuden","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/111305.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1565/111305.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1565/111305l.webp"}}}]},{"relation":"Adaptation","entry":[{"mal_id":11,"type":"manga","name":"Naruto","url":"https://myanimelist.net/manga/11/Naruto","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/249658.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/249658t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/249658l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/249658.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/249658t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/249658l.webp"}}}]}],"theme":{"openings":["1: \"R★O★C★K★S\" by Hound Dog (eps 1-25)","2: \"Haruka Kanata (遥か彼方)\" by Asian Kung-fu Generation (eps 26-53)","3: \"Kanashimi wo Yasashisa ni (悲しみをやさしさに)\" by little by little (eps 54-77)","4: \"GO!!!\" by FLOW (eps 78-103)","5: \"Seishun Kyosokyoku (青春狂騒曲)\" by Sambomaster (eps 104-128)","6: \"No Boy, No Cry (ノーボーイ・ノークライ)\" by Stance Punks (eps 129-153)","7: \"Namikaze Satellite (波風サテライト)\" by Snowkel (eps 154-178)","8: \"Re:member\" by FLOW (eps 179-202)","9: \"YURA YURA (ユラユラ)\" by Hearts Grow (eps 203-220)"],"endings":["1: \"Wind\" by Akeboshi (eps 1-25)","2: \"Harmonia\" by Rythem (eps 26-51)","3: \"Viva Rock ~Japanese Side~\" by Orange Range (eps 52-64)","4: \"ALIVE\" by Raiko (eps 65-77)","5: \"Ima made Nando mo\" by the Mass Missile (eps 78-89)","6: \"Ryusei\" by Tia (eps 90-103)","7: \"Mountain A Go Go Too\" by Captain Straydum (eps 104-115)","8: \"Hajimete Kimi to Shabetta\" by GagagaSP (eps 116-128)","9: \"Nakushita Kotoba\" by No Regret Life (eps 129-141)","10: \"Speed\" by Analogfish (eps 142-153)","11: \"Soba ni Iru Kara\" by Amadori (eps 154-165)","12: \"Parade\" by CHABA (eps 166-178)","13: \"Yellow Moon\" by Akeboshi (eps 179-191)","14: \"Pinocchio\" by Ore Ska Band (eps 192-202)","15: \"Scenario\" by SABOTEN (eps 203-220)"]},"external":[{"name":"Official Site","url":"http://www.tv-tokyo.co.jp/anime/naruto2002/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=239"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=1825"},{"name":"Wikipedia","url":"http://en.wikipedia.org/wiki/Naruto"},{"name":"Bangumi","url":"https://bangumi.tv/subject/3425"}],"streaming":[{"name":"Crunchyroll","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJDcnVuY2h5cm9sbCIsIm1vbmV0aXphdGlvblR5cGUiOiJmbGF0cmF0ZSIsInByZXNlbnRhdGlvblR5cGUiOiJoZCIsImN1cnJlbmN5IjoiVVNEIiwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyODMsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MjAzMDUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMjAzMDUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3MyMDQyMiJ9fV19&r=https%3A%2F%2Fcrunchyroll.pxf.io%2Fxk92Nv%3Fu%3Dhttps%253A%252F%252Fwww.crunchyroll.com%252Fwatch%252FGYK5PJV7R%26subId3%3Djustappsvod&uct_country=us"},{"name":"Netflix","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJOZXRmbGl4IiwibW9uZXRpemF0aW9uVHlwZSI6ImZsYXRyYXRlIiwicHJlc2VudGF0aW9uVHlwZSI6InNkIiwiY3VycmVuY3kiOiJVU0QiLCJwYXJ0bmVySWQiOjI0OTAsInByb3ZpZGVySWQiOjgsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MjAzMDUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMjAzMDUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3MyMDQyMiJ9fV19&r=https%3A%2F%2Fwww.netflix.com%2Ftitle%2F70205012&uct_country=us"}],"moreinfo":null}],"missing_ids":[2]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/full"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/full"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/full"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/full"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/full"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/full"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/full"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/full"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/full"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/full"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/full"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/full"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/full"}}}}}}},"operationId":"getAnimeByIdFull"}},"/anime/{id}/recommendations":{"get":{"summary":"Anime Recommendations","tags":["Anime"],"description":"Get anime that users recommend to fans of this anime.\n\n> SFW flags filter out recommendations where a non-sfw ID is included.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning anime recommendations","content":{"application/json":{"schema":{"description":"Successful response returning anime recommendations","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"entry":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}},"url":{"type":"string"},"votes":{"type":"integer"}}}}},"example":{"data":[{"entry":{"mal_id":205,"url":"https://myanimelist.net/anime/205/Samurai_Champloo","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1370/135212.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1370/135212t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1370/135212l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1370/135212.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1370/135212t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1370/135212l.webp"}},"title":"Samurai Champloo"},"url":"https://myanimelist.net/recommendations/anime/1-205","votes":122}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/recommendations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/recommendations"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/recommendations"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/recommendations"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/recommendations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/recommendations"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/recommendations"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/recommendations"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/recommendations"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/recommendations"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/recommendations"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/recommendations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/recommendations"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/recommendations"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/recommendations"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/recommendations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/recommendations"}}}}}}},"operationId":"getAnimeByIdRecommendations"}},"/anime/{id}/characters":{"get":{"summary":"Anime Characters","tags":["Anime"],"description":"Get an anime's characters and their voice actors.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning characters and voice actors","content":{"application/json":{"schema":{"description":"Successful response returning characters and voice actors","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"character":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"name":{"type":"string"}}},"role":{"type":"string","description":"Main or Supporting"},"favorites":{"type":"integer"},"voice_actors":{"type":"array","items":{"type":"object","properties":{"person":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}}},"name":{"type":"string"},"favorites":{"type":"integer"}}},"language":{"type":"string"}}}}}}}},"example":{"data":[{"character":{"mal_id":3,"url":"https://myanimelist.net/character/3/Jet_Black","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/11/253723.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/11/253723t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/11/253723.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/11/253723t.webp"}},"name":"Black, Jet"},"role":"Main","favorites":2322,"voice_actors":[{"person":{"mal_id":357,"url":"https://myanimelist.net/people/357/Unshou_Ishizuka","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/2/17135.jpg"}},"name":"Ishizuka, Unshou","favorites":2253},"language":"Japanese"},{"person":{"mal_id":358,"url":"https://myanimelist.net/people/358/Beau_Billingslea","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/43568.jpg"}},"name":"Billingslea, Beau","favorites":156},"language":"English"}]}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/characters"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/characters"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/characters"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/characters"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/characters"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/characters"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/characters"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/characters"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/characters"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/characters"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/characters"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/characters"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/characters"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/characters"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/characters"}}}}}}},"operationId":"getAnimeByIdCharacters"}},"/anime/{id}/staff":{"get":{"summary":"Anime Staff","tags":["Anime"],"description":"Get the people who worked on an anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning anime staff","content":{"application/json":{"schema":{"description":"Successful response returning anime staff","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"person":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}}},"name":{"type":"string"}}},"positions":{"type":"array","items":{"type":"string"}}}}}},"example":{"data":[{"person":{"mal_id":77978,"url":"https://myanimelist.net/people/77978/Kazuhiko_Ikeguchi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/questionmark_23.gif"}},"name":"Ikeguchi, Kazuhiko"},"positions":["Producer"]},{"person":{"mal_id":6519,"url":"https://myanimelist.net/people/6519/Masahiko_Minami","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/2/75633.jpg"}},"name":"Minami, Masahiko"},"positions":["Producer"]},{"person":{"mal_id":79261,"url":"https://myanimelist.net/people/79261/Tsunetoshi_Koike","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/questionmark_23.gif"}},"name":"Koike, Tsunetoshi"},"positions":["Assistant Producer"]}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/staff"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/staff"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/staff"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/staff"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/staff"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/staff"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/staff"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/staff"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/staff"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/staff"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/staff"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/staff"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/staff"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/staff"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/staff"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/staff"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/staff"}}}}}}},"operationId":"getAnimeByIdStaff"}},"/anime/{id}/episodes":{"get":{"summary":"Anime Episodes","tags":["Anime"],"description":"Get an anime's episodes.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"filler","required":false,"description":"`true` for episodes marked as filler, `false` for episodes not marked as filler.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"recap","required":false,"description":"`true` for episodes marked as recap, `false` for episodes not marked as recap.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["mal_id","aired","score","replies","duration","title","title_japanese","title_romanji"],"default":"mal_id"},"in":"query","name":"order_by","required":false,"description":"Field to sort episodes by. `mal_id` is the episode number. Defaults to `mal_id`.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending. Defaults to `asc`.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"string","enum":["first","last","exclude"],"x-enumDescriptions":{}},"in":"query","name":"nulls","required":false,"description":"Applies to the field you sort by with `order_by`. `first` puts episodes without a value first, `last` puts them last, and `exclude` leaves them out of results and totals. Example: `order_by=score&nulls=exclude` leaves out episodes without a score. Requires `order_by`. When omitted, episodes without a value come first with `sort=asc` and last with `sort=desc`.","examples":{"default":{"value":"first","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning anime episodes","content":{"application/json":{"schema":{"description":"Successful response returning anime episodes","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"title_japanese":{"type":"string","nullable":true},"title_romanji":{"type":"string","nullable":true},"duration":{"type":"integer","nullable":true,"description":"Episode duration in seconds"},"aired":{"type":"string","nullable":true},"score":{"type":"number","nullable":true,"description":"Average vote from 1 to 5; null until someone votes"},"filler":{"type":"boolean"},"recap":{"type":"boolean"},"synopsis":{"type":"string","nullable":true},"replies":{"type":"integer","nullable":true,"description":"Number of forum replies for this episode"},"forum_url":{"type":"string","nullable":true},"images":{"type":"object","description":"Episode thumbnail images","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop/episode/1","title":"Asteroid Blues","title_japanese":"アステロイド・ブルース","title_romanji":"Asteroid Blues","duration":1440,"aired":"1998-10-24T00:00:00+00:00","score":4.32,"filler":false,"recap":false,"synopsis":"In a flashback, Spike Spiegel is shown waiting near a church holding a bouquet of flowers, before leaving as the church bell rings. As he walks away, images of a gunfight he participated in are shown. In the present, Spike, currently a bounty hunter, and his partner Jet Black head to the Tijuana asteroid colony on their ship, the Bebop, to track down a bounty-head named Asimov Solensan. Asimov is wanted for killing members of his own crime syndicate and for stealing a cache of a dangerous combat drug known as Bloody-Eye. On the colony, Asimov and his girlfriend, Katerina, are ambushed at a bar by his former syndicate while attempting to sell a vial of Bloody-Eye, but Asimov manages to fight his way out by using the drug himself. Spike later encounters Katerina and reveals to her that he is a bounty hunter searching for Asimov; Spike is promptly assaulted by Asimov and is nearly killed before Katerina intervenes. In the confusion, Spike is able to steal Asimov's Bloody-Eye vial before the two leave. Spike later confronts Asimov at a staged drug deal with the stolen vial, but Asimov escapes with Katerina in a ship when the two are interrupted by an attack from Asimov's former syndicate. With Spike giving chase in his own ship, Asimov attempts to take another dose of Bloody-Eye, but a horrified Katerina shoots him before he can. As Spike approaches Asimov's ship, it is destroyed by attacking police cruisers, forcing Spike to pull away. The episode ends with Spike and Jet once again traveling through space on the Bebop.\n\n(Source: Wikipedia)","replies":245,"forum_url":"https://myanimelist.net/forum/?topicid=29264","images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire2-tmb/e3a45e86c597fe16f02d29efcadedcd81473268732_large.jpg"}}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/episodes"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/episodes"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/episodes"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/episodes"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/episodes"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/episodes"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/episodes"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/episodes"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/episodes"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/episodes"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/episodes"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/episodes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/episodes"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/episodes"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/episodes"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/episodes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/episodes"}}}}}}},"operationId":"getAnimeByIdEpisodes"}},"/anime/{id}/news":{"get":{"summary":"Anime News","tags":["Anime"],"description":"Get news about an anime.\n\n> SFW flags filter out news articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","comments"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":30,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":30,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning anime news","content":{"application/json":{"schema":{"description":"Successful response returning anime news","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer","description":"MyAnimeList ID"},"url":{"type":"string","description":"MyAnimeList URL"},"title":{"type":"string","description":"Title"},"date":{"type":"string","nullable":true,"description":"Post Date ISO8601"},"author_username":{"type":"string","description":"Author MyAnimeList Username"},"author_url":{"type":"string","description":"Author Profile URL"},"forum_url":{"type":"string","nullable":true,"description":"Forum topic URL"},"images":{"type":"object","description":"Available images","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true,"description":"Image URL JPG"}}}}},"comments":{"type":"integer","description":"Comment count"},"excerpt":{"type":"string","description":"Excerpt"}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":69976885,"url":"https://myanimelist.net/news/69976885","title":"North American Anime & Manga Releases for October","date":"2023-10-10T13:34:00+00:00","author_username":"Aiimee","author_url":"https://myanimelist.net/profile/Aiimee","forum_url":"https://myanimelist.net/forum/?topicid=2122591","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1696941276-e051d08e05dbd146c5da78350b374d01.jpeg?s=3a9e0e230d7161d0a34780a21552f1ec"}},"comments":1,"excerpt":"Here are the North American anime, manga, and light novel releases for October. Week 1: October 3 - 9 Anime Releases Cowboy Bebop Complete Series Blu-ray [SteelBook ..."}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime/1/news?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/news"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/news"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/news"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/news"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/news"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/news"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/news"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/news"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/news"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/news"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/news"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/news"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/news"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/news"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/news"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/news"}}}}}}},"operationId":"getAnimeByIdNews"}},"/anime/{id}/articles":{"get":{"summary":"Anime Articles","tags":["Anime"],"description":"Get featured articles about an anime.\n\n> SFW flags filter out articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":20,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":20,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning anime featured articles","content":{"application/json":{"schema":{"description":"Successful response returning anime featured articles","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"published_at":{"type":"string","nullable":true},"author_username":{"type":"string"},"author_url":{"type":"string","nullable":true},"views":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"excerpt":{"type":"string"}}}}},"example":{"pagination":{"last_visible_page":4,"has_next_page":true},"data":[{"mal_id":2271,"url":"https://myanimelist.net/featured/2271/Good_Vibrations__The_Undervalued_Artistry_of_an_Anime%E2%80%99s_Soundscape","title":"Good Vibrations: The Undervalued Artistry of an Anime’s Soundscape","summary":"Sometimes we get so caught up in the visual spectacle of anime that we completely forget about the equally important sounds that come alongside it.","published_at":"2019-01-15T11:33:00+00:00","author_username":"MAL_Articles","author_url":"https://myanimelist.net/profile/MAL_Articles","views":72553,"tags":["Spoiler"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1547536169-64ce8799049c4605046eae00479abc11.jpeg"}},"excerpt":"Sometimes we get so caught up in the visual spectacle of anime that we completely forget about the equally important sounds that come alongside it."}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime/1/articles?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/articles"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/articles"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/articles"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/articles"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/articles"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/articles"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/articles"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/articles"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/articles"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/articles"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/articles"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/articles"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/articles"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/articles"}}}}}}},"operationId":"getAnimeByIdArticles"}},"/anime/{id}/forum":{"get":{"summary":"Anime Forum Topics","tags":["Anime"],"description":"Get an anime's episode discussion threads. Other forum topics are not available.\n\nTo read a thread's posts, pass its `mal_id` to the official MyAnimeList API.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","enum":["episode"],"default":"episode","x-enumDescriptions":{}},"in":"query","name":"filter","required":false,"description":"Which forum topics to return. Only episode discussion topics are available for now.","examples":{"default":{"value":"episode","x-disabled":true}}},{"schema":{"type":"string","enum":["episode_number","created_on","comment_count","last_post"],"default":"episode_number"},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"episode_number","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Defaults to asc for episode_number, desc for dates/counts.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning anime forum topics","content":{"application/json":{"schema":{"description":"Successful response returning anime forum topics","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer","description":"Forum topic ID"},"url":{"type":"string","description":"Forum thread URL"},"title":{"type":"string","description":"Topic title. Empty for a thread that has no title on MyAnimeList."},"date":{"type":"string","nullable":true,"description":"Creation date ISO8601"},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"comments":{"type":"integer","description":"Number of replies"},"last_comment":{"type":"object","properties":{"url":{"type":"string","nullable":true},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"date":{"type":"string","nullable":true}}}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":29264,"url":"https://myanimelist.net/forum/?topicid=29264","title":"Cowboy Bebop Episode 1 Discussion","date":"2008-06-13T00:00:00+00:00","author_username":"ManU-Alchemist","author_url":"https://myanimelist.net/profile/ManU-Alchemist","comments":243,"last_comment":{"url":"https://myanimelist.net/forum/?topicid=29264&goto=lastpost","author_username":"bl4ckwing","author_url":"https://myanimelist.net/profile/bl4ckwing","date":"2026-10-01T07:16:00+00:00"}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/forum"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/forum"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/forum"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/forum"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/forum"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/forum"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/forum"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/forum"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/forum"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/forum"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/forum"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/forum"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/forum"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/forum"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/forum"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/forum"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/forum"}}}}}}},"operationId":"getAnimeByIdForum"}},"/anime/{id}/episodes/{episode_id}":{"get":{"summary":"Anime Episode by ID","tags":["Anime"],"description":"Get a single episode of an anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"integer","minimum":0,"default":1},"in":"path","name":"episode_id","required":true,"description":"The MAL Episode ID"}],"responses":{"200":{"description":"Successful response returning anime episode detail","content":{"application/json":{"schema":{"description":"Successful response returning anime episode detail","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"title_japanese":{"type":"string","nullable":true},"title_romanji":{"type":"string","nullable":true},"synopsis":{"type":"string","nullable":true},"duration":{"type":"integer","nullable":true},"aired":{"type":"string","nullable":true},"score":{"type":"number","nullable":true,"description":"Average vote from 1 to 5; null until someone votes"},"filler":{"type":"boolean"},"recap":{"type":"boolean"},"replies":{"type":"integer","nullable":true,"description":"Number of forum replies for this episode"},"images":{"type":"object","description":"Episode thumbnail images","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop/episode/1","title":"Asteroid Blues","title_japanese":"アステロイド・ブルース","title_romanji":"Asteroid Blues","synopsis":"In a flashback, Spike Spiegel is shown waiting near a church holding a bouquet of flowers, before leaving as the church bell rings. As he walks away, images of a gunfight he participated in are shown. In the present, Spike, currently a bounty hunter, and his partner Jet Black head to the Tijuana asteroid colony on their ship, the Bebop, to track down a bounty-head named Asimov Solensan. Asimov is wanted for killing members of his own crime syndicate and for stealing a cache of a dangerous combat drug known as Bloody-Eye. On the colony, Asimov and his girlfriend, Katerina, are ambushed at a bar by his former syndicate while attempting to sell a vial of Bloody-Eye, but Asimov manages to fight his way out by using the drug himself. Spike later encounters Katerina and reveals to her that he is a bounty hunter searching for Asimov; Spike is promptly assaulted by Asimov and is nearly killed before Katerina intervenes. In the confusion, Spike is able to steal Asimov's Bloody-Eye vial before the two leave. Spike later confronts Asimov at a staged drug deal with the stolen vial, but Asimov escapes with Katerina in a ship when the two are interrupted by an attack from Asimov's former syndicate. With Spike giving chase in his own ship, Asimov attempts to take another dose of Bloody-Eye, but a horrified Katerina shoots him before he can. As Spike approaches Asimov's ship, it is destroyed by attacking police cruisers, forcing Spike to pull away. The episode ends with Spike and Jet once again traveling through space on the Bebop.\n\n(Source: Wikipedia)","duration":1440,"aired":"1998-10-24T00:00:00+00:00","score":4.32,"filler":false,"recap":false,"replies":245,"images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire2-tmb/e3a45e86c597fe16f02d29efcadedcd81473268732_large.jpg"}}}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/episodes/1"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/episodes/1"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/episodes/1"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/episodes/1"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/episodes/1"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/episodes/1"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/episodes/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/episodes/1"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/episodes/1"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/episodes/1"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/episodes/1"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/episodes/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/episodes/1"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/episodes/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/episodes/1"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/episodes/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/episodes/1"}}}}}}},"operationId":"getAnimeByIdEpisodesByEpisodeId"}},"/anime/{id}/videos":{"get":{"summary":"Anime Videos","tags":["Anime"],"description":"Get available trailers, episode videos and music videos for an anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning anime videos","content":{"application/json":{"schema":{"description":"Successful response returning anime videos","type":"object","properties":{"data":{"type":"object","properties":{"promo":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"trailer":{"type":"object","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}}}}},"episodes":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"title":{"type":"string"},"episode":{"type":"string"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}}}}},"music_videos":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"video":{"type":"object","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"meta":{"type":"object","properties":{"title":{"type":"string","nullable":true},"author":{"type":"string","nullable":true}}}}}}}}},"example":{"data":{"promo":[{"title":"PV 1 English dub version","trailer":{"youtube_id":"gY5nDXOtv_o","url":"https://www.youtube.com/watch?v=gY5nDXOtv_o","embed_url":"https://www.youtube.com/embed/gY5nDXOtv_o?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/default.jpg","small_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26963,"likes":846,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32+00:00","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true}}],"episodes":[{"mal_id":26,"title":"The Real Folk Blues (part 2)","episode":"Episode 26","url":"https://myanimelist.net/anime/1/Cowboy_Bebop/episode/26","images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire1-tmb/191b230426f0b0e6568b4ca6edab47321473136587_large.jpg"}}},{"mal_id":25,"title":"The Real Folk Blues (part 1)","episode":"Episode 25","url":"https://myanimelist.net/anime/1/Cowboy_Bebop/episode/25","images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire2-tmb/7e9bb2a05eb81b701cdf115710d659291473127483_large.jpg"}}}],"music_videos":[]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/videos"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/videos"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/videos"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/videos"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/videos"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/videos"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/videos"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/videos"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/videos"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/videos"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/videos"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/videos"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/videos"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/videos"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/videos"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/videos"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/videos"}}}}}}},"operationId":"getAnimeByIdVideos"}},"/anime/{id}/videos/episodes":{"get":{"summary":"Anime Episode Videos","tags":["Anime"],"description":"Get the episode videos for an anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning anime episode videos","content":{"application/json":{"schema":{"description":"Successful response returning anime episode videos","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"title":{"type":"string"},"episode":{"type":"string"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":26,"title":"The Real Folk Blues (part 2)","episode":"Episode 26","url":"https://myanimelist.net/anime/1/Cowboy_Bebop/episode/26","images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire1-tmb/191b230426f0b0e6568b4ca6edab47321473136587_large.jpg"}}},{"mal_id":25,"title":"The Real Folk Blues (part 1)","episode":"Episode 25","url":"https://myanimelist.net/anime/1/Cowboy_Bebop/episode/25","images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire2-tmb/7e9bb2a05eb81b701cdf115710d659291473127483_large.jpg"}}},{"mal_id":24,"title":"Hard Luck Woman","episode":"Episode 24","url":"https://myanimelist.net/anime/1/Cowboy_Bebop/episode/24","images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire4-tmb/9d2308b354746a3fb84152526b195e1c1473128052_large.jpg"}}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/videos/episodes"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/videos/episodes"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/videos/episodes"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/videos/episodes"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/videos/episodes"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/videos/episodes"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/videos/episodes"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/videos/episodes"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/videos/episodes"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/videos/episodes"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/videos/episodes"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/videos/episodes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/videos/episodes"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/videos/episodes"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/videos/episodes"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/videos/episodes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/videos/episodes"}}}}}}},"operationId":"getAnimeByIdVideosEpisodes"}},"/anime/{id}/pictures":{"get":{"summary":"Anime Pictures","tags":["Anime"],"description":"Get the picture catalogue for an anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning anime pictures","content":{"application/json":{"schema":{"description":"Successful response returning anime pictures","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}},"example":{"data":[{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/7/3791.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/7/3791t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/7/3791l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/7/3791.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/7/3791t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/7/3791l.webp"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/pictures"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/pictures"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/pictures"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/pictures"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/pictures"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/pictures"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/pictures"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/pictures"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/pictures"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/pictures"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/pictures"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/pictures"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/pictures"}}}}}}},"operationId":"getAnimeByIdPictures"}},"/anime/{id}/statistics":{"get":{"summary":"Anime Statistics","tags":["Anime"],"description":"Get the most recent statistics data for an anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning anime statistics","content":{"application/json":{"schema":{"description":"Successful response returning anime statistics","type":"object","properties":{"data":{"type":"object","properties":{"watching":{"type":"integer"},"completed":{"type":"integer"},"on_hold":{"type":"integer"},"dropped":{"type":"integer"},"plan_to_watch":{"type":"integer"},"total":{"type":"integer"},"scores":{"type":"array","items":{"type":"object","properties":{"score":{"type":"integer"},"votes":{"type":"integer"},"percentage":{"type":"number"}}}}}}},"example":{"data":{"watching":192715,"completed":1218358,"on_hold":118378,"dropped":50674,"plan_to_watch":516643,"total":2096768,"scores":[{"score":1,"votes":2499,"percentage":0.2},{"score":2,"votes":1233,"percentage":0.1},{"score":3,"votes":2219,"percentage":0.2},{"score":4,"votes":5587,"percentage":0.5},{"score":5,"votes":15166,"percentage":1.4},{"score":6,"votes":36601,"percentage":3.4},{"score":7,"votes":109229,"percentage":10.1},{"score":8,"votes":229889,"percentage":21.3},{"score":9,"votes":304843,"percentage":28.2},{"score":10,"votes":373843,"percentage":34.6}]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/statistics"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/statistics"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/statistics"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/statistics"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/statistics"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/statistics"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/statistics"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/statistics"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/statistics"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/statistics"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/statistics"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/statistics"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/statistics"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/statistics"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/statistics"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/statistics"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/statistics"}}}}}}},"operationId":"getAnimeByIdStatistics"}},"/anime/{id}/statistics/history":{"get":{"summary":"Anime Statistics History","tags":["Anime"],"description":"Get the day-by-day statistics history for an anime, newest day first.\n\n- `score`, `scored_by`, `rank`, `popularity`, `members` and `favorites`: every day since March 7, 2026.\n- `statistics`: since April 4, 2026, for anime with at least 1,000 members. Recorded every day from 5,000 members and every other day below that. `null` on days without a record.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","format":"date"},"in":"query","name":"start_date","required":false,"description":"Only days on or after this date (UTC). Format: YYYY-MM-DD."},{"schema":{"type":"string","format":"date"},"in":"query","name":"end_date","required":false,"description":"Only days on or before this date (UTC). Format: YYYY-MM-DD."},{"schema":{"type":"string","enum":["desc","asc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"`desc` lists the newest day first, `asc` the oldest day first.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning the anime's statistics history","content":{"application/json":{"schema":{"description":"Successful response returning the anime's statistics history","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Day of the record (UTC), YYYY-MM-DD"},"score":{"type":"number","nullable":true,"description":"Score that day. Null while MyAnimeList shows no score."},"scored_by":{"type":"integer","nullable":true,"description":"Number of users who scored it that day"},"rank":{"type":"integer","nullable":true,"description":"Rank that day. Null while it is unranked."},"popularity":{"type":"integer","nullable":true,"description":"Popularity rank that day"},"members":{"type":"integer","nullable":true,"description":"Members that day"},"favorites":{"type":"integer","nullable":true,"description":"Favorites that day"},"statistics":{"type":"object","nullable":true,"description":"The statistics page of that day, in the shape of /anime/{id}/statistics. Null on a day without a read.","properties":{"watching":{"type":"integer"},"completed":{"type":"integer"},"on_hold":{"type":"integer"},"dropped":{"type":"integer"},"plan_to_watch":{"type":"integer"},"total":{"type":"integer"},"scores":{"type":"array","items":{"type":"object","properties":{"score":{"type":"integer"},"votes":{"type":"integer"},"percentage":{"type":"number"}}}}}}}}}},"example":{"pagination":{"last_visible_page":11,"has_next_page":true},"data":[{"date":"2026-11-13","score":8.75,"scored_by":1081172,"rank":51,"popularity":41,"members":2097397,"favorites":91279,"statistics":null}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime/1/statistics/history?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/statistics/history"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/statistics/history"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/statistics/history"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/statistics/history"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/statistics/history"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/statistics/history"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/statistics/history"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/statistics/history"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/statistics/history"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/statistics/history"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/statistics/history"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/statistics/history"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/statistics/history"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/statistics/history"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/statistics/history"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/statistics/history"}}}}}}},"operationId":"getAnimeByIdStatisticsHistory"}},"/anime/{id}/moreinfo":{"get":{"summary":"Anime More Info","tags":["Anime"],"description":"Get the more info section of an anime.\n\nAlso included in every `/anime/{id}/full` response.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning more info","content":{"application/json":{"schema":{"description":"Successful response returning more info","type":"object","properties":{"data":{"type":"object","properties":{"moreinfo":{"type":"string","nullable":true}}}},"example":{"data":{"moreinfo":"Suggested Order of Viewing\n\n1. TV Series (26 episodes)\n\n2. Movie (takes place between episodes 22 and 23)"}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/moreinfo"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/moreinfo"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/moreinfo"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/moreinfo"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/moreinfo"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/moreinfo"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/moreinfo"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/moreinfo"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/moreinfo"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/moreinfo"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/moreinfo"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/moreinfo"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/moreinfo"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/moreinfo"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/moreinfo"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/moreinfo"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/moreinfo"}}}}}}},"operationId":"getAnimeByIdMoreinfo"}},"/anime/{id}/relations":{"get":{"summary":"Anime Relations","tags":["Anime"],"description":"Get the relations of an anime, such as sequels and adaptations.\n\nAlso included in every `/anime/{id}/full` response.\n\n> SFW flags filter out non-sfw relations.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning anime relations","content":{"application/json":{"schema":{"description":"Successful response returning anime relations","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"media_type":{"type":"string","nullable":true},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}}}}}}},"example":{"data":[{"relation":"Adaptation","entry":[{"mal_id":174,"type":"manga","name":"Shooting Star Bebop: Cowboy Bebop","url":"https://myanimelist.net/manga/174/Shooting_Star_Bebop__Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.webp"}}},{"mal_id":173,"type":"manga","name":"Cowboy Bebop","url":"https://myanimelist.net/manga/173/Cowboy_Bebop","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.webp"}}}]}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/relations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/relations"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/relations"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/relations"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/relations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/relations"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/relations"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/relations"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/relations"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/relations"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/relations"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/relations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/relations"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/relations"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/relations"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/relations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/relations"}}}}}}},"operationId":"getAnimeByIdRelations"}},"/anime/{id}/themes":{"get":{"summary":"Anime Themes","tags":["Anime"],"description":"Get the opening and ending songs of an anime.\n\nAlso included in every `/anime/{id}/full` response.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning anime themes","content":{"application/json":{"schema":{"description":"Successful response returning anime themes","type":"object","properties":{"data":{"type":"object","properties":{"openings":{"type":"array","items":{"type":"string"}},"endings":{"type":"array","items":{"type":"string"}}}}},"example":{"data":{"openings":["\"Tank!\" by The Seatbelts (eps 1-25)"],"endings":["1: \"The Real Folk Blues\" by The Seatbelts feat. Mai Yamane (eps 1-12, 14-25)","2: \"Space Lion\" by The Seatbelts (eps 13)","3: \"Blue\" by The Seatbelts feat. Mai Yamane (eps 26)"]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/themes"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/themes"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/themes"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/themes"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/themes"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/themes"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/themes"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/themes"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/themes"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/themes"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/themes"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/themes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/themes"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/themes"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/themes"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/themes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/themes"}}}}}}},"operationId":"getAnimeByIdThemes"}},"/anime/{id}/external":{"get":{"summary":"Anime External Links","tags":["Anime"],"description":"Get the links to other sites about an anime.\n\nAlso included in every `/anime/{id}/full` response.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning external links","content":{"application/json":{"schema":{"description":"Successful response returning external links","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}}},"example":{"data":[{"name":"Official Site","url":"http://www.cowboy-bebop.net/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=23"},{"name":"ANN","url":"https://www.animenewsnetwork.com/encyclopedia/anime.php?id=13"}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/external"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/external"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/external"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/external"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/external"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/external"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/external"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/external"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/external"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/external"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/external"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/external"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/external"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/external"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/external"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/external"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/external"}}}}}}},"operationId":"getAnimeByIdExternal"}},"/anime/{id}/streaming":{"get":{"summary":"Anime Streaming Links","tags":["Anime"],"description":"Get the streaming services listed for an anime.\n\nAlso included in every `/anime/{id}/full` response.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning streaming links","content":{"application/json":{"schema":{"description":"Successful response returning streaming links","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}}},"example":{"data":[{"name":"Crunchyroll","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJDcnVuY2h5cm9sbCIsIm1vbmV0aXphdGlvblR5cGUiOiJmbGF0cmF0ZSIsInByZXNlbnRhdGlvblR5cGUiOiJoZCIsImN1cnJlbmN5IjoiVVNEIiwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyODMsImNsaWNrb3V0VHlwZSI6Imp3LWNvbnRlbnQtcGFydG5lci1leHBvcnQtYXBpIn19LHsic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL3RpdGxlX2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMCIsImRhdGEiOnsidGl0bGVJZCI6MzQ0MzUsIm9iamVjdFR5cGUiOiJzaG93IiwiandFbnRpdHlJZCI6InRzMzQ0MzUiLCJzZWFzb25OdW1iZXIiOjEsImp3UmF3RW50aXR5SWQiOiJ0c3M1MTkyMyJ9fV19&r=https%3A%2F%2Fcrunchyroll.pxf.io%2Fxk92Nv%3Fu%3Dhttps%253A%252F%252Fwww.crunchyroll.com%252Fwatch%252FG7PU4VJEJ%26subId3%3Djustappsvod&uct_country=us"},{"name":"Apple TV Store","url":"https://click.justwatch.com/a?cx=eyJzY2hlbWEiOiJpZ2x1OmNvbS5zbm93cGxvd2FuYWx5dGljcy5zbm93cGxvdy9jb250ZXh0cy9qc29uc2NoZW1hLzEtMC0wIiwiZGF0YSI6W3sic2NoZW1hIjoiaWdsdTpjb20uanVzdHdhdGNoL2NsaWNrb3V0X2NvbnRleHQvanNvbnNjaGVtYS8xLTMtMiIsImRhdGEiOnsicHJvdmlkZXIiOiJBcHBsZSBUViBTdG9yZSIsIm1vbmV0aXphdGlvblR5cGUiOiJidXkiLCJwcmVzZW50YXRpb25UeXBlIjoiaGQiLCJjdXJyZW5jeSI6IlVTRCIsInByaWNlIjo3Ny43NCwicGFydG5lcklkIjoyNDkwLCJwcm92aWRlcklkIjoyLCJjbGlja291dFR5cGUiOiJqdy1jb250ZW50LXBhcnRuZXItZXhwb3J0LWFwaSJ9fSx7InNjaGVtYSI6ImlnbHU6Y29tLmp1c3R3YXRjaC90aXRsZV9jb250ZXh0L2pzb25zY2hlbWEvMS0zLTAiLCJkYXRhIjp7InRpdGxlSWQiOjM0NDM1LCJvYmplY3RUeXBlIjoic2hvdyIsImp3RW50aXR5SWQiOiJ0czM0NDM1Iiwic2Vhc29uTnVtYmVyIjoxLCJqd1Jhd0VudGl0eUlkIjoidHNzNTE5MjMifX1dfQ&r=https%3A%2F%2Ftv.apple.com%2Fus%2Fepisode%2Fasteroid-blues%2Fumc.cmc.4w0mtpme6lxpjcpvuvrvs0krg%3Fat%3D1000l3V2%26ct%3Dapp_tv%26itscg%3D30200%26itsct%3Djustwatch_tv%26playableId%3Dtvs.sbd.9001%253A944008283%26showId%3Dumc.cmc.p83rtqx9v5ptlevdexc1v6b4&uct_country=us"}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/streaming"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/streaming"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/streaming"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/streaming"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/streaming"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/streaming"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/streaming"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/streaming"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/streaming"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/streaming"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/streaming"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/streaming"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/streaming"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/streaming"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/streaming"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/streaming"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/streaming"}}}}}}},"operationId":"getAnimeByIdStreaming"}},"/anime/{id}/reviews":{"get":{"summary":"Anime Reviews","tags":["Anime"],"description":"Get user reviews of an anime.\n\nSpoiler and preliminary reviews are hidden unless you ask for them.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"],"x-enumDescriptions":{}},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment","examples":{"default":{"value":"recommended","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive).  \nPreliminary reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive).  \nSpoiler reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"most_helpful","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Order of the reviews: newest first, oldest first or most helpful first.","examples":{"default":{"value":"most_helpful","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning anime reviews","content":{"application/json":{"schema":{"description":"Successful response returning anime reviews","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","properties":{"overall":{"type":"integer"},"nice":{"type":"integer"},"love_it":{"type":"integer"},"funny":{"type":"integer"},"confusing":{"type":"integer"},"informative":{"type":"integer"},"well_written":{"type":"integer"},"creative":{"type":"integer"}}},"date":{"type":"string","nullable":true},"review":{"type":"string","nullable":true},"score":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"is_spoiler":{"type":"boolean"},"is_preliminary":{"type":"boolean"},"episodes_watched":{"type":"integer","nullable":true},"user":{"type":"object","properties":{"username":{"type":"string"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}}}}}},"example":{"pagination":{"last_visible_page":31,"has_next_page":true},"data":[{"mal_id":7406,"url":"https://myanimelist.net/reviews.php?id=7406","type":"anime","reactions":{"overall":2283,"nice":2225,"love_it":25,"funny":7,"confusing":2,"informative":7,"well_written":15,"creative":2},"date":"2008-08-24T12:46:00+00:00","review":"People who know me know that I'm not a fan of episodic anime series unless they're either one season (12-14 episodes) long or a slice of life series. Why? They have a tendency to get boring, or repetitive. But all rules and preferences have exceptions. You know what? Cowboy Bebop is that exception.\n\nThe story is set in a space western setting - a genre and setting I'm loving more and more for each show I watch that falls under the genre. We follow two bounty hunters, Spike and Jet, who own a ship called the Bebop. They travel the Solar system, chasing wanted criminals to earn money. Along the way, they also pick up two women; the debt-laden Faye Valentine and the playful kid and computer genius Edward (yes, Ed’s a girl). \n\nEach episode brings about a new bounty which they chase after, and while that doesn't sound too exciting to watch 26 episodes in a row, you'll end up loving the show. All the different events makes for a certain degree of unpredictability, and you'll sometimes wonder how things will end. However, that alone is not enough to give the story the rating I've given it. So why have I given that rating? Let's continue...\n\nOne of the things that elevate the show a bit above the rest is the manner in which the main cast's pasts are explored. It's not like one flashback episode and you understand everything about how they are today. In one episode you might get one piece, and then the next one in another episode, and it's not until the final three episodes of the show that everything falls in place. This way of executing it makes you want to watch another episode, so that you can find out more about the characters (some may say that this falls in under \"Character\", but the manner in which the pasts are explored are more \"Story\" than \"Character\", IMO). Now, that's so far a 9 for the story. Why did it deserve a 10?\n\nThe answer is easy: the way they executed many scenes in the show. The contrasts which you get to see between, music, the setting of scenes and what's really happening just gives the story that extra edge deserving of a perfect score.\n\nThe characters are all really good and interesting fellows. Though they every now and then reminded me of characters from other shows, they preserved that originality which gave a feel that they were, if not completely, then at least a little bit more real than most characters out there. The way their pasts intertwine with the future and how everything ends with them confronting and settling open ends from their pasts is also something that's impressive to watch. I don't really have anything more to say than \"perfect\".\n\nThe animation is, for a 90s anime, stunningly good. The detail put into backgrounds and surroundings is really good, and I also love how good lighting effects and shading are at times. All of Ed’s strange movements are animated really nicely too. If there's something negative, it's the somewhat dull coloring (compared to today's standards), as well as poor effects when traveling in hyperspace.\n\nThe soundtrack is also astounding! The music used for the show is so incredibly varied, and while keeping mostly to the more jazzy tunes, the soundtrack visits so many genres that it's hard to not like at least a few pieces. What I also loved is the way the music was used not only as a medium to go with and amplify the mood, but also as a contrast to what's happening in several scenes. All in all, it's really amazing. Don't have anything to say against voice acting and other sound effects either.\n\nAll in all Cowboy Bebop is an anime that’s in the top tier on the greatness scale, and a show I believe every anime fan should give a try.\n\nTo 'Not Helpful' voters (and you 'Helpful' voters too): Feedback greatly appreciated =)","score":10,"tags":["Recommended"],"is_spoiler":false,"is_preliminary":false,"episodes_watched":null,"user":{"username":"TheLlama","url":"https://myanimelist.net/profile/TheLlama","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/35fb5f95-6a86-498b-93a5-fcff7f402bc2_225w?s=0a831e2782dd9f3d15a987a6c3b6a9db"},"webp":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/35fb5f95-6a86-498b-93a5-fcff7f402bc2_225w?s=0a831e2782dd9f3d15a987a6c3b6a9db"}}}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/anime/abc/reviews"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/reviews"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/reviews"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/reviews"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/reviews"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/reviews"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/reviews"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/reviews"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/reviews"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/reviews"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/reviews"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/reviews"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/reviews"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/reviews"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/reviews"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/reviews"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/reviews"}}}}}}},"operationId":"getAnimeByIdReviews"}},"/anime/{id}/stacks":{"get":{"summary":"Anime Stacks","tags":["Anime"],"description":"Get interest stacks that include a specific anime ID.\n\nInterest stacks are themed lists made by users.\n\n> SFW flags filter out interest stacks where non-sfw items are included.","parameters":[{"schema":{"type":"integer"},"example":1,"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Returns stacks whose title or description contains it, ignoring case."},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler stacks (true = include, false = exclude, only = exclusive).  \nSpoiler stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"challenges","required":false,"description":"Filter challenge stacks (true = include, false = exclude, only = exclusive).  \nChallenge stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"official","required":false,"description":"Filter official stacks (true = include, false = exclude, only = exclusive).  \nOfficial stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["created_at","restack_count"],"default":"created_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"created_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning Interest Stacks.","content":{"application/json":{"schema":{"description":"Successful response returning Interest Stacks.","type":"object","required":["pagination","data"],"properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","required":["mal_id","url","stack_type","title","description","author_username","author_url","is_official","is_challenge","is_spoiler","restack_count","entry_count","created_at"],"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"stack_type":{"type":"string","enum":["anime","manga"]},"title":{"type":"string"},"description":{"type":"string"},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"is_official":{"type":"boolean"},"is_challenge":{"type":"boolean"},"is_spoiler":{"type":"boolean"},"restack_count":{"type":"integer"},"entry_count":{"type":"integer"},"created_at":{"type":"string","format":"date-time","nullable":true}}}}},"example":{"pagination":{"last_visible_page":28,"has_next_page":true,"current_page":1,"items":{"count":25,"total":688,"per_page":25}},"data":[{"mal_id":93518,"url":"https://myanimelist.net/stacks/93518","stack_type":"anime","title":"Influential Anime","description":"An alternate list to the link below of shows no later than 2016.\n\nhttps://x.com/nexusasian/status/2117936875444822515","author_username":"legioatwill","author_url":"https://myanimelist.net/profile/legioatwill","is_official":false,"is_challenge":false,"is_spoiler":false,"restack_count":5,"entry_count":20,"created_at":"2026-11-06T05:31:00+00:00"}]}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime/1/stacks?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/1/stacks"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/1/stacks"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/1/stacks"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Anime with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/anime/0/stacks"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/1/stacks"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/1/stacks"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/1/stacks"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/1/stacks"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/1/stacks"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/1/stacks"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/1/stacks"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/1/stacks"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/1/stacks"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/1/stacks"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/1/stacks"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/1/stacks"}}}}}}},"operationId":"getAnimeByIdStacks"}},"/anime/unapproved":{"get":{"summary":"Anime Unapproved","tags":["Anime"],"description":"Get anime that are waiting for MyAnimeList approval.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Matches any part of the title, English title, Japanese title or a synonym, ignoring case. Without `order_by`, the closest title comes first."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","title"],"x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. Without it, results are sorted by `mal_id`, or closest title first when `q` is set.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning unapproved anime entries","content":{"application/json":{"schema":{"description":"Successful response returning unapproved anime entries","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":9,"has_next_page":true,"current_page":1,"items":{"count":25,"total":220,"per_page":25}},"data":[{"mal_id":55173,"url":"https://myanimelist.net/anime/55173/Bad_Boy_nomad_Remix","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1438/139829.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1438/139829t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1438/139829l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1438/139829.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1438/139829t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1438/139829l.webp"}},"trailer":{"youtube_id":null,"url":null,"embed_url":null,"images":{"image_url":null,"small_image_url":null,"medium_image_url":null,"large_image_url":null,"maximum_image_url":null},"title":null,"views":null,"likes":null,"dislikes":null,"comment_count":null,"published_at":null,"duration":null,"privacy_status":null,"region_restriction":null,"embeddable":null},"approved":false,"titles":[{"type":"Default","title":"Bad Boy (nomad Remix)"},{"type":"English","title":"Bad Boy (nomad Remix)"}],"title":"Bad Boy (nomad Remix)","title_english":"Bad Boy (nomad Remix)","title_japanese":null,"title_synonyms":[],"type":"Music","source":"Original","episodes":1,"status":"Finished Airing","airing":false,"aired":{"from":"2021-11-01T00:00:00+00:00","to":null,"prop":{"from":{"day":1,"month":11,"year":2021},"to":{"day":null,"month":null,"year":null}},"string":"Nov 1, 2021"},"duration":"3 min","rating":"G - All Ages","score":null,"scored_by":0,"rank":0,"popularity":0,"members":0,"favorites":0,"synopsis":"Visualizer for Red Velvet's Bad Boy (nomad Remix).","background":null,"season":null,"year":null,"broadcast":{"day":null,"time":null,"timezone":null,"string":null},"producers":[],"licensors":[],"studios":[],"genres":[],"explicit_genres":[],"themes":[{"mal_id":19,"type":"anime","name":"Music","url":"https://myanimelist.net/anime/genre/19/Music"}],"demographics":[]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime/unapproved?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/unapproved"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/unapproved"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/unapproved"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/unapproved"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/unapproved"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/unapproved"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/unapproved"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/unapproved"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/unapproved"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/unapproved"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/unapproved"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/unapproved"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/unapproved"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/unapproved"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/unapproved"}}}}}}},"operationId":"getAnimeUnapproved"}},"/anime/denied":{"get":{"summary":"Anime Denied","tags":["Anime"],"description":"Get anime that MyAnimeList rejected.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Matches any part of the title, English title, Japanese title or a synonym, ignoring case. Without `order_by`, the closest title comes first."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","title"],"x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. Without it, results are sorted by `mal_id`, or closest title first when `q` is set.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning denied anime entries","content":{"application/json":{"schema":{"description":"Successful response returning denied anime entries","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":203,"has_next_page":true,"current_page":1,"items":{"count":25,"total":5060,"per_page":25}},"data":[{"mal_id":39461,"url":"https://myanimelist.net/anime/39461/Watashi_ni_Tenshi_ga_Maiorita_Yokoku","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1820/99566.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1820/99566t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1820/99566l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1820/99566.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1820/99566t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1820/99566l.webp"}},"trailer":{"youtube_id":null,"url":null,"embed_url":null,"images":{"image_url":null,"small_image_url":null,"medium_image_url":null,"large_image_url":null,"maximum_image_url":null},"title":null,"views":null,"likes":null,"dislikes":null,"comment_count":null,"published_at":null,"duration":null,"privacy_status":null,"region_restriction":null,"embeddable":null},"approved":false,"titles":[{"type":"Default","title":"Watashi ni Tenshi ga Maiorita! Yokoku"},{"type":"Japanese","title":"私に天使が舞い降りた！予告"}],"title":"Watashi ni Tenshi ga Maiorita! Yokoku","title_english":null,"title_japanese":"私に天使が舞い降りた！予告","title_synonyms":[],"type":"Special","source":null,"episodes":null,"status":"Currently Airing","airing":true,"aired":{"from":"2019-01-11T00:00:00+00:00","to":null,"prop":{"from":{"day":11,"month":1,"year":2019},"to":{"day":null,"month":null,"year":null}},"string":null},"duration":"15 sec","rating":null,"score":null,"scored_by":0,"rank":0,"popularity":0,"members":0,"favorites":null,"synopsis":"Web-exclusive next episode previews for Watashi ni Tenshi ga Maiorita! released on Kadokawa anime official YouTube channel for a limited time.","background":null,"season":null,"year":null,"broadcast":{"day":null,"time":null,"timezone":null,"string":null},"producers":[],"licensors":[],"studios":[],"genres":[{"mal_id":4,"type":"anime","name":"Comedy","url":"https://myanimelist.net/anime/genre/4/Comedy"},{"mal_id":26,"type":"anime","name":"Girls Love","url":"https://myanimelist.net/anime/genre/26/Girls_Love"},{"mal_id":36,"type":"anime","name":"Slice of Life","url":"https://myanimelist.net/anime/genre/36/Slice_of_Life"}],"explicit_genres":[],"themes":[],"demographics":[]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime/denied?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/denied"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/denied"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/denied"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/denied"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/denied"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/denied"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/denied"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/denied"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/denied"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/denied"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/denied"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/denied"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/denied"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/denied"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/denied"}}}}}}},"operationId":"getAnimeDenied"}},"/anime/deleted":{"get":{"summary":"Anime Deleted","tags":["Anime"],"description":"Get anime that were removed from MyAnimeList.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Matches any part of the title, English title, Japanese title or a synonym, ignoring case. Without `order_by`, the closest title comes first."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","title","score","members"]},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. Without it, results are sorted by `mal_id`, or closest title first when `q` is set.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning deleted anime entries","content":{"application/json":{"schema":{"description":"Successful response returning deleted anime entries","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":15,"has_next_page":true,"current_page":1,"items":{"count":25,"total":359,"per_page":25}},"data":[{"mal_id":2632,"url":"https://myanimelist.net/anime/2632/Doraemon__Time_Machine_de_Oshougatsu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1709/92174.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1709/92174t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1709/92174l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1709/92174.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1709/92174t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1709/92174l.webp"}},"trailer":{"youtube_id":null,"url":null,"embed_url":null,"images":{"image_url":null,"small_image_url":null,"medium_image_url":null,"large_image_url":null,"maximum_image_url":null},"title":null,"views":null,"likes":null,"dislikes":null,"comment_count":null,"published_at":null,"duration":null,"privacy_status":null,"region_restriction":null,"embeddable":null},"approved":true,"titles":[{"type":"Default","title":"Doraemon: Time Machine de Oshougatsu"},{"type":"Japanese","title":"ドラえもん　タイムマシンでお正月"},{"type":"Synonym","title":"Doraemon's Time Capsule for 2001"}],"title":"Doraemon: Time Machine de Oshougatsu","title_english":null,"title_japanese":"ドラえもん　タイムマシンでお正月","title_synonyms":["Doraemon's Time Capsule for 2001"],"type":"Special","source":null,"episodes":1,"status":"Finished Airing","airing":false,"aired":{"from":"1980-01-03T00:00:00+00:00","to":null,"prop":{"from":{"day":3,"month":1,"year":1980},"to":{"day":null,"month":null,"year":null}},"string":null},"duration":"22 min","rating":"PG - Children","score":6.62,"scored_by":735,"rank":6515,"popularity":12325,"members":1947,"favorites":null,"synopsis":null,"background":null,"season":"winter","year":1980,"broadcast":{"day":null,"time":null,"timezone":null,"string":null},"producers":[],"licensors":[],"studios":[],"genres":[{"mal_id":2,"type":"anime","name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure"},{"mal_id":4,"type":"anime","name":"Comedy","url":"https://myanimelist.net/anime/genre/4/Comedy"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[],"demographics":[{"mal_id":15,"type":"anime","name":"Kids","url":"https://myanimelist.net/anime/genre/15/Kids"},{"mal_id":27,"type":"anime","name":"Shounen","url":"https://myanimelist.net/anime/genre/27/Shounen"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/anime/deleted?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/deleted"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/deleted"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/deleted"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/deleted"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/deleted"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/deleted"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/deleted"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/deleted"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/deleted"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/deleted"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/deleted"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/deleted"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/deleted"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/deleted"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/deleted"}}}}}}},"operationId":"getAnimeDeleted"}},"/anime/ids":{"get":{"summary":"Get All Anime IDs","tags":["Anime"],"description":"Get the ID of every anime in one request.\n\n> SFW flags filter out IDs belonging to non-sfw entries.","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `tv`: TV series\n- `movie`: Movie\n- `ova`: OVA (original video animation)\n- `special`: Special\n- `ona`: ONA (original net animation, e.g. web releases)\n- `music`: Music video\n- `cm`: CM (commercial)\n- `pv`: PV (promotional video)\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","complete","upcoming"],"x-enumDescriptions":{}},"in":"query","name":"status","required":false,"description":"Filter by airing status.\n\n- `airing`: Currently Airing\n- `complete`: Finished Airing\n- `upcoming`: Not yet aired","examples":{"default":{"value":"airing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"string"},"in":"query","name":"updated_at","required":false,"description":"Filter entries updated on or after this ISO 8601 date or date-time (such as `2026-03-02` or `2026-03-02T00:00:00Z`) or Unix timestamp. A timestamp below 10000000000 is read as seconds, a larger one as milliseconds. This is as updated on site, not API. May or may not be fully accurate."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"array","items":{"type":"string","enum":["title","type"],"x-enumDescriptions":{}}},"in":"query","name":"include","required":false,"description":"Fetch additional data. Comma-separated fields to include per entry.","style":"form","explode":false}],"security":[{"serverKey":[]}],"responses":{"200":{"description":"Successful response returning all unique anime IDs","content":{"application/json":{"schema":{"description":"Successful response returning all unique anime IDs","type":"object","properties":{"total":{"type":"integer"},"data":{"type":"array","items":{"oneOf":[{"type":"integer"},{"type":"object","properties":{"mal_id":{"type":"integer"},"title":{"type":"string"},"type":{"type":"string","nullable":true}}}]}}},"example":{"total":30819,"data":[1,5,6,7,8,15,16,17,18,19,20,21,22,23,24,25,26,27]},"required":["data","total"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/anime/ids"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/anime/ids"}},"missingServerKey":{"summary":"Restricted endpoint without a Server Key","value":{"status":401,"type":"UnauthorizedException","message":"Server Key is required for this endpoint.","error":"Send a valid Server Key in the X-Server-Key header.","path":"/v1/anime/ids"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/anime/ids"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/anime/ids"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/anime/ids"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/anime/ids"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/anime/ids"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/anime/ids"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/anime/ids"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/anime/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/anime/ids"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/anime/ids"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/anime/ids"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/anime/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/anime/ids"}}}}}}},"operationId":"getAnimeIds"}},"/manga":{"get":{"summary":"Manga Search","tags":["Manga"],"description":"Search and browse the full manga catalogue with advanced filters and sorting.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Title search query"},{"schema":{"type":"string","minLength":1,"maxLength":1},"in":"query","name":"letter","required":false,"description":"Only manga whose title starts with this letter. One letter, in any case. Cannot be combined with `q`."},{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `manga`: Manga\n- `novel`: Novel\n- `lightnovel`: Light Novel\n- `oneshot`: One-shot\n- `doujin`: Doujinshi (self-published)\n- `manhwa`: Manhwa (Korean comics)\n- `manhua`: Manhua (Chinese comics)","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type_exclude","required":false,"description":"Exclude entries with any selected type. Multiple values exclude any selected type.\n\n- `manga`: Manga\n- `novel`: Novel\n- `lightnovel`: Light Novel\n- `oneshot`: One-shot\n- `doujin`: Doujinshi (self-published)\n- `manhwa`: Manhwa (Korean comics)\n- `manhua`: Manhua (Chinese comics)","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["publishing","complete","upcoming","discontinued","hiatus"]}},"in":"query","name":"status","required":false,"description":"Only entries with any selected status. Multiple values match any selected status.\n\n- `publishing`: Publishing\n- `complete`: Finished\n- `upcoming`: Not yet published\n- `discontinued`: Discontinued\n- `hiatus`: On Hiatus","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["publishing","complete","upcoming","discontinued","hiatus"]}},"in":"query","name":"status_exclude","required":false,"description":"Exclude entries with any selected status. Multiple values exclude any selected status.\n\n- `publishing`: Publishing\n- `complete`: Finished\n- `upcoming`: Not yet published\n- `discontinued`: Discontinued\n- `hiatus`: On Hiatus","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated IDs. Entries must have all of them.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated IDs. Entries with any of them are left out.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"magazines","required":false,"description":"Comma-separated IDs. Entries must have at least one of them.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"magazines_exclude","required":false,"description":"Exclude entries recorded under any selected magazine or serialization-platform MAL ID.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"authors","required":false,"description":"Filter by credited author or artist MAL person IDs. Multiple IDs match any selected author.","style":"form","explode":false},{"schema":{"type":"string","enum":["story","art"],"x-enumDescriptions":{}},"in":"query","name":"author_role","required":false,"description":"Only count the authors in `authors` when MAL credits them with this role: `story` for the writing, `art` for the drawing. An author credited with Story & Art matches both. Requires `authors`.","examples":{"default":{"value":"story","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"solo_author","required":false,"description":"Filter by who made the manga: `true` for manga written and drawn by one person, `false` for manga whose writing and art are credited to two or more people. Manga that MAL lists without both a writer and an artist match neither.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"authors_exclude","required":false,"description":"Exclude manga by any of these author MAL person IDs, in any role. Uses the same IDs as authors.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"characters","required":false,"description":"Filter by recorded MAL character IDs. Multiple IDs match any selected character.","style":"form","explode":false},{"schema":{"type":"string","enum":["main","supporting"],"x-enumDescriptions":{}},"in":"query","name":"character_role","required":false,"description":"Only count the characters in `characters` when MAL lists them in this role. Requires `characters`.\n\n- `main`: Main character\n- `supporting`: Supporting character","examples":{"default":{"value":"main","x-disabled":true}}},{"schema":{"type":"integer","format":"int32","minimum":1},"in":"query","name":"min_id","required":false,"description":"Minimum MAL ID, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":1},"in":"query","name":"max_id","required":false,"description":"Maximum MAL ID, inclusive."},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"ids","required":false,"description":"Only search within the entries whose MAL IDs you choose, such as the ones on a user's list. All other filters and sorting still apply. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"score","required":false,"description":"Only entries with exactly this score, e.g. `8.2` for 8.20. Cannot be combined with `min_score` or `max_score`; use those for a range."},{"schema":{"type":"number","minimum":0,"maximum":10},"in":"query","name":"min_score","required":false,"description":"Only entries with this score or higher."},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"max_score","required":false,"description":"Only entries with this score or lower."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_scored_by","required":false,"description":"Minimum number of scoring users, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":0},"in":"query","name":"max_scored_by","required":false,"description":"Maximum number of scoring users, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":0},"in":"query","name":"min_reviews","required":false,"description":"Minimum number of available reviews, inclusive, including spoiler and preliminary reviews. This is not a complete MyAnimeList-wide total. 0 applies no limit."},{"schema":{"type":"integer","format":"int32","minimum":0},"in":"query","name":"max_reviews","required":false,"description":"Maximum number of available reviews, inclusive, including spoiler and preliminary reviews. This is not a complete MyAnimeList-wide total. 0 returns entries with no stored reviews."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_chapters","required":false,"description":"Minimum known positive chapter count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_chapters","required":false,"description":"Maximum known positive chapter count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_volumes","required":false,"description":"Minimum known positive volume count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_volumes","required":false,"description":"Maximum known positive volume count, inclusive."},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","minimum":1,"maximum":9999}},"in":"query","name":"year","required":false,"description":"Calendar year of the aired or published start date. Cannot be combined with min_year or max_year. For anime, this can differ from MAL's season year. Multiple years match any selected year.","style":"form","explode":false},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"min_year","required":false,"description":"Minimum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"max_year","required":false,"description":"Maximum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"string","format":"date"},"in":"query","name":"start_date","required":false,"description":"Only manga that started publishing on or after this date. Format: YYYY-MM-DD. A year (2020) or a year and month (2020-05) is also accepted."},{"schema":{"type":"string","format":"date"},"in":"query","name":"end_date","required":false,"description":"Only manga that finished publishing on or before this date. Format: YYYY-MM-DD. A year (2020) or a year and month (2020-05) is also accepted and covers up to its last day. Manga with no end date, such as one-shots published on a single day, are left out, as on Jikan."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["false","true","only",""],"default":"false"},"in":"query","name":"unapproved","required":false,"description":"When true, also includes unapproved entries.","examples":{"default":{"value":"false","x-disabled":true}}},{"schema":{"type":"string","enum":["mal_id","title","title_english","title_japanese","start_date","end_date","chapters","volumes","score","scored_by","rank","popularity","members","favorites"]},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.\n\n- `mal_id`: MAL ID\n- `title`: Title\n- `title_english`: English title\n- `title_japanese`: Japanese title\n- `start_date`: Start date\n- `end_date`: End date\n- `chapters`: Number of chapters\n- `volumes`: Number of volumes\n- `score`: Score\n- `scored_by`: Number of users who scored it\n- `rank`: Rank\n- `popularity`: Popularity rank\n- `members`: Members\n- `favorites`: Favorites","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending. Only applies together with `order_by`.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"string","enum":["first","last","exclude"],"x-enumDescriptions":{}},"in":"query","name":"nulls","required":false,"description":"Applies to the field you sort by with `order_by`. `first` puts entries without a value first, `last` puts them last, and `exclude` leaves them out of results and totals. Example: `order_by=end_date&nulls=exclude` leaves out entries without an end date. Requires `order_by`. When omitted, entries without a value come first with sort=asc and last with sort=desc. With `order_by=rank` or `order_by=popularity`, they come last either way, and a rank or popularity of 0 counts as no value.","examples":{"default":{"value":"first","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning matching manga","content":{"application/json":{"schema":{"description":"Successful response returning matching manga","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}}},"example":{"pagination":{"last_visible_page":3445,"has_next_page":true,"current_page":1,"items":{"count":25,"total":86125,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/manga/1/Monster","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Monster"},{"type":"Japanese","title":"MONSTER"},{"type":"English","title":"Monster"}],"title":"Monster","title_english":"Monster","title_japanese":"MONSTER","title_synonyms":[],"type":"Manga","chapters":162,"volumes":18,"status":"Finished","publishing":false,"published":{"from":"1994-12-05T00:00:00+00:00","to":"2001-12-20T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":1994},"to":{"day":20,"month":12,"year":2001}},"string":"Dec 5, 1994 to Dec 20, 2001"},"score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"synopsis":"Kenzou Tenma, a renowned Japanese neurosurgeon working in post-war Germany, faces a difficult choice: to operate on Johan Liebert, an orphan boy on the verge of death, or on the mayor of Düsseldorf. In the end, Tenma decides to gamble his reputation by saving Johan, effectively leaving the mayor for dead.\n\nAs a consequence of his actions, hospital director Heinemann strips Tenma of his position, and Heinemann's daughter Eva breaks off their engagement. Disgraced and shunned by his colleagues, Tenma loses all hope of a successful career—that is, until the mysterious killing of Heinemann gives him another chance.\n\nNine years later, Tenma is the head of the surgical department and close to becoming the director himself. Although all seems well for him at first, he soon becomes entangled in a chain of gruesome murders that have taken place throughout Germany. The culprit is a monster—the same one that Tenma saved on that fateful day nine years ago.\n\n[Written by MAL Rewrite]","background":"Monster won the Grand Prize at the third Tezuka Osamu Cultural Prize in 1999, as well as the 46th Shogakukan Manga Award in the General category in 2000. The series was published in English by VIZ Media under its VIZ Signature imprint from February 21, 2006, to December 16, 2008, and again in 2-in-1 omnibuses under the subtitle The Perfect Edition. The manga was also published in Brazilian Portuguese by Panini Comics from June 2012 to April 2015; in Polish by Hanami from March 28, 2014, to February 1, 2017; in Spain by Planeta Cómic from June 16, 2009, to September 21, 2010; in Argentina by Editorial Ivrea and LARP Editores; and in Turkey by Marmara Çizgi.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":1,"type":"manga","name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"manga","name":"Adult Cast","url":"https://myanimelist.net/manga/genre/50/Adult_Cast"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]}]},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":3445,"has_next_page":true,"current_page":1,"items":{"count":25,"total":86125,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/manga/1/Monster","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Monster"},{"type":"Japanese","title":"MONSTER"},{"type":"English","title":"Monster"}],"title":"Monster","title_english":"Monster","title_japanese":"MONSTER","title_synonyms":[],"type":"Manga","chapters":162,"volumes":18,"status":"Finished","publishing":false,"published":{"from":"1994-12-05T00:00:00+00:00","to":"2001-12-20T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":1994},"to":{"day":20,"month":12,"year":2001}},"string":"Dec 5, 1994 to Dec 20, 2001"},"score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"synopsis":"Kenzou Tenma, a renowned Japanese neurosurgeon working in post-war Germany, faces a difficult choice: to operate on Johan Liebert, an orphan boy on the verge of death, or on the mayor of Düsseldorf. In the end, Tenma decides to gamble his reputation by saving Johan, effectively leaving the mayor for dead.\n\nAs a consequence of his actions, hospital director Heinemann strips Tenma of his position, and Heinemann's daughter Eva breaks off their engagement. Disgraced and shunned by his colleagues, Tenma loses all hope of a successful career—that is, until the mysterious killing of Heinemann gives him another chance.\n\nNine years later, Tenma is the head of the surgical department and close to becoming the director himself. Although all seems well for him at first, he soon becomes entangled in a chain of gruesome murders that have taken place throughout Germany. The culprit is a monster—the same one that Tenma saved on that fateful day nine years ago.\n\n[Written by MAL Rewrite]","background":"Monster won the Grand Prize at the third Tezuka Osamu Cultural Prize in 1999, as well as the 46th Shogakukan Manga Award in the General category in 2000. The series was published in English by VIZ Media under its VIZ Signature imprint from February 21, 2006, to December 16, 2008, and again in 2-in-1 omnibuses under the subtitle The Perfect Edition. The manga was also published in Brazilian Portuguese by Panini Comics from June 2012 to April 2015; in Polish by Hanami from March 28, 2014, to February 1, 2017; in Spain by Planeta Cómic from June 16, 2009, to September 21, 2010; in Argentina by Editorial Ivrea and LARP Editores; and in Turkey by Marmara Çizgi.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":1,"type":"manga","name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"manga","name":"Adult Cast","url":"https://myanimelist.net/manga/genre/50/Adult_Cast"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]}]}},"noMatches":{"summary":"No matches","value":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":0,"total":0,"per_page":25}},"data":[]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga"}}}}}}},"operationId":"getManga"}},"/manga/{id}":{"get":{"summary":"Manga Details","tags":["Manga"],"description":"Get a manga by its MyAnimeList ID.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga details","content":{"application/json":{"schema":{"description":"Successful response returning manga details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/manga/1/Monster","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Monster"},{"type":"Japanese","title":"MONSTER"},{"type":"English","title":"Monster"}],"title":"Monster","title_english":"Monster","title_japanese":"MONSTER","title_synonyms":[],"type":"Manga","chapters":162,"volumes":18,"status":"Finished","publishing":false,"published":{"from":"1994-12-05T00:00:00+00:00","to":"2001-12-20T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":1994},"to":{"day":20,"month":12,"year":2001}},"string":"Dec 5, 1994 to Dec 20, 2001"},"score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"synopsis":"Kenzou Tenma, a renowned Japanese neurosurgeon working in post-war Germany, faces a difficult choice: to operate on Johan Liebert, an orphan boy on the verge of death, or on the mayor of Düsseldorf. In the end, Tenma decides to gamble his reputation by saving Johan, effectively leaving the mayor for dead.\n\nAs a consequence of his actions, hospital director Heinemann strips Tenma of his position, and Heinemann's daughter Eva breaks off their engagement. Disgraced and shunned by his colleagues, Tenma loses all hope of a successful career—that is, until the mysterious killing of Heinemann gives him another chance.\n\nNine years later, Tenma is the head of the surgical department and close to becoming the director himself. Although all seems well for him at first, he soon becomes entangled in a chain of gruesome murders that have taken place throughout Germany. The culprit is a monster—the same one that Tenma saved on that fateful day nine years ago.\n\n[Written by MAL Rewrite]","background":"Monster won the Grand Prize at the third Tezuka Osamu Cultural Prize in 1999, as well as the 46th Shogakukan Manga Award in the General category in 2000. The series was published in English by VIZ Media under its VIZ Signature imprint from February 21, 2006, to December 16, 2008, and again in 2-in-1 omnibuses under the subtitle The Perfect Edition. The manga was also published in Brazilian Portuguese by Panini Comics from June 2012 to April 2015; in Polish by Hanami from March 28, 2014, to February 1, 2017; in Spain by Planeta Cómic from June 16, 2009, to September 21, 2010; in Argentina by Editorial Ivrea and LARP Editores; and in Turkey by Marmara Çizgi.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":1,"type":"manga","name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"manga","name":"Adult Cast","url":"https://myanimelist.net/manga/genre/50/Adult_Cast"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1"}}}}}}},"operationId":"getMangaById"}},"/manga/{id}/full":{"get":{"summary":"Manga Full Details","tags":["Manga"],"description":"Get a manga with all its extra details in one request.\n\nYou can request multiple IDs to be included in the same response using the `ids` parameter.\n\n> SFW flags filter out non-sfw relations.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"ids","required":false,"description":"Additional MAL IDs to include in this response. Accepts comma-separated or repeated values. Maximum 25 unique IDs in total, including the ID in the path. Duplicates are removed, preserving the requested order. When omitted, returns the existing single-entry response. All IDs use the same mode and SFW options."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["denied","deleted"],"x-enumDescriptions":{}},"in":"query","name":"mode","required":false,"description":"Choose which archive to search: denied or deleted. Searches only the selected archive and returns 404 if the ID is absent, even if it exists in the regular approved or unapproved catalogue. When omitted, searches the regular catalogue.","examples":{"default":{"value":"denied","x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning full manga details","content":{"application/json":{"schema":{"description":"Successful response returning full manga details","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."},"relations":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"media_type":{"type":"string","nullable":true},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}}}}}},"external":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"moreinfo":{"type":"string","nullable":true}}},"included":{"type":"array","description":"Full details for additional IDs, in the requested order. Present only when ids is supplied.","items":{"type":"object","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."},"relations":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"media_type":{"type":"string","nullable":true},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}}}}}},"external":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"moreinfo":{"type":"string","nullable":true}}}},"missing_ids":{"type":"array","description":"Additional IDs not found in the selected catalogue or archive, in the requested order. Present only when ids is supplied. A missing path ID returns 404. A temporary failure returns 503 instead of listing an ID here.","items":{"type":"integer"}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/manga/1/Monster","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Monster"},{"type":"Japanese","title":"MONSTER"},{"type":"English","title":"Monster"}],"title":"Monster","title_english":"Monster","title_japanese":"MONSTER","title_synonyms":[],"type":"Manga","chapters":162,"volumes":18,"status":"Finished","publishing":false,"published":{"from":"1994-12-05T00:00:00+00:00","to":"2001-12-20T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":1994},"to":{"day":20,"month":12,"year":2001}},"string":"Dec 5, 1994 to Dec 20, 2001"},"score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"synopsis":"Kenzou Tenma, a renowned Japanese neurosurgeon working in post-war Germany, faces a difficult choice: to operate on Johan Liebert, an orphan boy on the verge of death, or on the mayor of Düsseldorf. In the end, Tenma decides to gamble his reputation by saving Johan, effectively leaving the mayor for dead.\n\nAs a consequence of his actions, hospital director Heinemann strips Tenma of his position, and Heinemann's daughter Eva breaks off their engagement. Disgraced and shunned by his colleagues, Tenma loses all hope of a successful career—that is, until the mysterious killing of Heinemann gives him another chance.\n\nNine years later, Tenma is the head of the surgical department and close to becoming the director himself. Although all seems well for him at first, he soon becomes entangled in a chain of gruesome murders that have taken place throughout Germany. The culprit is a monster—the same one that Tenma saved on that fateful day nine years ago.\n\n[Written by MAL Rewrite]","background":"Monster won the Grand Prize at the third Tezuka Osamu Cultural Prize in 1999, as well as the 46th Shogakukan Manga Award in the General category in 2000. The series was published in English by VIZ Media under its VIZ Signature imprint from February 21, 2006, to December 16, 2008, and again in 2-in-1 omnibuses under the subtitle The Perfect Edition. The manga was also published in Brazilian Portuguese by Panini Comics from June 2012 to April 2015; in Polish by Hanami from March 28, 2014, to February 1, 2017; in Spain by Planeta Cómic from June 16, 2009, to September 21, 2010; in Argentina by Editorial Ivrea and LARP Editores; and in Turkey by Marmara Çizgi.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":1,"type":"manga","name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"manga","name":"Adult Cast","url":"https://myanimelist.net/manga/genre/50/Adult_Cast"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}],"relations":[{"relation":"Adaptation","entry":[{"mal_id":19,"type":"anime","name":"Monster","url":"https://myanimelist.net/anime/19/Monster","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":10968,"type":"manga","name":"Mou Hitotsu no Monster: The Investigative Report","url":"https://myanimelist.net/manga/10968/Mou_Hitotsu_no_Monster__The_Investigative_Report","media_type":"Light Novel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.webp"}}}]}],"external":[{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Monster_(manga)"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/MONSTER_(%E6%BC%AB%E7%94%BB)"}],"moreinfo":null}},"required":["data"]},"examples":{"default":{"summary":"Single","value":{"data":{"mal_id":1,"url":"https://myanimelist.net/manga/1/Monster","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Monster"},{"type":"Japanese","title":"MONSTER"},{"type":"English","title":"Monster"}],"title":"Monster","title_english":"Monster","title_japanese":"MONSTER","title_synonyms":[],"type":"Manga","chapters":162,"volumes":18,"status":"Finished","publishing":false,"published":{"from":"1994-12-05T00:00:00+00:00","to":"2001-12-20T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":1994},"to":{"day":20,"month":12,"year":2001}},"string":"Dec 5, 1994 to Dec 20, 2001"},"score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"synopsis":"Kenzou Tenma, a renowned Japanese neurosurgeon working in post-war Germany, faces a difficult choice: to operate on Johan Liebert, an orphan boy on the verge of death, or on the mayor of Düsseldorf. In the end, Tenma decides to gamble his reputation by saving Johan, effectively leaving the mayor for dead.\n\nAs a consequence of his actions, hospital director Heinemann strips Tenma of his position, and Heinemann's daughter Eva breaks off their engagement. Disgraced and shunned by his colleagues, Tenma loses all hope of a successful career—that is, until the mysterious killing of Heinemann gives him another chance.\n\nNine years later, Tenma is the head of the surgical department and close to becoming the director himself. Although all seems well for him at first, he soon becomes entangled in a chain of gruesome murders that have taken place throughout Germany. The culprit is a monster—the same one that Tenma saved on that fateful day nine years ago.\n\n[Written by MAL Rewrite]","background":"Monster won the Grand Prize at the third Tezuka Osamu Cultural Prize in 1999, as well as the 46th Shogakukan Manga Award in the General category in 2000. The series was published in English by VIZ Media under its VIZ Signature imprint from February 21, 2006, to December 16, 2008, and again in 2-in-1 omnibuses under the subtitle The Perfect Edition. The manga was also published in Brazilian Portuguese by Panini Comics from June 2012 to April 2015; in Polish by Hanami from March 28, 2014, to February 1, 2017; in Spain by Planeta Cómic from June 16, 2009, to September 21, 2010; in Argentina by Editorial Ivrea and LARP Editores; and in Turkey by Marmara Çizgi.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":1,"type":"manga","name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"manga","name":"Adult Cast","url":"https://myanimelist.net/manga/genre/50/Adult_Cast"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}],"relations":[{"relation":"Adaptation","entry":[{"mal_id":19,"type":"anime","name":"Monster","url":"https://myanimelist.net/anime/19/Monster","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":10968,"type":"manga","name":"Mou Hitotsu no Monster: The Investigative Report","url":"https://myanimelist.net/manga/10968/Mou_Hitotsu_no_Monster__The_Investigative_Report","media_type":"Light Novel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.webp"}}}]}],"external":[{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Monster_(manga)"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/MONSTER_(%E6%BC%AB%E7%94%BB)"}],"moreinfo":null}}},"batch":{"summary":"Batch","value":{"data":{"mal_id":1,"url":"https://myanimelist.net/manga/1/Monster","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Monster"},{"type":"Japanese","title":"MONSTER"},{"type":"English","title":"Monster"}],"title":"Monster","title_english":"Monster","title_japanese":"MONSTER","title_synonyms":[],"type":"Manga","chapters":162,"volumes":18,"status":"Finished","publishing":false,"published":{"from":"1994-12-05T00:00:00+00:00","to":"2001-12-20T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":1994},"to":{"day":20,"month":12,"year":2001}},"string":"Dec 5, 1994 to Dec 20, 2001"},"score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"synopsis":"Kenzou Tenma, a renowned Japanese neurosurgeon working in post-war Germany, faces a difficult choice: to operate on Johan Liebert, an orphan boy on the verge of death, or on the mayor of Düsseldorf. In the end, Tenma decides to gamble his reputation by saving Johan, effectively leaving the mayor for dead.\n\nAs a consequence of his actions, hospital director Heinemann strips Tenma of his position, and Heinemann's daughter Eva breaks off their engagement. Disgraced and shunned by his colleagues, Tenma loses all hope of a successful career—that is, until the mysterious killing of Heinemann gives him another chance.\n\nNine years later, Tenma is the head of the surgical department and close to becoming the director himself. Although all seems well for him at first, he soon becomes entangled in a chain of gruesome murders that have taken place throughout Germany. The culprit is a monster—the same one that Tenma saved on that fateful day nine years ago.\n\n[Written by MAL Rewrite]","background":"Monster won the Grand Prize at the third Tezuka Osamu Cultural Prize in 1999, as well as the 46th Shogakukan Manga Award in the General category in 2000. The series was published in English by VIZ Media under its VIZ Signature imprint from February 21, 2006, to December 16, 2008, and again in 2-in-1 omnibuses under the subtitle The Perfect Edition. The manga was also published in Brazilian Portuguese by Panini Comics from June 2012 to April 2015; in Polish by Hanami from March 28, 2014, to February 1, 2017; in Spain by Planeta Cómic from June 16, 2009, to September 21, 2010; in Argentina by Editorial Ivrea and LARP Editores; and in Turkey by Marmara Çizgi.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":1,"type":"manga","name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"manga","name":"Adult Cast","url":"https://myanimelist.net/manga/genre/50/Adult_Cast"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}],"relations":[{"relation":"Adaptation","entry":[{"mal_id":19,"type":"anime","name":"Monster","url":"https://myanimelist.net/anime/19/Monster","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":10968,"type":"manga","name":"Mou Hitotsu no Monster: The Investigative Report","url":"https://myanimelist.net/manga/10968/Mou_Hitotsu_no_Monster__The_Investigative_Report","media_type":"Light Novel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.webp"}}}]}],"external":[{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Monster_(manga)"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/MONSTER_(%E6%BC%AB%E7%94%BB)"}],"moreinfo":null},"included":[{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"},{"type":"English","title":"Berserk"},{"type":"Synonym","title":"Berserk: The Prototype"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":["Berserk: The Prototype"],"type":"Manga","chapters":null,"volumes":null,"status":"Publishing","publishing":true,"published":{"from":"1989-08-25T00:00:00+00:00","to":null,"prop":{"from":{"day":25,"month":8,"year":1989},"to":{"day":null,"month":null,"year":null}},"string":"Aug 25, 1989 to ?"},"score":9.46,"scored_by":407412,"rank":1,"popularity":1,"members":814539,"favorites":140014,"synopsis":"Guts, a former mercenary now known as the Black Swordsman, is out for revenge. After a tumultuous childhood, he finally finds someone he respects and believes he can trust, only to have everything fall apart when this person takes away everything important to Guts for the purpose of fulfilling his own desires. Now marked for death, Guts becomes condemned to a fate in which he is relentlessly pursued by demonic beings.\n\nSetting out on a dreadful quest riddled with misfortune, Guts, armed with a massive sword and monstrous strength, will let nothing stop him, not even death itself, until he is finally able to take the head of the one who stripped him—and his loved one—of their humanity.\n\n[Written by MAL Rewrite]\n\nIncluded one-shot:\nVolume 14: Berserk: The Prototype","background":"Berserk won the Excellence Award at the sixth Tezuka Osamu Cultural Prize in 2002. As of August 2025, over 70 million copies of the manga are in circulation. The series has been published in English by Dark Horse Comics since November 4, 2003. It has also been released in Argentina, Brazil, Czech Republic, France, Germany, Greece, Hong Kong, Italy, México, Poland, South Korea, Spain, Taiwan, Thailand, and Turkey. In May 2021, the author Kentaro Miura suddenly died at the age of 54. Chapter 364 of Berserk was published posthumously on September 10, 2021. Miura would often share details about the series' story with his childhood friend and fellow mangaka Kouji Mori. The series resumed on June 24, 2022, with Studio Gaga handling the art and Kouji Mori's supervision.","authors":[{"mal_id":1868,"type":"people","name":"Miura, Kentarou","url":"https://myanimelist.net/people/1868/Kentarou_Miura","role":"Story & Art"},{"mal_id":49592,"type":"people","name":"Studio Gaga","url":"https://myanimelist.net/people/49592/Studio_Gaga","role":"Art"}],"serializations":[{"mal_id":2,"type":"manga","name":"Young Animal","url":"https://myanimelist.net/manga/magazine/2/Young_Animal"}],"genres":[{"mal_id":1,"type":"manga","name":"Action","url":"https://myanimelist.net/manga/genre/1/Action"},{"mal_id":2,"type":"manga","name":"Adventure","url":"https://myanimelist.net/manga/genre/2/Adventure"},{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":10,"type":"manga","name":"Fantasy","url":"https://myanimelist.net/manga/genre/10/Fantasy"},{"mal_id":14,"type":"manga","name":"Horror","url":"https://myanimelist.net/manga/genre/14/Horror"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"},{"mal_id":38,"type":"manga","name":"Military","url":"https://myanimelist.net/manga/genre/38/Military"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}],"relations":[{"relation":"Adaptation","entry":[{"mal_id":33,"type":"anime","name":"Kenpuu Denki Berserk","url":"https://myanimelist.net/anime/33/Kenpuu_Denki_Berserk","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1384/119988.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1384/119988.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988l.webp"}}},{"mal_id":10218,"type":"anime","name":"Berserk: Ougon Jidai-hen I - Haou no Tamago","url":"https://myanimelist.net/anime/10218/Berserk__Ougon_Jidai-hen_I_-_Haou_no_Tamago","media_type":"Movie","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/12/62179.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/12/62179t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/12/62179l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/12/62179.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/12/62179t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/12/62179l.webp"}}}]},{"relation":"Spin-Off","entry":[{"mal_id":106677,"type":"manga","name":"Shousetsu Berserk: Enryuu no Kishi","url":"https://myanimelist.net/manga/106677/Shousetsu_Berserk__Enryuu_no_Kishi","media_type":"Light Novel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/266240.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/266240t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/266240l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/266240.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/266240t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/266240l.webp"}}}]}],"external":[{"name":"Official Site","url":"https://magazine.younganimal.com/title/?id=32"},{"name":"Wikipedia","url":"http://ja.wikipedia.org/wiki/%E3%83%99%E3%83%AB%E3%82%BB%E3%83%AB%E3%82%AF_%28%E6%BC%AB%E7%94%BB%29"},{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Berserk_(manga)"}],"moreinfo":"Berserk: The Prototype (1988)\n\nBefore Berserk became what it is now, Miura Kentaro created a prototype chapter for the manga. The year was 1988 and he was still a student at that time. This is the prototype manga on which the Berserk manga is based.\n\n\n\nChapter count includes 380 chapters as of volume 41."},{"mal_id":3,"url":"https://myanimelist.net/manga/3/20th_Century_Boys","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/260006.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/260006t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/260006l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/260006.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/260006t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/260006l.webp"}},"approved":true,"titles":[{"type":"Default","title":"20th Century Boys"},{"type":"Japanese","title":"20世紀少年"},{"type":"English","title":"20th Century Boys"},{"type":"Synonym","title":"20 Seiki Shounen"},{"type":"Synonym","title":"Nijuu Seiki Shounen"},{"type":"Synonym","title":"Nijuusseiki Shounen"},{"type":"Synonym","title":"20thCB"}],"title":"20th Century Boys","title_english":"20th Century Boys","title_japanese":"20世紀少年","title_synonyms":["20 Seiki Shounen","Nijuu Seiki Shounen","Nijuusseiki Shounen","20thCB"],"type":"Manga","chapters":249,"volumes":22,"status":"Finished","publishing":false,"published":{"from":"1999-09-27T00:00:00+00:00","to":"2006-04-24T00:00:00+00:00","prop":{"from":{"day":27,"month":9,"year":1999},"to":{"day":24,"month":4,"year":2006}},"string":"Sep 27, 1999 to Apr 24, 2006"},"score":8.93,"scored_by":112523,"rank":21,"popularity":24,"members":320087,"favorites":23620,"synopsis":"As the 20th century approaches its end, people all over the world are anxious that the world is changing. And probably not for the better.\n\nKenji Endou is a normal convenience store manager who is just trying to get by. But when he learns that one of his old friends going by the name \"Donkey\" has suddenly committed suicide and that a new cult led by a figure known as \"Friend\" is becoming more notorious, Kenji starts to feel that something is not right. With a few key clues left behind by his deceased friend, Kenji realizes that this cult is much more than he ever thought it would be—not only is this mysterious organization directly targeting him and his childhood friends, but the whole world also faces a grave danger that only the friends have the key to stop.\n\nKenji's simple life of barely making ends meet is flipped upside down when he reunites with his childhood friends, and together they must figure out the truth of how their past is connected to the cult, as the turn of the century could mean the possible end of the world.\n\n[Written by MAL Rewrite]","background":"20th Century Boys won the Kodansha Manga Award in the general category in 2001, an Excellence Prize at the Japan Media Arts Festival in 2002, and the Shogakukan Manga Award in the general category in 2003. The series' combined storyline won the Grand Prize at the 37th Japan Cartoonist Awards on May 9, 2008. VIZ Media published the series in English under the VIZ Signature imprint from February 17, 2009, to September 18, 2012. VIZ Media licensed the series in 2005; however, at Urasawa's request, it was rescheduled for release after Monster finished its English publication due to a change in art style over time. It was also published as 2-in-1 omnibus volumes from September 18, 2018, to March 16, 2021. The series has also been published in Brazilian Portuguese by Panini Comics/Planet Manga since September 2012. The series was adapted into a trilogy of live-action films which released in Japan between August 30, 2008, and August 29, 2009.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":3,"type":"manga","name":"Big Comic Spirits","url":"https://myanimelist.net/manga/magazine/3/Big_Comic_Spirits"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"},{"mal_id":24,"type":"manga","name":"Sci-Fi","url":"https://myanimelist.net/manga/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":13,"type":"manga","name":"Historical","url":"https://myanimelist.net/manga/genre/13/Historical"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}],"relations":[{"relation":"Sequel","entry":[{"mal_id":743,"type":"manga","name":"21st Century Boys","url":"https://myanimelist.net/manga/743/21st_Century_Boys","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/2/263856.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/2/263856t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/2/263856l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/2/263856.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/2/263856t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/2/263856l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":90757,"type":"manga","name":"20 Seiki Shounen Tanteidan","url":"https://myanimelist.net/manga/90757/20_Seiki_Shounen_Tanteidan","media_type":"Manga","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/159298.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/159298t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/159298l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/159298.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/159298t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/159298l.webp"}}}]}],"external":[{"name":"Wikipedia","url":"http://ja.wikipedia.org/wiki/20%E4%B8%96%E7%B4%80%E5%B0%91%E5%B9%B4"},{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/20th_Century_Boys"}],"moreinfo":null}],"missing_ids":[]}},"batchMissing":{"summary":"Batch with a missing ID","value":{"data":{"mal_id":1,"url":"https://myanimelist.net/manga/1/Monster","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Monster"},{"type":"Japanese","title":"MONSTER"},{"type":"English","title":"Monster"}],"title":"Monster","title_english":"Monster","title_japanese":"MONSTER","title_synonyms":[],"type":"Manga","chapters":162,"volumes":18,"status":"Finished","publishing":false,"published":{"from":"1994-12-05T00:00:00+00:00","to":"2001-12-20T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":1994},"to":{"day":20,"month":12,"year":2001}},"string":"Dec 5, 1994 to Dec 20, 2001"},"score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"synopsis":"Kenzou Tenma, a renowned Japanese neurosurgeon working in post-war Germany, faces a difficult choice: to operate on Johan Liebert, an orphan boy on the verge of death, or on the mayor of Düsseldorf. In the end, Tenma decides to gamble his reputation by saving Johan, effectively leaving the mayor for dead.\n\nAs a consequence of his actions, hospital director Heinemann strips Tenma of his position, and Heinemann's daughter Eva breaks off their engagement. Disgraced and shunned by his colleagues, Tenma loses all hope of a successful career—that is, until the mysterious killing of Heinemann gives him another chance.\n\nNine years later, Tenma is the head of the surgical department and close to becoming the director himself. Although all seems well for him at first, he soon becomes entangled in a chain of gruesome murders that have taken place throughout Germany. The culprit is a monster—the same one that Tenma saved on that fateful day nine years ago.\n\n[Written by MAL Rewrite]","background":"Monster won the Grand Prize at the third Tezuka Osamu Cultural Prize in 1999, as well as the 46th Shogakukan Manga Award in the General category in 2000. The series was published in English by VIZ Media under its VIZ Signature imprint from February 21, 2006, to December 16, 2008, and again in 2-in-1 omnibuses under the subtitle The Perfect Edition. The manga was also published in Brazilian Portuguese by Panini Comics from June 2012 to April 2015; in Polish by Hanami from March 28, 2014, to February 1, 2017; in Spain by Planeta Cómic from June 16, 2009, to September 21, 2010; in Argentina by Editorial Ivrea and LARP Editores; and in Turkey by Marmara Çizgi.","authors":[{"mal_id":1867,"type":"people","name":"Urasawa, Naoki","url":"https://myanimelist.net/people/1867/Naoki_Urasawa","role":"Story & Art"}],"serializations":[{"mal_id":1,"type":"manga","name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original"}],"genres":[{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":7,"type":"manga","name":"Mystery","url":"https://myanimelist.net/manga/genre/7/Mystery"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"manga","name":"Adult Cast","url":"https://myanimelist.net/manga/genre/50/Adult_Cast"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}],"relations":[{"relation":"Adaptation","entry":[{"mal_id":19,"type":"anime","name":"Monster","url":"https://myanimelist.net/anime/19/Monster","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.webp"}}}]},{"relation":"Side Story","entry":[{"mal_id":10968,"type":"manga","name":"Mou Hitotsu no Monster: The Investigative Report","url":"https://myanimelist.net/manga/10968/Mou_Hitotsu_no_Monster__The_Investigative_Report","media_type":"Light Novel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/14776.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/14776t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/14776l.webp"}}}]}],"external":[{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Monster_(manga)"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/MONSTER_(%E6%BC%AB%E7%94%BB)"}],"moreinfo":null},"included":[{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"},{"type":"English","title":"Berserk"},{"type":"Synonym","title":"Berserk: The Prototype"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":["Berserk: The Prototype"],"type":"Manga","chapters":null,"volumes":null,"status":"Publishing","publishing":true,"published":{"from":"1989-08-25T00:00:00+00:00","to":null,"prop":{"from":{"day":25,"month":8,"year":1989},"to":{"day":null,"month":null,"year":null}},"string":"Aug 25, 1989 to ?"},"score":9.46,"scored_by":407412,"rank":1,"popularity":1,"members":814539,"favorites":140014,"synopsis":"Guts, a former mercenary now known as the Black Swordsman, is out for revenge. After a tumultuous childhood, he finally finds someone he respects and believes he can trust, only to have everything fall apart when this person takes away everything important to Guts for the purpose of fulfilling his own desires. Now marked for death, Guts becomes condemned to a fate in which he is relentlessly pursued by demonic beings.\n\nSetting out on a dreadful quest riddled with misfortune, Guts, armed with a massive sword and monstrous strength, will let nothing stop him, not even death itself, until he is finally able to take the head of the one who stripped him—and his loved one—of their humanity.\n\n[Written by MAL Rewrite]\n\nIncluded one-shot:\nVolume 14: Berserk: The Prototype","background":"Berserk won the Excellence Award at the sixth Tezuka Osamu Cultural Prize in 2002. As of August 2025, over 70 million copies of the manga are in circulation. The series has been published in English by Dark Horse Comics since November 4, 2003. It has also been released in Argentina, Brazil, Czech Republic, France, Germany, Greece, Hong Kong, Italy, México, Poland, South Korea, Spain, Taiwan, Thailand, and Turkey. In May 2021, the author Kentaro Miura suddenly died at the age of 54. Chapter 364 of Berserk was published posthumously on September 10, 2021. Miura would often share details about the series' story with his childhood friend and fellow mangaka Kouji Mori. The series resumed on June 24, 2022, with Studio Gaga handling the art and Kouji Mori's supervision.","authors":[{"mal_id":1868,"type":"people","name":"Miura, Kentarou","url":"https://myanimelist.net/people/1868/Kentarou_Miura","role":"Story & Art"},{"mal_id":49592,"type":"people","name":"Studio Gaga","url":"https://myanimelist.net/people/49592/Studio_Gaga","role":"Art"}],"serializations":[{"mal_id":2,"type":"manga","name":"Young Animal","url":"https://myanimelist.net/manga/magazine/2/Young_Animal"}],"genres":[{"mal_id":1,"type":"manga","name":"Action","url":"https://myanimelist.net/manga/genre/1/Action"},{"mal_id":2,"type":"manga","name":"Adventure","url":"https://myanimelist.net/manga/genre/2/Adventure"},{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":10,"type":"manga","name":"Fantasy","url":"https://myanimelist.net/manga/genre/10/Fantasy"},{"mal_id":14,"type":"manga","name":"Horror","url":"https://myanimelist.net/manga/genre/14/Horror"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"},{"mal_id":38,"type":"manga","name":"Military","url":"https://myanimelist.net/manga/genre/38/Military"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}],"relations":[{"relation":"Adaptation","entry":[{"mal_id":33,"type":"anime","name":"Kenpuu Denki Berserk","url":"https://myanimelist.net/anime/33/Kenpuu_Denki_Berserk","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1384/119988.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1384/119988.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1384/119988l.webp"}}},{"mal_id":10218,"type":"anime","name":"Berserk: Ougon Jidai-hen I - Haou no Tamago","url":"https://myanimelist.net/anime/10218/Berserk__Ougon_Jidai-hen_I_-_Haou_no_Tamago","media_type":"Movie","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/12/62179.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/12/62179t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/12/62179l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/12/62179.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/12/62179t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/12/62179l.webp"}}}]},{"relation":"Spin-Off","entry":[{"mal_id":106677,"type":"manga","name":"Shousetsu Berserk: Enryuu no Kishi","url":"https://myanimelist.net/manga/106677/Shousetsu_Berserk__Enryuu_no_Kishi","media_type":"Light Novel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/266240.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/266240t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/266240l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/266240.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/266240t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/266240l.webp"}}}]}],"external":[{"name":"Official Site","url":"https://magazine.younganimal.com/title/?id=32"},{"name":"Wikipedia","url":"http://ja.wikipedia.org/wiki/%E3%83%99%E3%83%AB%E3%82%BB%E3%83%AB%E3%82%AF_%28%E6%BC%AB%E7%94%BB%29"},{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Berserk_(manga)"}],"moreinfo":"Berserk: The Prototype (1988)\n\nBefore Berserk became what it is now, Miura Kentaro created a prototype chapter for the manga. The year was 1988 and he was still a student at that time. This is the prototype manga on which the Berserk manga is based.\n\n\n\nChapter count includes 380 chapters as of volume 41."}],"missing_ids":[5]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/full"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/full"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/full"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/full"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/full"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/full"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/full"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/full"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/full"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/full"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/full"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/full"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/full"}}}}}}},"operationId":"getMangaByIdFull"}},"/manga/{id}/recommendations":{"get":{"summary":"Manga Recommendations","tags":["Manga"],"description":"Get manga that users recommend to fans of this manga.\n\n> SFW flags filter out recommendations where a non-sfw ID is included.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning manga recommendations","content":{"application/json":{"schema":{"description":"Successful response returning manga recommendations","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"entry":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}},"url":{"type":"string"},"votes":{"type":"integer"}}}}},"example":{"data":[{"entry":{"mal_id":3,"url":"https://myanimelist.net/manga/3/20th_Century_Boys","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/260006.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/260006t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/260006l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/260006.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/260006t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/260006l.webp"}},"title":"20th Century Boys"},"url":"https://myanimelist.net/recommendations/manga/1-3","votes":13}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/recommendations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/recommendations"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/recommendations"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/recommendations"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/recommendations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/recommendations"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/recommendations"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/recommendations"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/recommendations"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/recommendations"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/recommendations"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/recommendations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/recommendations"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/recommendations"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/recommendations"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/recommendations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/recommendations"}}}}}}},"operationId":"getMangaByIdRecommendations"}},"/manga/{id}/characters":{"get":{"summary":"Manga Characters","tags":["Manga"],"description":"Get a manga's characters.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga characters","content":{"application/json":{"schema":{"description":"Successful response returning manga characters","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"character":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"name":{"type":"string"}}},"role":{"type":"string"},"favorites":{"type":"integer"}}}}},"example":{"data":[{"character":{"mal_id":720,"url":"https://myanimelist.net/character/720/Anna_Liebert","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/11/286916.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/11/286916t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/11/286916.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/11/286916t.webp"}},"name":"Liebert, Anna"},"role":"Main","favorites":1338}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/characters"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/characters"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/characters"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/characters"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/characters"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/characters"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/characters"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/characters"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/characters"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/characters"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/characters"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/characters"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/characters"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/characters"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/characters"}}}}}}},"operationId":"getMangaByIdCharacters"}},"/manga/{id}/news":{"get":{"summary":"Manga News","tags":["Manga"],"description":"Get news about a manga.\n\n> SFW flags filter out news articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","comments"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":30,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":30,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning manga news","content":{"application/json":{"schema":{"description":"Successful response returning manga news","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"date":{"type":"string","nullable":true},"author_username":{"type":"string"},"author_url":{"type":"string"},"forum_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"comments":{"type":"integer"},"excerpt":{"type":"string"}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":46767949,"url":"https://myanimelist.net/news/46767949","title":"North American Anime & Manga Releases for July","date":"2016-07-04T13:28:00+00:00","author_username":"Sakana-san","author_url":"https://myanimelist.net/profile/Sakana-san","forum_url":"https://myanimelist.net/forum/?topicid=1529833","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1467638833-e596be62673123b7482604602053e06f.jpeg?s=7962b4436e0cd9961793fdc8a94115c8"}},"comments":10,"excerpt":"Here are the North American anime & manga releases for July Week 1: July 5 - 11 Anime Releases After War Gundam X Collection 2 Aquarion Evol Complete Collection Blu-..."}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/1/news?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/news"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/news"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/news"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/news"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/news"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/news"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/news"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/news"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/news"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/news"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/news"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/news"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/news"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/news"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/news"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/news"}}}}}}},"operationId":"getMangaByIdNews"}},"/manga/{id}/articles":{"get":{"summary":"Manga Articles","tags":["Manga"],"description":"Get featured articles about a manga.\n\n> SFW flags filter out articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":20,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":20,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning manga featured articles","content":{"application/json":{"schema":{"description":"Successful response returning manga featured articles","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"published_at":{"type":"string","nullable":true},"author_username":{"type":"string"},"author_url":{"type":"string","nullable":true},"views":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"excerpt":{"type":"string"}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":1969,"url":"https://myanimelist.net/featured/1969/15_of_the_Best_Adult_Anime_of_All_Time","title":"15 of the Best Adult Anime of All Time","summary":"You've always known that anime is a medium that breaks down boundaries. Now, we're going to be taking a look at the best adult anime which push things beyond the limit!","published_at":"2016-10-20T10:07:00+00:00","author_username":"MisterD98","author_url":"https://myanimelist.net/profile/MisterD98","views":2274436,"tags":["Recommendation","Collection","Action","Cute Girls","Cute Guys","Despair","Horror","Supernatural"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1476492912-65adadcb9c57981ff6fb2d9ebd9d3ecc.jpeg"}},"excerpt":"You've always known that anime is a medium that breaks down boundaries. Now, we're going to be taking a look at the best adult anime which push things beyond the lim..."}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/1/articles?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/articles"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/articles"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/articles"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/articles"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/articles"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/articles"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/articles"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/articles"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/articles"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/articles"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/articles"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/articles"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/articles"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/articles"}}}}}}},"operationId":"getMangaByIdArticles"}},"/manga/{id}/pictures":{"get":{"summary":"Manga Pictures","tags":["Manga"],"description":"Get the picture catalogue for a manga.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga pictures","content":{"application/json":{"schema":{"description":"Successful response returning manga pictures","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}},"example":{"data":[{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/258224.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/258224t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/258224l.webp"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/pictures"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/pictures"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/pictures"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/pictures"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/pictures"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/pictures"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/pictures"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/pictures"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/pictures"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/pictures"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/pictures"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/pictures"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/pictures"}}}}}}},"operationId":"getMangaByIdPictures"}},"/manga/{id}/statistics":{"get":{"summary":"Manga Statistics","tags":["Manga"],"description":"Get the most recent statistics data for a manga.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga statistics","content":{"application/json":{"schema":{"description":"Successful response returning manga statistics","type":"object","properties":{"data":{"type":"object","properties":{"reading":{"type":"integer"},"completed":{"type":"integer"},"on_hold":{"type":"integer"},"dropped":{"type":"integer"},"plan_to_read":{"type":"integer"},"total":{"type":"integer"},"scores":{"type":"array","items":{"type":"object","properties":{"score":{"type":"integer"},"votes":{"type":"integer"},"percentage":{"type":"number"}}}}}}},"example":{"data":{"reading":42651,"completed":123851,"on_hold":10922,"dropped":3512,"plan_to_read":116252,"total":297188,"scores":[{"score":1,"votes":1831,"percentage":1.5},{"score":2,"votes":125,"percentage":0.1},{"score":3,"votes":167,"percentage":0.1},{"score":4,"votes":360,"percentage":0.3},{"score":5,"votes":775,"percentage":0.6},{"score":6,"votes":1676,"percentage":1.4},{"score":7,"votes":5261,"percentage":4.4},{"score":8,"votes":15256,"percentage":12.7},{"score":9,"votes":33858,"percentage":28.2},{"score":10,"votes":60811,"percentage":50.6}]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/statistics"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/statistics"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/statistics"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/statistics"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/statistics"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/statistics"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/statistics"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/statistics"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/statistics"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/statistics"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/statistics"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/statistics"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/statistics"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/statistics"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/statistics"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/statistics"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/statistics"}}}}}}},"operationId":"getMangaByIdStatistics"}},"/manga/{id}/statistics/history":{"get":{"summary":"Manga Statistics History","tags":["Manga"],"description":"Get the day-by-day statistics history for a manga, newest day first.\n\n- `score`, `scored_by`, `rank`, `popularity`, `members` and `favorites`: every day since March 7, 2026.\n- `statistics`: since April 4, 2026, for manga with at least 1,000 members. Recorded every day from 5,000 members and every other day below that. `null` on days without a record.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string","format":"date"},"in":"query","name":"start_date","required":false,"description":"Only days on or after this date (UTC). Format: YYYY-MM-DD."},{"schema":{"type":"string","format":"date"},"in":"query","name":"end_date","required":false,"description":"Only days on or before this date (UTC). Format: YYYY-MM-DD."},{"schema":{"type":"string","enum":["desc","asc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"`desc` lists the newest day first, `asc` the oldest day first.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning the manga's statistics history","content":{"application/json":{"schema":{"description":"Successful response returning the manga's statistics history","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Day of the record (UTC), YYYY-MM-DD"},"score":{"type":"number","nullable":true,"description":"Score that day. Null while MyAnimeList shows no score."},"scored_by":{"type":"integer","nullable":true,"description":"Number of users who scored it that day"},"rank":{"type":"integer","nullable":true,"description":"Rank that day. Null while it is unranked."},"popularity":{"type":"integer","nullable":true,"description":"Popularity rank that day"},"members":{"type":"integer","nullable":true,"description":"Members that day"},"favorites":{"type":"integer","nullable":true,"description":"Favorites that day"},"statistics":{"type":"object","nullable":true,"description":"The statistics page of that day, in the shape of /manga/{id}/statistics. Null on a day without a read.","properties":{"reading":{"type":"integer"},"completed":{"type":"integer"},"on_hold":{"type":"integer"},"dropped":{"type":"integer"},"plan_to_read":{"type":"integer"},"total":{"type":"integer"},"scores":{"type":"array","items":{"type":"object","properties":{"score":{"type":"integer"},"votes":{"type":"integer"},"percentage":{"type":"number"}}}}}}}}}},"example":{"pagination":{"last_visible_page":11,"has_next_page":true},"data":[{"date":"2026-11-13","score":9.16,"scored_by":120135,"rank":6,"popularity":26,"members":297311,"favorites":24294,"statistics":null}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/1/statistics/history?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/statistics/history"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/statistics/history"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/statistics/history"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/statistics/history"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/statistics/history"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/statistics/history"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/statistics/history"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/statistics/history"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/statistics/history"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/statistics/history"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/statistics/history"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/statistics/history"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/statistics/history"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/statistics/history"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/statistics/history"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/statistics/history"}}}}}}},"operationId":"getMangaByIdStatisticsHistory"}},"/manga/{id}/moreinfo":{"get":{"summary":"Manga More Info","tags":["Manga"],"description":"Get the more info section of a manga.\n\nAlso included in every `/manga/{id}/full` response.","parameters":[{"schema":{"type":"integer","default":2},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga more info","content":{"application/json":{"schema":{"description":"Successful response returning manga more info","type":"object","properties":{"data":{"type":"object","properties":{"moreinfo":{"type":"string","nullable":true}}}},"example":{"data":{"moreinfo":"Berserk: The Prototype (1988)\n\nBefore Berserk became what it is now, Miura Kentaro created a prototype chapter for the manga. The year was 1988 and he was still a student at that time. This is the prototype manga on which the Berserk manga is based.\n\n\n\nChapter count includes 380 chapters as of volume 41."}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/moreinfo"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/2/moreinfo"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/2/moreinfo"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/2/moreinfo"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/moreinfo"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/2/moreinfo"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/2/moreinfo"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/2/moreinfo"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/2/moreinfo"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/2/moreinfo"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/2/moreinfo"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/2/moreinfo"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/2/moreinfo"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/2/moreinfo"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/2/moreinfo"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/2/moreinfo"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/2/moreinfo"}}}}}}},"operationId":"getMangaByIdMoreinfo"}},"/manga/{id}/relations":{"get":{"summary":"Manga Relations","tags":["Manga"],"description":"Get the relations of a manga, such as sequels and adaptations.\n\nAlso included in every `/manga/{id}/full` response.\n\n> SFW flags filter out non-sfw relations.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning manga relations","content":{"application/json":{"schema":{"description":"Successful response returning manga relations","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"media_type":{"type":"string","nullable":true},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}}}}}}}}},"example":{"data":[{"relation":"Adaptation","entry":[{"mal_id":19,"type":"anime","name":"Monster","url":"https://myanimelist.net/anime/19/Monster","media_type":"TV","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/10/18793.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/10/18793t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/10/18793l.webp"}}}]}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/relations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/relations"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/relations"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/relations"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/relations"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/relations"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/relations"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/relations"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/relations"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/relations"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/relations"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/relations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/relations"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/relations"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/relations"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/relations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/relations"}}}}}}},"operationId":"getMangaByIdRelations"}},"/manga/{id}/external":{"get":{"summary":"Manga External Links","tags":["Manga"],"description":"Get the links to other sites about a manga.\n\nAlso included in every `/manga/{id}/full` response.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning external links","content":{"application/json":{"schema":{"description":"Successful response returning external links","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}}},"example":{"data":[{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Monster_(manga)"},{"name":"Wikipedia","url":"https://ja.wikipedia.org/wiki/MONSTER_(%E6%BC%AB%E7%94%BB)"}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/external"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/external"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/external"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/external"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/external"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/external"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/external"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/external"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/external"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/external"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/external"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/external"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/external"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/external"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/external"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/external"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/external"}}}}}}},"operationId":"getMangaByIdExternal"}},"/manga/{id}/reviews":{"get":{"summary":"Manga Reviews","tags":["Manga"],"description":"Get user reviews of a manga.\n\nSpoiler and preliminary reviews are hidden unless you ask for them.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"],"x-enumDescriptions":{}},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment","examples":{"default":{"value":"recommended","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive).  \nPreliminary reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive).  \nSpoiler reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"most_helpful","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Order of the reviews: newest first, oldest first or most helpful first.","examples":{"default":{"value":"most_helpful","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning manga reviews","content":{"application/json":{"schema":{"description":"Successful response returning manga reviews","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","properties":{"overall":{"type":"integer"},"nice":{"type":"integer"},"love_it":{"type":"integer"},"funny":{"type":"integer"},"confusing":{"type":"integer"},"informative":{"type":"integer"},"well_written":{"type":"integer"},"creative":{"type":"integer"}}},"date":{"type":"string","nullable":true},"review":{"type":"string","nullable":true},"score":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"is_spoiler":{"type":"boolean"},"is_preliminary":{"type":"boolean"},"chapters_read":{"type":"integer","nullable":true},"user":{"type":"object","properties":{"username":{"type":"string"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}}}}}},"example":{"pagination":{"last_visible_page":5,"has_next_page":true},"data":[{"mal_id":11794,"url":"https://myanimelist.net/reviews.php?id=11794","type":"manga","reactions":{"overall":544,"nice":492,"love_it":19,"funny":5,"confusing":12,"informative":1,"well_written":15,"creative":0},"date":"2009-01-24T11:43:00+00:00","review":"I rarely give tens to mangas. But this one just deserves it! Why? I'm going to tell you:\n\nMonster isn't a tradional manga. It isn't about fighting. I even dare to say it is a 'Love it or hate it'-manga. If you are the type of Naruto and Bleach and looking for that kind of manga, this isn't the manga for you. If you are looking for an intense, well-written manga, I would recommend this certainly for you.\n\nThe story is complex and long. Altough it's long, there isn't one single filler. It is all part of the same story. The story is about several characters, whom all have their own background and story. All the characters, you could just find them in real-life. And that is awesome. It all feels real and the flow of the story is... perfect.\n\nThe art was fine, although it isn't traditional drawn. Sometimes I thought the art was too unrealistic for the story. Some of the guys had way too big noses and stuff, but it wasn't really bothering though. \n\nI think it is hard to explain what is so perfect about this manga. The story is excellent, I think that is the main thing why I just like it so much. It is complex and intense, just like I said before. You will like the characters and follow their lives troughout the story. Tenma, the main character, goes from place to place and you get a peek into lives of other people. That is done so fantastic and real that you'll just start loving all those good people. \n\nThe story is so complex, it left me with quite some questions. It is a manga in which not everything will be explained. You will have to live with that and make conclusion for your own. I didn't like that first, but now I realise it perhaps is just fine. The actions of humans aren't always explained in real-life either....\n\nMy conclusion: This manga is perfect for everyone who loves thrillers and tension! The 10 it has gotten from me, well, it just deserves it!","score":10,"tags":["Recommended"],"is_spoiler":false,"is_preliminary":false,"chapters_read":null,"user":{"username":"BorisSoad","url":"https://myanimelist.net/profile/BorisSoad","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/17283419-25be-4589-b7eb-01766ace2be2_225w?s=3facf68634d2a1e13f94bf5db0d78419"},"webp":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/17283419-25be-4589-b7eb-01766ace2be2_225w?s=3facf68634d2a1e13f94bf5db0d78419"}}}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/reviews"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/reviews"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/reviews"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/reviews"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/reviews"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/reviews"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/reviews"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/reviews"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/reviews"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/reviews"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/reviews"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/reviews"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/reviews"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/reviews"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/reviews"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/reviews"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/reviews"}}}}}}},"operationId":"getMangaByIdReviews"}},"/manga/{id}/forum":{"get":{"summary":"Manga Forum Topics","tags":["Manga"],"description":"Get a manga's chapter discussion threads. Other forum topics are not available.\n\nTo read a thread's posts, pass its `mal_id` to the official MyAnimeList API.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string","enum":["episode"],"default":"episode","x-enumDescriptions":{}},"in":"query","name":"filter","required":false,"description":"Which forum topics to return. Only chapter discussion topics are available for now.","examples":{"default":{"value":"episode","x-disabled":true}}},{"schema":{"type":"string","enum":["chapter_number","created_on","comment_count","last_post"],"default":"chapter_number"},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"chapter_number","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Defaults to asc for chapter_number, desc for dates/counts.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning manga forum topics","content":{"application/json":{"schema":{"description":"Successful response returning manga forum topics","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer","description":"Forum topic ID"},"url":{"type":"string","description":"Forum thread URL"},"title":{"type":"string","description":"Topic title. Empty for a thread that has no title on MyAnimeList."},"date":{"type":"string","nullable":true,"description":"Creation date ISO8601"},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"comments":{"type":"integer","description":"Number of replies"},"last_comment":{"type":"object","properties":{"url":{"type":"string","nullable":true},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"date":{"type":"string","nullable":true}}}}}}},"example":{"pagination":{"last_visible_page":6,"has_next_page":true},"data":[{"mal_id":395601,"url":"https://myanimelist.net/forum/?topicid=395601","title":"Monster Chapter 1 Discussion","date":"2012-01-29T00:00:00+00:00","author_username":"AlexSadist-sama","author_url":"https://myanimelist.net/profile/AlexSadist-sama","comments":16,"last_comment":{"url":"https://myanimelist.net/forum/?topicid=395601&goto=lastpost","author_username":"jshed_doruk","author_url":"https://myanimelist.net/profile/jshed_doruk","date":"2024-09-01T05:57:00+00:00"}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/manga/abc/forum"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/forum"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/forum"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/forum"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/forum"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/forum"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/forum"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/forum"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/forum"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/forum"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/forum"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/forum"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/forum"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/forum"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/forum"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/forum"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/forum"}}}}}}},"operationId":"getMangaByIdForum"}},"/manga/{id}/stacks":{"get":{"summary":"Manga Stacks","tags":["Manga"],"description":"Get interest stacks that include a specific manga ID.\n\nInterest stacks are themed lists made by users.\n\n> SFW flags filter out interest stacks where non-sfw items are included.","parameters":[{"schema":{"type":"integer"},"example":1,"in":"path","name":"id","required":true,"description":"The MAL Manga ID"},{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Returns stacks whose title or description contains it, ignoring case."},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler stacks (true = include, false = exclude, only = exclusive).  \nSpoiler stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"challenges","required":false,"description":"Filter challenge stacks (true = include, false = exclude, only = exclusive).  \nChallenge stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"official","required":false,"description":"Filter official stacks (true = include, false = exclude, only = exclusive).  \nOfficial stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["created_at","restack_count"],"default":"created_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"created_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning Interest Stacks.","content":{"application/json":{"schema":{"description":"Successful response returning Interest Stacks.","type":"object","required":["pagination","data"],"properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","required":["mal_id","url","stack_type","title","description","author_username","author_url","is_official","is_challenge","is_spoiler","restack_count","entry_count","created_at"],"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"stack_type":{"type":"string","enum":["anime","manga"]},"title":{"type":"string"},"description":{"type":"string"},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"is_official":{"type":"boolean"},"is_challenge":{"type":"boolean"},"is_spoiler":{"type":"boolean"},"restack_count":{"type":"integer"},"entry_count":{"type":"integer"},"created_at":{"type":"string","format":"date-time","nullable":true}}}}},"example":{"pagination":{"last_visible_page":6,"has_next_page":true,"current_page":1,"items":{"count":25,"total":143,"per_page":25}},"data":[{"mal_id":92456,"url":"https://myanimelist.net/stacks/92456","stack_type":"manga","title":"Post cult and resenhistico pt.2","description":"Segunda parte da leitura em conjunto de Shikurettopill e Sukeban.\nRepresenta a segunda parte do apogeu da irmandade entre os dois.","author_username":"RettoBan","author_url":"https://myanimelist.net/profile/RettoBan","is_official":false,"is_challenge":false,"is_spoiler":false,"restack_count":2,"entry_count":50,"created_at":"2026-10-14T03:39:00+00:00"}]}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/1/stacks?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/1/stacks"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/1/stacks"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/1/stacks"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Manga with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/manga/0/stacks"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/1/stacks"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/1/stacks"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/1/stacks"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/1/stacks"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/1/stacks"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/1/stacks"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/1/stacks"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/1/stacks"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/1/stacks"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/1/stacks"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/1/stacks"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/1/stacks"}}}}}}},"operationId":"getMangaByIdStacks"}},"/manga/unapproved":{"get":{"summary":"Manga Unapproved","tags":["Manga"],"description":"Get manga that are waiting for MyAnimeList approval.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Matches any part of the title, English title, Japanese title or a synonym, ignoring case. Without `order_by`, the closest title comes first."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","title"],"x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. Without it, results are sorted by `mal_id`, or closest title first when `q` is set.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning unapproved manga entries","content":{"application/json":{"schema":{"description":"Successful response returning unapproved manga entries","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}}},"example":{"pagination":{"last_visible_page":341,"has_next_page":true,"current_page":1,"items":{"count":25,"total":8501,"per_page":25}},"data":[{"mal_id":98559,"url":"https://myanimelist.net/manga/98559/Kidou_Senshi_Gundam_Secret_Weapons__Phantom_Bullets","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/177197.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/177197t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/177197l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/177197.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/177197t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/177197l.webp"}},"approved":false,"titles":[{"type":"Default","title":"Kidou Senshi Gundam Secret Weapons: Phantom Bullets"},{"type":"Japanese","title":"機動戦士ガンダム ファントム・ブレット"},{"type":"English","title":"Mobile Suit Gundam Secret Weapons: Phantom Bullets"},{"type":"Synonym","title":"Mobile Suit Gundam Secret Weapons: Phantom Bullets"}],"title":"Kidou Senshi Gundam Secret Weapons: Phantom Bullets","title_english":"Mobile Suit Gundam Secret Weapons: Phantom Bullets","title_japanese":"機動戦士ガンダム ファントム・ブレット","title_synonyms":["Mobile Suit Gundam Secret Weapons: Phantom Bullets"],"type":"Light Novel","chapters":1,"volumes":null,"status":"Finished","publishing":false,"published":{"from":"2002-04-25T00:00:00+00:00","to":null,"prop":{"from":{"day":25,"month":4,"year":2002},"to":{"day":null,"month":null,"year":null}},"string":"Apr 25, 2002"},"score":null,"scored_by":null,"rank":null,"popularity":null,"members":null,"favorites":null,"synopsis":"Serves as a prequel to Mobile Suit Gundam 0083 that details an event with Federation pilot — Jack Bayard, who pilots the RX-78GP00 Gundam GP00 \"Blossom\".","background":null,"authors":[],"serializations":[{"mal_id":522,"type":"manga","name":"Dengeki Hobby Magazine","url":"https://myanimelist.net/manga/magazine/522/Dengeki_Hobby_Magazine"}],"genres":[{"mal_id":1,"type":"manga","name":"Action","url":"https://myanimelist.net/manga/genre/1/Action"},{"mal_id":24,"type":"manga","name":"Sci-Fi","url":"https://myanimelist.net/manga/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":18,"type":"manga","name":"Mecha","url":"https://myanimelist.net/manga/genre/18/Mecha"},{"mal_id":38,"type":"manga","name":"Military","url":"https://myanimelist.net/manga/genre/38/Military"},{"mal_id":29,"type":"manga","name":"Space","url":"https://myanimelist.net/manga/genre/29/Space"}],"demographics":[]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/unapproved?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/unapproved"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/unapproved"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/unapproved"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/unapproved"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/unapproved"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/unapproved"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/unapproved"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/unapproved"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/unapproved"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/unapproved"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/unapproved"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/unapproved"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/unapproved"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/unapproved"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/unapproved"}}}}}}},"operationId":"getMangaUnapproved"}},"/manga/denied":{"get":{"summary":"Manga Denied","tags":["Manga"],"description":"Get manga that MyAnimeList rejected.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Matches any part of the title, English title, Japanese title or a synonym, ignoring case. Without `order_by`, the closest title comes first."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","title"],"x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. Without it, results are sorted by `mal_id`, or closest title first when `q` is set.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning denied manga entries","content":{"application/json":{"schema":{"description":"Successful response returning denied manga entries","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}}},"example":{"pagination":{"last_visible_page":605,"has_next_page":true,"current_page":1,"items":{"count":25,"total":15124,"per_page":25}},"data":[{"mal_id":45383,"url":"https://myanimelist.net/manga/45383/Crepuscule_Yamachi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/2/80151.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/2/80151t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/2/80151l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/2/80151.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/2/80151t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/2/80151l.webp"}},"approved":false,"titles":[{"type":"Default","title":"Crepuscule (Yamachi)"},{"type":"Japanese","title":"크리퍼스큘 (밀치 / 얌치)"},{"type":"Synonym","title":"Crepuscule (Mirchi)"},{"type":"Synonym","title":"Crepuscule (Yamchi/Mirchi)"}],"title":"Crepuscule (Yamachi)","title_english":null,"title_japanese":"크리퍼스큘 (밀치 / 얌치)","title_synonyms":["Crepuscule (Mirchi)","Crepuscule (Yamchi/Mirchi)"],"type":"Manga","chapters":null,"volumes":null,"status":"Publishing","publishing":true,"published":{"from":"2011-02-11T00:00:00+00:00","to":null,"prop":{"from":{"day":11,"month":2,"year":2011},"to":{"day":null,"month":null,"year":null}},"string":"Feb 11, 2011"},"score":null,"scored_by":33,"rank":0,"popularity":0,"members":120,"favorites":null,"synopsis":"Crepuscule is a Korean Webtoon from Naver. It is written by Mirchi and the art is done by Yamchi.\nLark is different from the rest of the kids. He has red eyes and he is bullied by the other kids for that. One day he meets Setz, a genuine vampire of a noble clan, who is the only one who doesn't call him a monster. Eventually, they become friends, but when an incident happens, Setz doesn't want to lose a friend, so he invites Lark to his home... The world of Vampires....\n\nThere are two Webtoons released. The first one was discontinued and the artist restarted the story with a new author, with a few changes in the storyline.\n(http://crepuscule.wikia.com/wiki/Crepuscule_Wiki)","background":null,"authors":[],"serializations":[],"genres":[{"mal_id":22,"type":"manga","name":"Romance","url":"https://myanimelist.net/manga/genre/22/Romance"},{"mal_id":37,"type":"manga","name":"Supernatural","url":"https://myanimelist.net/manga/genre/37/Supernatural"}],"explicit_genres":[],"themes":[{"mal_id":23,"type":"manga","name":"School","url":"https://myanimelist.net/manga/genre/23/School"},{"mal_id":32,"type":"manga","name":"Vampire","url":"https://myanimelist.net/manga/genre/32/Vampire"}],"demographics":[{"mal_id":27,"type":"manga","name":"Shounen","url":"https://myanimelist.net/manga/genre/27/Shounen"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/denied?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/denied"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/denied"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/denied"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/denied"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/denied"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/denied"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/denied"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/denied"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/denied"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/denied"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/denied"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/denied"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/denied"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/denied"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/denied"}}}}}}},"operationId":"getMangaDenied"}},"/manga/adapted":{"get":{"summary":"Manga Adapted to Anime","tags":["Manga"],"description":"Get manga that have been adapted into anime.","parameters":[{"schema":{"type":"string","enum":["all","airing","upcoming"],"default":"all","x-enumDescriptions":{}},"in":"query","name":"filter","required":false,"description":"Which MyAnimeList list of adapted manga to return: all of them, those whose anime is airing now, or those with an upcoming anime.","examples":{"default":{"value":"all","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["manga","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `manga`: Manga\n- `oneshot`: One-shot\n- `doujin`: Doujinshi (self-published)\n- `manhwa`: Manhwa (Korean comics)\n- `manhua`: Manhua (Chinese comics)","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["manga","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type_exclude","required":false,"description":"Exclude entries with any selected type. Multiple values exclude any selected type.\n\n- `manga`: Manga\n- `oneshot`: One-shot\n- `doujin`: Doujinshi (self-published)\n- `manhwa`: Manhwa (Korean comics)\n- `manhua`: Manhua (Chinese comics)","style":"form","explode":false},{"schema":{"type":"string","enum":["publishing","complete","upcoming","discontinued","hiatus"]},"in":"query","name":"status","required":false,"description":"Only manga with this publishing status.\n\n- `publishing`: Publishing\n- `complete`: Finished\n- `upcoming`: Not yet published\n- `discontinued`: Discontinued\n- `hiatus`: On Hiatus","examples":{"default":{"value":"publishing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["publishing","complete","upcoming","discontinued","hiatus"]}},"in":"query","name":"status_exclude","required":false,"description":"Exclude entries with any selected status. Multiple values exclude any selected status.\n\n- `publishing`: Publishing\n- `complete`: Finished\n- `upcoming`: Not yet published\n- `discontinued`: Discontinued\n- `hiatus`: On Hiatus","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated IDs. Entries must have all of them.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated IDs. Entries with any of them are left out.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"magazines","required":false,"description":"Comma-separated IDs. Entries must have at least one of them.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"magazines_exclude","required":false,"description":"Exclude entries recorded under any selected magazine or serialization-platform MAL ID.","style":"form","explode":false},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"solo_author","required":false,"description":"Filter by who made the manga: `true` for manga written and drawn by one person, `false` for manga whose writing and art are credited to two or more people. Manga that MAL lists without both a writer and an artist match neither.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"score","required":false,"description":"Only entries with exactly this score, e.g. `8.2` for 8.20. Cannot be combined with `min_score` or `max_score`; use those for a range."},{"schema":{"type":"number","minimum":0,"maximum":10},"in":"query","name":"min_score","required":false,"description":"Only entries with this score or higher."},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"max_score","required":false,"description":"Only entries with this score or lower."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_scored_by","required":false,"description":"Minimum number of scoring users, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647},"in":"query","name":"max_scored_by","required":false,"description":"Maximum number of scoring users, inclusive."},{"schema":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647},"in":"query","name":"min_reviews","required":false,"description":"Minimum number of available reviews, inclusive, including spoiler and preliminary reviews. This is not a complete MyAnimeList-wide total. 0 applies no limit."},{"schema":{"type":"integer","format":"int32","minimum":0,"maximum":2147483647},"in":"query","name":"max_reviews","required":false,"description":"Maximum number of available reviews, inclusive, including spoiler and preliminary reviews. This is not a complete MyAnimeList-wide total. 0 returns entries with no stored reviews."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_chapters","required":false,"description":"Minimum known positive chapter count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_chapters","required":false,"description":"Maximum known positive chapter count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_volumes","required":false,"description":"Minimum known positive volume count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_volumes","required":false,"description":"Maximum known positive volume count, inclusive."},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","minimum":1,"maximum":9999}},"in":"query","name":"year","required":false,"description":"Calendar year of the aired or published start date. Cannot be combined with min_year or max_year. For anime, this can differ from MAL's season year. Multiple years match any selected year.","style":"form","explode":false},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"min_year","required":false,"description":"Minimum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"max_year","required":false,"description":"Maximum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"string","format":"date"},"in":"query","name":"start_date","required":false,"description":"Only manga that started publishing on or after this date. Format: YYYY-MM-DD. A year (2020) or a year and month (2020-05) is also accepted."},{"schema":{"type":"string","format":"date"},"in":"query","name":"end_date","required":false,"description":"Only manga that finished publishing on or before this date. Format: YYYY-MM-DD. A year (2020) or a year and month (2020-05) is also accepted and covers up to its last day. Manga with no end date, such as one-shots published on a single day, are left out, as on Jikan."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","title","title_english","title_japanese","start_date","end_date","chapters","volumes","score","scored_by","rank","popularity","members","favorites"],"default":"members"},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.\n\n- `mal_id`: MAL ID\n- `title`: Title\n- `title_english`: English title\n- `title_japanese`: Japanese title\n- `start_date`: Start date\n- `end_date`: End date\n- `chapters`: Number of chapters\n- `volumes`: Number of volumes\n- `score`: Score\n- `scored_by`: Number of users who scored it\n- `rank`: Rank\n- `popularity`: Popularity rank\n- `members`: Members\n- `favorites`: Favorites","examples":{"default":{"value":"members","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"string","enum":["first","last","exclude"],"x-enumDescriptions":{}},"in":"query","name":"nulls","required":false,"description":"Applies to the field you sort by with `order_by`. `first` puts entries without a value first, `last` puts them last, and `exclude` leaves them out of results and totals. Example: `order_by=end_date&nulls=exclude` leaves out entries without an end date. Requires `order_by`. When omitted, entries without a value come first with sort=asc and last with sort=desc. With `order_by=rank` or `order_by=popularity`, they come last either way, and a rank or popularity of 0 counts as no value.","examples":{"default":{"value":"first","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning adapted manga","content":{"application/json":{"schema":{"description":"Successful response returning adapted manga","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}}},"example":{"pagination":{"last_visible_page":172,"has_next_page":true,"current_page":1,"items":{"count":25,"total":4288,"per_page":25}},"data":[{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"},{"type":"English","title":"Berserk"},{"type":"Synonym","title":"Berserk: The Prototype"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":["Berserk: The Prototype"],"type":"Manga","chapters":null,"volumes":null,"status":"Publishing","publishing":true,"published":{"from":"1989-08-25T00:00:00+00:00","to":null,"prop":{"from":{"day":25,"month":8,"year":1989},"to":{"day":null,"month":null,"year":null}},"string":"Aug 25, 1989 to ?"},"score":9.46,"scored_by":407412,"rank":1,"popularity":1,"members":814539,"favorites":140014,"synopsis":"Guts, a former mercenary now known as the Black Swordsman, is out for revenge. After a tumultuous childhood, he finally finds someone he respects and believes he can trust, only to have everything fall apart when this person takes away everything important to Guts for the purpose of fulfilling his own desires. Now marked for death, Guts becomes condemned to a fate in which he is relentlessly pursued by demonic beings.\n\nSetting out on a dreadful quest riddled with misfortune, Guts, armed with a massive sword and monstrous strength, will let nothing stop him, not even death itself, until he is finally able to take the head of the one who stripped him—and his loved one—of their humanity.\n\n[Written by MAL Rewrite]\n\nIncluded one-shot:\nVolume 14: Berserk: The Prototype","background":"Berserk won the Excellence Award at the sixth Tezuka Osamu Cultural Prize in 2002. As of August 2025, over 70 million copies of the manga are in circulation. The series has been published in English by Dark Horse Comics since November 4, 2003. It has also been released in Argentina, Brazil, Czech Republic, France, Germany, Greece, Hong Kong, Italy, México, Poland, South Korea, Spain, Taiwan, Thailand, and Turkey. In May 2021, the author Kentaro Miura suddenly died at the age of 54. Chapter 364 of Berserk was published posthumously on September 10, 2021. Miura would often share details about the series' story with his childhood friend and fellow mangaka Kouji Mori. The series resumed on June 24, 2022, with Studio Gaga handling the art and Kouji Mori's supervision.","authors":[{"mal_id":1868,"type":"people","name":"Miura, Kentarou","url":"https://myanimelist.net/people/1868/Kentarou_Miura","role":"Story & Art"},{"mal_id":49592,"type":"people","name":"Studio Gaga","url":"https://myanimelist.net/people/49592/Studio_Gaga","role":"Art"}],"serializations":[{"mal_id":2,"type":"manga","name":"Young Animal","url":"https://myanimelist.net/manga/magazine/2/Young_Animal"}],"genres":[{"mal_id":1,"type":"manga","name":"Action","url":"https://myanimelist.net/manga/genre/1/Action"},{"mal_id":2,"type":"manga","name":"Adventure","url":"https://myanimelist.net/manga/genre/2/Adventure"},{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":10,"type":"manga","name":"Fantasy","url":"https://myanimelist.net/manga/genre/10/Fantasy"},{"mal_id":14,"type":"manga","name":"Horror","url":"https://myanimelist.net/manga/genre/14/Horror"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"},{"mal_id":38,"type":"manga","name":"Military","url":"https://myanimelist.net/manga/genre/38/Military"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/adapted?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/adapted"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/adapted"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/adapted"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/adapted"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/adapted"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/adapted"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/adapted"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/adapted"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/adapted"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/adapted"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/adapted"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/adapted"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/adapted"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/adapted"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/adapted"}}}}}}},"operationId":"getMangaAdapted"}},"/manga/deleted":{"get":{"summary":"Manga Deleted","tags":["Manga"],"description":"Get manga that were removed from MyAnimeList.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Matches any part of the title, English title, Japanese title or a synonym, ignoring case. Without `order_by`, the closest title comes first."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","title","score","members"]},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. Without it, results are sorted by `mal_id`, or closest title first when `q` is set.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning deleted manga entries","content":{"application/json":{"schema":{"description":"Successful response returning deleted manga entries","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}}},"example":{"pagination":{"last_visible_page":26,"has_next_page":true,"current_page":1,"items":{"count":25,"total":647,"per_page":25}},"data":[{"mal_id":3185,"url":"https://myanimelist.net/manga/3185/Saijoukai_De_Dakishimete","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/3485.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/3485t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/3485l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/3485.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/3485t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/3485l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Saijoukai De Dakishimete"},{"type":"English","title":"Embrace Me Tightly on the Highest Floor"},{"type":"Synonym","title":"Embrace Me Tightly on the Highest Floor"}],"title":"Saijoukai De Dakishimete","title_english":"Embrace Me Tightly on the Highest Floor","title_japanese":null,"title_synonyms":["Embrace Me Tightly on the Highest Floor"],"type":"One-shot","chapters":1,"volumes":null,"status":"Finished","publishing":false,"published":{"from":null,"to":null,"prop":{"from":{"day":null,"month":null,"year":null},"to":{"day":null,"month":null,"year":null}},"string":null},"score":6.58,"scored_by":252,"rank":14118,"popularity":22318,"members":445,"favorites":null,"synopsis":"Ever since Fuyou was little her younger brother Richi has had a habit of going into her bed. It wasn't a problem when they were kids but unfortunately the situation changed...","background":null,"authors":[{"mal_id":2058,"type":"people","name":"Yoshino, Mari","url":"https://myanimelist.net/people/2058/Mari_Yoshino","role":null}],"serializations":[],"genres":[{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":22,"type":"manga","name":"Romance","url":"https://myanimelist.net/manga/genre/22/Romance"}],"explicit_genres":[],"themes":[{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":25,"type":"manga","name":"Shoujo","url":"https://myanimelist.net/manga/genre/25/Shoujo"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/manga/deleted?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/deleted"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/deleted"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/deleted"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/deleted"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/deleted"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/deleted"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/deleted"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/deleted"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/deleted"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/deleted"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/deleted"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/deleted"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/deleted"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/deleted"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/deleted"}}}}}}},"operationId":"getMangaDeleted"}},"/manga/ids":{"get":{"summary":"Get All Manga IDs","tags":["Manga"],"description":"Get the ID of every manga in one request.\n\n> SFW flags filter out IDs belonging to non-sfw entries.","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `manga`: Manga\n- `novel`: Novel\n- `lightnovel`: Light Novel\n- `oneshot`: One-shot\n- `doujin`: Doujinshi (self-published)\n- `manhwa`: Manhwa (Korean comics)\n- `manhua`: Manhua (Chinese comics)","style":"form","explode":false},{"schema":{"type":"string","enum":["publishing","complete","finished","upcoming","discontinued","hiatus"]},"in":"query","name":"status","required":false,"description":"Filter by publishing status.\n\n- `publishing`: Publishing\n- `complete`: Finished\n- `finished`: Finished (same as `complete`)\n- `upcoming`: Not yet published\n- `discontinued`: Discontinued\n- `hiatus`: On Hiatus","examples":{"default":{"value":"publishing","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"updated_at","required":false,"description":"Filter entries updated on or after this ISO 8601 date or date-time (such as `2026-03-02` or `2026-03-02T00:00:00Z`) or Unix timestamp. A timestamp below 10000000000 is read as seconds, a larger one as milliseconds. This is as updated on site, not API. May or may not be fully accurate."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"array","items":{"type":"string","enum":["title","type"],"x-enumDescriptions":{}}},"in":"query","name":"include","required":false,"description":"Fetch additional data. Comma-separated fields to include per entry.","style":"form","explode":false}],"security":[{"serverKey":[]}],"responses":{"200":{"description":"Successful response returning all unique manga IDs","content":{"application/json":{"schema":{"description":"Successful response returning all unique manga IDs","type":"object","properties":{"total":{"type":"integer"},"data":{"type":"array","items":{"oneOf":[{"type":"integer"},{"type":"object","properties":{"mal_id":{"type":"integer"},"title":{"type":"string"},"type":{"type":"string","nullable":true}}}]}}},"example":{"total":85654,"data":[1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20]},"required":["data","total"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/manga/ids"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/manga/ids"}},"missingServerKey":{"summary":"Restricted endpoint without a Server Key","value":{"status":401,"type":"UnauthorizedException","message":"Server Key is required for this endpoint.","error":"Send a valid Server Key in the X-Server-Key header.","path":"/v1/manga/ids"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/manga/ids"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/manga/ids"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/manga/ids"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/manga/ids"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/manga/ids"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/manga/ids"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/manga/ids"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/manga/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/manga/ids"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/manga/ids"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/manga/ids"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/manga/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/manga/ids"}}}}}}},"operationId":"getMangaIds"}},"/characters":{"get":{"summary":"Character Search","tags":["Characters"],"description":"Search and browse the full characters catalogue with advanced filters and sorting.\n\n> SFW flags filter out characters that only appear in non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"The search query"},{"schema":{"type":"string","maxLength":1},"in":"query","name":"letter","required":false,"description":"Only entries whose name starts with this letter. One letter, in any case."},{"schema":{"type":"string","maxLength":100},"in":"query","name":"given_name","required":false,"description":"Only characters with this given name, such as `Sakura`. Matches the whole given name, ignoring case. A character MAL lists with one name, such as `Levi`, has only a given name."},{"schema":{"type":"string","maxLength":100},"in":"query","name":"family_name","required":false,"description":"Only characters with this family name, such as `Uchiha`. Matches the whole family name, ignoring case."},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_about","required":false,"description":"`true` for characters with an about text, `false` for characters without one. MAL's \"No biography written.\" counts as none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_image","required":false,"description":"`true` for characters with a picture, `false` for characters that show MAL's question-mark placeholder.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_nicknames","required":false,"description":"`true` for characters with at least one nickname, `false` for characters without any.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_kanji","required":false,"description":"`true` for characters with a Japanese name (`name_kanji`), `false` for characters without one.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_family_name","required":false,"description":"`true` for characters with a family name, `false` for characters MAL lists with one name, such as `Levi`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"anime","required":false,"description":"Only characters in any of these anime MAL IDs. With `voice_language`, the voice credit must be in one of these anime. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"manga","required":false,"description":"Only characters in any of these manga MAL IDs. Comma-separated.","style":"form","explode":false},{"schema":{"type":"string","enum":["main","supporting"],"x-enumDescriptions":{}},"in":"query","name":"role","required":false,"description":"Only characters MAL lists in this role. With `anime` or `manga`, the role in those titles; without them, the role in any anime or manga.\n\n- `main`: Main character\n- `supporting`: Supporting character","examples":{"default":{"value":"main","x-disabled":true}}},{"schema":{"type":"string","enum":["main","supporting"],"x-enumDescriptions":{}},"in":"query","name":"role_only","required":false,"description":"Only characters MAL lists in this role and never in the other one.\n\n- `main`: Only ever a main character\n- `supporting`: Only ever a supporting character","examples":{"default":{"value":"main","x-disabled":true}}},{"schema":{"type":"string","enum":["anime","manga","both"],"x-enumDescriptions":{}},"in":"query","name":"appears_in","required":false,"description":"Only characters that appear in these kinds of entries.\n\n- `anime`: Only in anime\n- `manga`: Only in manga\n- `both`: In both anime and manga","examples":{"default":{"value":"anime","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"airing","required":false,"description":"`true` for characters in at least one anime airing now, `false` for characters in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"upcoming","required":false,"description":"`true` for characters in at least one anime that has not aired yet, `false` for characters in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"publishing","required":false,"description":"`true` for characters in at least one manga publishing now, `false` for characters in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["winter","spring","summer","fall"]}},"in":"query","name":"season","required":false,"description":"Only characters in an anime of any selected MAL debut season. With `season_year`, any selected season of any selected year, in the same anime. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","minimum":1,"maximum":9999}},"in":"query","name":"season_year","required":false,"description":"Only characters in an anime of any of these MAL debut-season years. This can differ from the calendar start year. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"voice_actors","required":false,"description":"Only characters voiced by any of these voice actor MAL person IDs, in any anime. With `voice_language`, the actor must voice the character in that language, in one of the `anime` or in one of the `season` and `season_year` given. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["english","french","german","hebrew","hungarian","italian","japanese","korean","mandarin","portuguese_br","spanish"]}},"in":"query","name":"voice_language","required":false,"description":"Only characters with a voice actor credited in any of these languages. When used with `voice_actors`, a selected voice actor must be credited in that language. With `anime`, `season` or `season_year`, the credit must be in one of those anime or in an anime of that season. Comma-separated.\n\n- `english`: English\n- `french`: French\n- `german`: German\n- `hebrew`: Hebrew\n- `hungarian`: Hungarian\n- `italian`: Italian\n- `japanese`: Japanese\n- `korean`: Korean\n- `mandarin`: Mandarin\n- `portuguese_br`: Portuguese (BR)\n- `spanish`: Spanish","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["english","french","german","hebrew","hungarian","italian","japanese","korean","mandarin","portuguese_br","spanish"]}},"in":"query","name":"voice_language_exclude","required":false,"description":"Exclude characters with a voice actor credited in any of these languages. With `anime`, `season` or `season_year`, the credit must be in one of those anime or in an anime of that season. Comma-separated.\n\n- `english`: English\n- `french`: French\n- `german`: German\n- `hebrew`: Hebrew\n- `hungarian`: Hungarian\n- `italian`: Italian\n- `japanese`: Japanese\n- `korean`: Korean\n- `mandarin`: Mandarin\n- `portuguese_br`: Portuguese (BR)\n- `spanish`: Spanish","style":"form","explode":false},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_voice_actor","required":false,"description":"`true` for characters with at least one credited voice actor, `false` for characters without any, including characters only in manga.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive. Missing counts are treated as zero."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive. Missing counts are treated as zero."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_appearances","required":false,"description":"Minimum number of anime and manga the character appears in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_appearances","required":false,"description":"Maximum number of anime and manga the character appears in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_anime_appearances","required":false,"description":"Minimum number of anime the character appears in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_anime_appearances","required":false,"description":"Maximum number of anime the character appears in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_manga_appearances","required":false,"description":"Minimum number of manga the character appears in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_manga_appearances","required":false,"description":"Maximum number of manga the character appears in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_main_roles","required":false,"description":"Minimum number of anime and manga MAL lists the character as a main character in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_main_roles","required":false,"description":"Maximum number of anime and manga MAL lists the character as a main character in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_supporting_roles","required":false,"description":"Minimum number of anime and manga MAL lists the character as a supporting character in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_supporting_roles","required":false,"description":"Maximum number of anime and manga MAL lists the character as a supporting character in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_voice_languages","required":false,"description":"Minimum number of languages the character has a credited voice actor in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_voice_languages","required":false,"description":"Maximum number of languages the character has a credited voice actor in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_voice_actors","required":false,"description":"Minimum number of credited voice actors the character has, across all languages, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_voice_actors","required":false,"description":"Maximum number of credited voice actors the character has, across all languages, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","name","name_kanji","favorites","appearances","anime_appearances","manga_appearances","main_roles","supporting_roles","voice_languages","voice_actors"]},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. `favorites` and the counts list the most first unless `sort=asc`.\n\n- `mal_id`: MAL ID\n- `name`: Name\n- `name_kanji`: Japanese name; characters without one come last\n- `favorites`: Favorites\n- `appearances`: Number of anime and manga the character appears in\n- `anime_appearances`: Number of anime the character appears in\n- `manga_appearances`: Number of manga the character appears in\n- `main_roles`: Number of anime and manga MAL lists the character as a main character in\n- `supporting_roles`: Number of anime and manga MAL lists the character as a supporting character in\n- `voice_languages`: Number of languages the character has a credited voice actor in\n- `voice_actors`: Number of credited voice actors, across all languages","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending. Only applies together with `order_by`.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning matching characters","content":{"application/json":{"schema":{"description":"Successful response returning matching characters","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"name":{"type":"string"},"name_kanji":{"type":"string","nullable":true},"nicknames":{"type":"array","items":{"type":"string"}},"favorites":{"type":"integer"},"about":{"type":"string","nullable":true}}}}},"example":{"pagination":{"last_visible_page":9276,"has_next_page":true,"current_page":1,"items":{"count":25,"total":231882,"per_page":25}},"data":[{"mal_id":417,"url":"https://myanimelist.net/character/417/Lelouch_Lamperouge","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/8/406163.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/8/406163t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/8/406163.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/8/406163t.webp"}},"name":"Lamperouge, Lelouch","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":181838,"about":"Age: 17 (first season), 18 (second season)\n\nBirthdate:  December 5, 1999 a.t.b. (Sagittarius)\n\nBlood Type: A\n\nNationality: Britannia\n\nHeight: 178 cm (5'10\")\n\nOccupation: Student, Terrorist, Knightmare Pilot, Politician, Emperor, Prince\n\nAllegiance: Order of the Black Knights\n\nPosition: Leader of the Black Knights\n\nKnightmare: Sutherland, Burai, Gawain, Shinkirou\n\nLelouch is the main protagonist of the anime/manga series Code Geass. He is the Eleventh Prince of the Holy Britannian Empire and the son of the 98th Emperor of Britannia, Charles zi Britannia.\n\nLelouch is a very clever individual who is also calm, sophisticated, and arrogant due to his aristocratic upbringing. While at school, Lelouch conducts himself as a friendly, likable, and often an easygoing student. However, this is a mask to hide his true nature. While as Zero, his true nature is expressed. His charisma and beliefs in justice gain him the trust and respect of many soldiers and leaders.\n\nHe is known for having a very stoic personality. He never cared about schoolwork, seeing the entire thing as trivial, even though his high intelligence would make it easy for him. He enjoys seeking out challenges, often playing chess against the nobility. In general, Lelouch takes most day-to-day affairs with open disinterest, often not even noticing the affection of others, especially Shirley, his classmate. He has a strong dislike for nobles, viewing them as tepid and \"overprivileged parasites.\"\n\nMany characters have noted that Lelouch is entirely selfish, as his desire to remake the world into what he wants it to become from his desire to avenge his mother's apparent death and Nunnally's sake. However, in time, he realizes that this goal is not just for them but also the entire world.\n\nDespite his cold, calculating demeanor and ruthlessness in battle, he can be a rather compassionate person to his friends and loved ones. To Nunnally, he is a loving older brother, and to Suzaku, a loyal friend, although the two are enemies. Lelouch, at first glance, seems to have relatively little concern for the well-being of his subordinates, but in reality, he does care about them, seeing them as valuable allies.\n\n[Spoiler] As the series progresses, Lelouch suffers traumas and further losses that further deepen his resolve. However, he also grows less merciful to his enemies if he cannot Geass them. [/Spoiler]\n\nBackground (as Lelouch):\n\n[Spoiler] Lelouch was born on December 5, 1999, a.t.b. as Lelouch vi Britannia, the son of Charles Zi Britannia, and the late Imperial Consort Marianne, making Lelouch the Eleventh Prince of the Holy Britannian Empire. He was in line to be the seventeenth heir to the throne before his mother's assassination and his sister's crippling in the same incident. A ten-year-old Lelouch confronted the Emperor afterward and accused him of leaving his mother defenseless, even going as far as renouncing his entitlement to the throne. In response, his father banished him to Japan and used him as a political hostage in the Sakuradite conflict. During his stay at the Kururugi household, he first met Suzaku Kururugi, with whom the young Lelouch did not interact initially in a friendly way, before later becoming friends. However, when Britannia finally developed its Knightmare Frames fleet and decided to invade Japan to seize control of the Sakuradite mines, discarding Lelouch's use as a diplomatic tool. Lelouch, fearing for his sister's safety, hid their true identities and sought the help of the Ashford family, who were his mother's allies. His mother's death and his father's apparent lack of concern regarding it were considerable blows to Lelouch. He always felt that it was unfair for both his mother and sister and made it his goal to pursue a better world for Nunnally. He also seeks to discover the valid reason for his mother's death, who got murdered in the Aries Imperial Palace, a place terrorists would be unlikely to penetrate successfully without being noticed, if at all. [/Spoiler]\n\nBackground (as Zero):\n\n[Spoiler] Shortly after gaining the power of Geass from C.C., Lelouch assumes the secret identity of Zero, a mysterious, masked revolutionary dressed in a black helmet and cloak. The helmet has a retractable plate over the left eye so Lelouch can use his Geass. In this guise, he forms the Black Knights, initially composed of Kaname Ohgi's resistance group members. The goal of this vigilante group is a campaign against influential individuals who oppress the helpless, which he eventually expands into reforming Japan as an independent nation. Lelouch is willing to do whatever it takes to carry out his goal, even if it means lying to his followers and using people as bait for the outcome he desires. However, he has trouble putting his close friends in harms way for the sake of his goal, which is a weakness as a commander but a remnant of his humanity and sanity. In particular, his feelings for Nunnally often hinder his plans, particularly at the end of the first season, where he abandons a massive war with Britannian forces to rescue her. He has come to embrace the fact that he needs to destroy before reconstruction can occur, even if it means harming those he cares for. Initially, Lelouch is motivated by the desire to avenge his mother's death and construct an ideal world where his sister Nunnally can live peacefully. After Nunnally becomes Viceroy of Area 11, and her wishes conflict with his goals, his friends help him to realize that his rebellion is no longer just for Nunnally but for all the people of the world. [/Spoiler]\n\nFirst Season:\n\n[Spoiler] Lelouch makes his first appearance at the beginning of the first episode of the series, as a child, along with Suzaku Kururugi watching the Britannian Military entering Japan, with the figure of C.C. watching them. He is introduced to be a student of Ashford Academy, a member of its Student Council. He is a brilliant thinker who is exceptionally talented at chess. He lives with his younger sister, Nunnally, and their maid, Sayoko, in the Student Council building of Ashford Academy, where they are looked after by the Ashford Family. Lelouch and his friend Rivalz enter a room where a chess match was being played, with Lelouch claiming he can turn the situation on the chess table in under 9 minutes. He effortlessly crushes him in a short period (8 minutes, 32 seconds) while the noble gapes at his defeat.  As they walk out of the casino, they are interrupted by Clovis's \"heart-breaking\" speech, which turns out to be an act. On the road, Rivalz accidentally cuts the way of the terrorists, resulting in their vehicle's crash. Soon enough, Lelouch is swept into the conflict between the Holy Britannian Empire and Japanese Resistance Operatives. Suzaku, who Lelouch had not met for seven years, finds the vehicle and confronts Lelouch, who he mistakes as a terrorist. Nagata opens the capsule, and instead of gas, a restrained C.C. appears. Before they can get answers, Suzaku's superior comes and tells him not to question his briefing and shoot the \"terrorist,\" Lelouch. When he refuses, he got shot in the back. Lelouch and C.C. take the opportunity to escape. Just as they seem to have evaded detection, Lelouch's phone rings, giving him away; as they are about to kill him, C.C. jumps in front and shot in the forehead. However, surprisingly, he is grabbed by the hand of C.C., who proposes a contract that would allow him to live and endow him with Geass, the power of kings. He accepts and stands up, reinvigorated, and uses his ability to make his pursuers kill themselves. Following his actions, Villetta Nu appears in her Sutherland, and Lelouch decides to take it and uses his Geass on her. After using his newfound power, he attempts to crush the rest of the Britannian Military that is wiping out the Elevens in the Shinjuku Ghetto. He uses Ohgi's Resistance Group and gives them orders to eliminate the Britannian Soldiers. Later on, Britannian Army's experimental Knightmare Lancelot, piloted by Suzaku, ruins Lelouch's plans. Just as the Britannian Army corners the terrorists, Clovis orders an immediate cease-fire under coercion by Lelouch. Lelouch confronts Clovis at gunpoint about the murder of his mother, Marianne vi Britannia, before killing him. When he returns to Ashford Academy, he discovers that Kallen Stadtfeld, one of the terrorists he helped Shinjuku Ghetto, attends the same school. Limitations to his power are also revealed when he attempts to question her and unsuccessfully erase her memory. Both he and Kallen attempt to gain information from each other through Sayoko. To Lelouch's surprise, C.C., the girl who gave him Geass, shows up alive in his residence. He discovers that she is immortal and learns more about his Geass ability. Unknown to Lelouch, Cornelia had set a trap for Zero at the Saitama Ghetto by simulating the conditions in Shinjuku Ghetto. Despite C.C.'s warnings, Lelouch takes the bait and goes to the aid of the Saitama resistance. His plan falls apart from a combination of Cornelia's superior tactics and the resistance cell's different motivations. Lelouch is cornered and nearly discovered, but C.C. dons his Zero costume and distracts the Britannian Army, allowing him to escape. Lelouch blames his defeat on the undisciplined rebels and resolves to build something better than a mere resistance unit, first an army, \"people,\" and finally a nation. He later forms The Order of the Black Knights during the Japanese Liberation Front Hotel Incident after rescuing the hostages. He leads the Black Knights becoming a revolutionary and gains popular support amongst the Elevens. The turning point in his rebellion comes when Euphemia li Britannia declares the region under Mt. Fuji, the Special Administrative Zone of Japan, giving the Japanese people their name and country back, albeit in a much smaller area. This decrement effectively destroys any possibility of the Black Knights' rebellion; acceptance would render them powerless, and refusal would make them pariahs. Lelouch confronts her at the opening ceremony and tries to have her shoot him, hoping to make himself a martyr. When she mentions giving her title up, he surrenders and agrees to work with her. However, his Geass permanently activates, and an offhand comment about ordering her to kill the Japanese forces her to do just that. Lelouch got forced to kill Euphemia to end the ensuing massacre, but he becomes a hero of the people in doing so. Using this newfound support, Lelouch announces the creation of the United States of Japan and can lead an attack on the Tokyo Settlement. The episode goes well at first, but when Lelouch learns that Nunnally got kidnapped, he abandons the battle, leaving his forces helpless against the much better organized Britannian forces. On his way to rescue Nunnally, Jeremiah intercepts him after an ensuing battle. Lelouch and C.C. make their way to Kamine Island to search for Nunnally, but Jeremiah appears once more. Being unable to defeat him as the Gawain has taken its toll in the many battles it has participated in, C.C. decides to sacrifice herself and drops Lelouch off. Afterward, Suzaku Kuruguri confronted Lelouch. Kallen appears as well, and Suzaku reveals to her that Zero's true identity is Lelouch. Lelouch attempts to broker a truce, trying to convince Suzaku to help him find Nunnally, but Suzaku is distraught over the death of Euphemia and refuses to listen. An angered Lelouch draws his pistol, and he and Suzaku attempt to shoot one another. A single gunshot is heard as the screen fades to black at the end of the first season. [/Spoiler]\n\nSecond Season:\n\n[Spoiler] One year later, Lelouch is once again a student at Ashford Academy. He has had his memories rewritten by Charles Zi Britannia, revealed to possess a Geass power of his own, erasing his memory of being a prince, being Zero, and having a younger brother named Rolo Lamperouge instead of a sister. He is seen running away from Villetta Nu, who is revealed to be a teacher now in the first episode. He is able to leave Ashford Academy with Rolo to go gamble at Babel Tower. It is here where Kallen and the remnants of the Black Knights attempt to retrieve Zero. After being cornered by the OSI, C.C. appears and restores Lelouch's memories. Afterward, Urabe and Kallen appear in their respective Knightmares, and he resumes leadership of the Black Knights. Initially, Lelouch makes his base in the Chinese Federation's consulate, using his Geass on the High Eunuch stationed there so Hifh Eunuch will welcome them. When Nunnally is appointed as Viceroy of Area 11 and announces her plans to re-establish the Special Administrative Zone of Japan, Lelouch falls into a depression since he would be impeding her wishes by continuing his rebellion. He nearly begins taking Refrain before Kallen stops him. With the help of Kallen and his friends at the Ashford Academy, Lelouch realizes that his mission no longer revolves solely around Nunnally but concerns the rest of his friends and the Japanese people as well. Lelouch engineers the legal exile of the Black Knights by getting the Britannians to agree to exile Zero in exchange for bringing one million participants for Nunnally's new Japan. By having them all dress as Zero, he forces Suzaku to exile the Black Knights. They successfully escape to the Chinese Federation, where Lelouch begins allying with the other world powers to create a force that rivals Britannia. During his time in Area 11, Jeremiah Gottwald restores Shirley's memories right before she got shot by Rolo Lamperouge, an assassin for the Geass Directorate. Unable to retaliate against either, as they are now his allies, Lelouch instead wipes out the Directorate, in the process learning of C.C.'s wish to die and that the Emperor has become immortal. C.C. would have had Lelouch kill her and take on her immortality, but instead spares him by placing him inside her memories while the Emperor kills her. Lelouch refuses to let her die unhappy, encouraging her to live on, but memories of her life after gaining Geass are erased during their escape. Once Lelouch's new alliance, the United Federation of Nations, is formed, their first act is to liberate Japan. To ensure Nunnally's safety, Lelouch meets with Suzaku in an attempt to convince him to help. Lelouch takes full responsibility for all that he has done rather than admit the truth, but Suzaku agrees to help since he recognized what Lelouch is doing. Kallen meets up with Lelouch to tell him that Ohgi wants him to come to warehouse 9. In the elevator, Kallen expresses to Lelouch her gratitude for Nunnally's help when she was captured. They then arrive to see that the core members of the Black Knights are betraying him, stating they know his real identity and Geass power. With Lelouch backed into a corner, he reveals his identity and lies that everything he has done was for his entertainment to save Kallen from dying with him, telling her that she needs to live. As they are about to gun Lelouch down, Rolo appears in the Shinkirō to evacuate him but dies in the attempt as he overuses his Geass. Lelouch comes to terms with his feelings for Rolo and buries him properly as the little brother of Lelouch Lamperouge. Following the betrayal of the Black Knights, Lelouch focuses on defeating the Emperor. Lelouch confronts the Emperor in the Sword of Akasha, where he learns the truth about his mother and Charles' plans. Lelouch denies their attempt to create a new world and kills both Charles and Marianne with C.C. and Suzaku. One month later, he installs himself as the 99th Emperor of Britannia and appoints Suzaku as his Knight of Zero. As Emperor, Lelouch abolishes all the oppressive laws and class systems of Britannia, frees every colony (thereby negating the concept of \"Numbers\"), and puts down all resistance to his goals. However, the seemingly benevolent acts are a smokescreen for his intention to take over the world, which he calls the Zero Requiem. He announces that Britannia intends to join the U.F.N. At the meeting, Lelouch takes the council members hostage after learning Britannia's large population would give him a majority voting block. This confusion brings him into conflict with Schneizel and the Black Knights, the former bringing his F.L.E.I.J.A.-equipped floating fortress into the battle. The biggest surprise comes when Nunnally is revealed to be alive and declares herself to be his and Suzaku's enemy. Though initially reluctant, Lelouch is convinced that he must fight her for the sake of his plan. Using Nina's countermeasure, Lelouch and Suzaku disable the F.L.E.I.J.A., and the two proceed to board the Damocles. He manages to place Schneizel under his control and then confronts Nunnally, who has regained her sight. Lelouch uses his Geass on Nunnally to get her to hand over the F.L.E.I.J.A. launch button and takes over Damocles. With no one left capable of opposing him, Lelouch becomes the ruler of the world. Sometime after the battle with Schneizel and the Black Knights, Lelouch appoints Marrybell in charge of Damocles. Lelouch arranges the public execution of the Black Knight leaders and the U.F.N. representatives. Suzaku, disguised as Zero, interrupts and kills Lelouch, the culmination of the Zero Requiem as they had planned. [/Spoiler]\n\n[Spoiler] By directing all the hatred of the world onto him, Lelouch's death will serve to facilitate peace; while simultaneously redeeming both Lelouch's and Suzaku's sins by having them impose the most significant punishments on themselves. Finally, Lelouch wished for a tomorrow to Nunnally, life for Suzaku, who wanted to atone his since through death. At the same time, during the Glinda Knights' and Peace Mark's assault on Damocles, Marrybell and Orpheus fall to their deaths. Nunnally can only watch in shock. When Lelouch falls near her, she takes his hand and realizes that he had sacrificed himself on purpose, for her dream and world peace. Lelouch dies smiling in the arms of a crying Nunnally, saying he has destroyed the world and created it anew. Suzaku is left playing the role of Zero. The aftermath is narrated by Kallen, who ends up forgiving Lelouch as she has realized Lelouch's true intentions were noble and explained how the world is much better off with all the energy being focused on reconstruction. During the final scene of the series, C.C. makes one last remark to Lelouch about how she may have been wrong about Geass condemning one to a life of solitude. [/Spoiler]\n\nGeass:\n\nLelouch's Geass, bestowed upon him by C.C., gives him \"The Power of Absolute Obedience,\" allowing him to plant commands within a person's mind upon eye contact in a manner comparable to hypnosis. Activation of his Geass is visually represented by the manifestation of a Geass Sigil in his left eye. Commands dictated are written into the minds of the designated targets, the Sigil projecting him from his eye to theirs.\n\n[Spoiler] Lelouch could initially toggle Geass activation at will but subsequently lost this control and suffered from an affliction known as \"runaway Geass\" near the end of the first series. In the second season, C.C. gives Lelouch a contact lens that blocks his Geass but indicates that his Geass will eventually grow powerful enough to render it ineffective. Lelouch's Geass evolves to cover both of his eyes in episode 21 due to pushing his Geass to the limit, trying to command C's World, the collective unconscious of humanity itself. He receives a second contact lens to cover it later. [/Spoiler]\n\nOf all the Geass abilities in the series, Lelouch's has been explored the most and also seems to have the most restrictions, and side effects of any Geass introduced:Only affects the nervous system.\nCommands must be issued verbally.\nThe victim must make direct eye contact for commands to be issued. The maximum effective distance is 272 meters. A line of sight via a reflective surface is sufficient for the effect to occur.\nCommands may be issued only once to any given individual, but any number of commands may be issued at the initial application so long as eye contact is unbroken. Since Jeremiah's Geass Canceller negates all Geass effects, those exposed to it may be commanded once again.\nThe victim will not perform any action disallowed by their physical or mental capabilities, though they will try to carry out the command to the best of their ability. However, orders that affect the mind or consciousness (such as erasing memories or seeing hallucinations) are possible even though the victim could not usually force themselves to do so. Also, commands that ask for something unpreventable and physically impossible, such as telling a dying person to \"not die,\" will not have to make them immune to death.\nAn action will be carried out for as long as dictated in its command or the indicated conditional circumstance. Eye contact does not need to be maintained for command execution to occur. No upper limit has been established, but the conditional command Lelouch gives Suzaku is still in effect more than a year later.\nThe victim's memories for the duration of command issue and execution are sealed and cannot be recalled.\nAs demonstrated in Princess Euphemia's response to the command that she kills the Japanese, a victim may resist a commanded action to some degree if it is utterly appalling and morally incomprehensible to them.(Source: Code Geass Wiki, Villains Wiki, Heroes Wiki, Anime and Manga Universe Wiki)"}]},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":9276,"has_next_page":true,"current_page":1,"items":{"count":25,"total":231882,"per_page":25}},"data":[{"mal_id":417,"url":"https://myanimelist.net/character/417/Lelouch_Lamperouge","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/8/406163.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/8/406163t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/8/406163.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/8/406163t.webp"}},"name":"Lamperouge, Lelouch","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":181838,"about":"Age: 17 (first season), 18 (second season)\n\nBirthdate:  December 5, 1999 a.t.b. (Sagittarius)\n\nBlood Type: A\n\nNationality: Britannia\n\nHeight: 178 cm (5'10\")\n\nOccupation: Student, Terrorist, Knightmare Pilot, Politician, Emperor, Prince\n\nAllegiance: Order of the Black Knights\n\nPosition: Leader of the Black Knights\n\nKnightmare: Sutherland, Burai, Gawain, Shinkirou\n\nLelouch is the main protagonist of the anime/manga series Code Geass. He is the Eleventh Prince of the Holy Britannian Empire and the son of the 98th Emperor of Britannia, Charles zi Britannia.\n\nLelouch is a very clever individual who is also calm, sophisticated, and arrogant due to his aristocratic upbringing. While at school, Lelouch conducts himself as a friendly, likable, and often an easygoing student. However, this is a mask to hide his true nature. While as Zero, his true nature is expressed. His charisma and beliefs in justice gain him the trust and respect of many soldiers and leaders.\n\nHe is known for having a very stoic personality. He never cared about schoolwork, seeing the entire thing as trivial, even though his high intelligence would make it easy for him. He enjoys seeking out challenges, often playing chess against the nobility. In general, Lelouch takes most day-to-day affairs with open disinterest, often not even noticing the affection of others, especially Shirley, his classmate. He has a strong dislike for nobles, viewing them as tepid and \"overprivileged parasites.\"\n\nMany characters have noted that Lelouch is entirely selfish, as his desire to remake the world into what he wants it to become from his desire to avenge his mother's apparent death and Nunnally's sake. However, in time, he realizes that this goal is not just for them but also the entire world.\n\nDespite his cold, calculating demeanor and ruthlessness in battle, he can be a rather compassionate person to his friends and loved ones. To Nunnally, he is a loving older brother, and to Suzaku, a loyal friend, although the two are enemies. Lelouch, at first glance, seems to have relatively little concern for the well-being of his subordinates, but in reality, he does care about them, seeing them as valuable allies.\n\n[Spoiler] As the series progresses, Lelouch suffers traumas and further losses that further deepen his resolve. However, he also grows less merciful to his enemies if he cannot Geass them. [/Spoiler]\n\nBackground (as Lelouch):\n\n[Spoiler] Lelouch was born on December 5, 1999, a.t.b. as Lelouch vi Britannia, the son of Charles Zi Britannia, and the late Imperial Consort Marianne, making Lelouch the Eleventh Prince of the Holy Britannian Empire. He was in line to be the seventeenth heir to the throne before his mother's assassination and his sister's crippling in the same incident. A ten-year-old Lelouch confronted the Emperor afterward and accused him of leaving his mother defenseless, even going as far as renouncing his entitlement to the throne. In response, his father banished him to Japan and used him as a political hostage in the Sakuradite conflict. During his stay at the Kururugi household, he first met Suzaku Kururugi, with whom the young Lelouch did not interact initially in a friendly way, before later becoming friends. However, when Britannia finally developed its Knightmare Frames fleet and decided to invade Japan to seize control of the Sakuradite mines, discarding Lelouch's use as a diplomatic tool. Lelouch, fearing for his sister's safety, hid their true identities and sought the help of the Ashford family, who were his mother's allies. His mother's death and his father's apparent lack of concern regarding it were considerable blows to Lelouch. He always felt that it was unfair for both his mother and sister and made it his goal to pursue a better world for Nunnally. He also seeks to discover the valid reason for his mother's death, who got murdered in the Aries Imperial Palace, a place terrorists would be unlikely to penetrate successfully without being noticed, if at all. [/Spoiler]\n\nBackground (as Zero):\n\n[Spoiler] Shortly after gaining the power of Geass from C.C., Lelouch assumes the secret identity of Zero, a mysterious, masked revolutionary dressed in a black helmet and cloak. The helmet has a retractable plate over the left eye so Lelouch can use his Geass. In this guise, he forms the Black Knights, initially composed of Kaname Ohgi's resistance group members. The goal of this vigilante group is a campaign against influential individuals who oppress the helpless, which he eventually expands into reforming Japan as an independent nation. Lelouch is willing to do whatever it takes to carry out his goal, even if it means lying to his followers and using people as bait for the outcome he desires. However, he has trouble putting his close friends in harms way for the sake of his goal, which is a weakness as a commander but a remnant of his humanity and sanity. In particular, his feelings for Nunnally often hinder his plans, particularly at the end of the first season, where he abandons a massive war with Britannian forces to rescue her. He has come to embrace the fact that he needs to destroy before reconstruction can occur, even if it means harming those he cares for. Initially, Lelouch is motivated by the desire to avenge his mother's death and construct an ideal world where his sister Nunnally can live peacefully. After Nunnally becomes Viceroy of Area 11, and her wishes conflict with his goals, his friends help him to realize that his rebellion is no longer just for Nunnally but for all the people of the world. [/Spoiler]\n\nFirst Season:\n\n[Spoiler] Lelouch makes his first appearance at the beginning of the first episode of the series, as a child, along with Suzaku Kururugi watching the Britannian Military entering Japan, with the figure of C.C. watching them. He is introduced to be a student of Ashford Academy, a member of its Student Council. He is a brilliant thinker who is exceptionally talented at chess. He lives with his younger sister, Nunnally, and their maid, Sayoko, in the Student Council building of Ashford Academy, where they are looked after by the Ashford Family. Lelouch and his friend Rivalz enter a room where a chess match was being played, with Lelouch claiming he can turn the situation on the chess table in under 9 minutes. He effortlessly crushes him in a short period (8 minutes, 32 seconds) while the noble gapes at his defeat.  As they walk out of the casino, they are interrupted by Clovis's \"heart-breaking\" speech, which turns out to be an act. On the road, Rivalz accidentally cuts the way of the terrorists, resulting in their vehicle's crash. Soon enough, Lelouch is swept into the conflict between the Holy Britannian Empire and Japanese Resistance Operatives. Suzaku, who Lelouch had not met for seven years, finds the vehicle and confronts Lelouch, who he mistakes as a terrorist. Nagata opens the capsule, and instead of gas, a restrained C.C. appears. Before they can get answers, Suzaku's superior comes and tells him not to question his briefing and shoot the \"terrorist,\" Lelouch. When he refuses, he got shot in the back. Lelouch and C.C. take the opportunity to escape. Just as they seem to have evaded detection, Lelouch's phone rings, giving him away; as they are about to kill him, C.C. jumps in front and shot in the forehead. However, surprisingly, he is grabbed by the hand of C.C., who proposes a contract that would allow him to live and endow him with Geass, the power of kings. He accepts and stands up, reinvigorated, and uses his ability to make his pursuers kill themselves. Following his actions, Villetta Nu appears in her Sutherland, and Lelouch decides to take it and uses his Geass on her. After using his newfound power, he attempts to crush the rest of the Britannian Military that is wiping out the Elevens in the Shinjuku Ghetto. He uses Ohgi's Resistance Group and gives them orders to eliminate the Britannian Soldiers. Later on, Britannian Army's experimental Knightmare Lancelot, piloted by Suzaku, ruins Lelouch's plans. Just as the Britannian Army corners the terrorists, Clovis orders an immediate cease-fire under coercion by Lelouch. Lelouch confronts Clovis at gunpoint about the murder of his mother, Marianne vi Britannia, before killing him. When he returns to Ashford Academy, he discovers that Kallen Stadtfeld, one of the terrorists he helped Shinjuku Ghetto, attends the same school. Limitations to his power are also revealed when he attempts to question her and unsuccessfully erase her memory. Both he and Kallen attempt to gain information from each other through Sayoko. To Lelouch's surprise, C.C., the girl who gave him Geass, shows up alive in his residence. He discovers that she is immortal and learns more about his Geass ability. Unknown to Lelouch, Cornelia had set a trap for Zero at the Saitama Ghetto by simulating the conditions in Shinjuku Ghetto. Despite C.C.'s warnings, Lelouch takes the bait and goes to the aid of the Saitama resistance. His plan falls apart from a combination of Cornelia's superior tactics and the resistance cell's different motivations. Lelouch is cornered and nearly discovered, but C.C. dons his Zero costume and distracts the Britannian Army, allowing him to escape. Lelouch blames his defeat on the undisciplined rebels and resolves to build something better than a mere resistance unit, first an army, \"people,\" and finally a nation. He later forms The Order of the Black Knights during the Japanese Liberation Front Hotel Incident after rescuing the hostages. He leads the Black Knights becoming a revolutionary and gains popular support amongst the Elevens. The turning point in his rebellion comes when Euphemia li Britannia declares the region under Mt. Fuji, the Special Administrative Zone of Japan, giving the Japanese people their name and country back, albeit in a much smaller area. This decrement effectively destroys any possibility of the Black Knights' rebellion; acceptance would render them powerless, and refusal would make them pariahs. Lelouch confronts her at the opening ceremony and tries to have her shoot him, hoping to make himself a martyr. When she mentions giving her title up, he surrenders and agrees to work with her. However, his Geass permanently activates, and an offhand comment about ordering her to kill the Japanese forces her to do just that. Lelouch got forced to kill Euphemia to end the ensuing massacre, but he becomes a hero of the people in doing so. Using this newfound support, Lelouch announces the creation of the United States of Japan and can lead an attack on the Tokyo Settlement. The episode goes well at first, but when Lelouch learns that Nunnally got kidnapped, he abandons the battle, leaving his forces helpless against the much better organized Britannian forces. On his way to rescue Nunnally, Jeremiah intercepts him after an ensuing battle. Lelouch and C.C. make their way to Kamine Island to search for Nunnally, but Jeremiah appears once more. Being unable to defeat him as the Gawain has taken its toll in the many battles it has participated in, C.C. decides to sacrifice herself and drops Lelouch off. Afterward, Suzaku Kuruguri confronted Lelouch. Kallen appears as well, and Suzaku reveals to her that Zero's true identity is Lelouch. Lelouch attempts to broker a truce, trying to convince Suzaku to help him find Nunnally, but Suzaku is distraught over the death of Euphemia and refuses to listen. An angered Lelouch draws his pistol, and he and Suzaku attempt to shoot one another. A single gunshot is heard as the screen fades to black at the end of the first season. [/Spoiler]\n\nSecond Season:\n\n[Spoiler] One year later, Lelouch is once again a student at Ashford Academy. He has had his memories rewritten by Charles Zi Britannia, revealed to possess a Geass power of his own, erasing his memory of being a prince, being Zero, and having a younger brother named Rolo Lamperouge instead of a sister. He is seen running away from Villetta Nu, who is revealed to be a teacher now in the first episode. He is able to leave Ashford Academy with Rolo to go gamble at Babel Tower. It is here where Kallen and the remnants of the Black Knights attempt to retrieve Zero. After being cornered by the OSI, C.C. appears and restores Lelouch's memories. Afterward, Urabe and Kallen appear in their respective Knightmares, and he resumes leadership of the Black Knights. Initially, Lelouch makes his base in the Chinese Federation's consulate, using his Geass on the High Eunuch stationed there so Hifh Eunuch will welcome them. When Nunnally is appointed as Viceroy of Area 11 and announces her plans to re-establish the Special Administrative Zone of Japan, Lelouch falls into a depression since he would be impeding her wishes by continuing his rebellion. He nearly begins taking Refrain before Kallen stops him. With the help of Kallen and his friends at the Ashford Academy, Lelouch realizes that his mission no longer revolves solely around Nunnally but concerns the rest of his friends and the Japanese people as well. Lelouch engineers the legal exile of the Black Knights by getting the Britannians to agree to exile Zero in exchange for bringing one million participants for Nunnally's new Japan. By having them all dress as Zero, he forces Suzaku to exile the Black Knights. They successfully escape to the Chinese Federation, where Lelouch begins allying with the other world powers to create a force that rivals Britannia. During his time in Area 11, Jeremiah Gottwald restores Shirley's memories right before she got shot by Rolo Lamperouge, an assassin for the Geass Directorate. Unable to retaliate against either, as they are now his allies, Lelouch instead wipes out the Directorate, in the process learning of C.C.'s wish to die and that the Emperor has become immortal. C.C. would have had Lelouch kill her and take on her immortality, but instead spares him by placing him inside her memories while the Emperor kills her. Lelouch refuses to let her die unhappy, encouraging her to live on, but memories of her life after gaining Geass are erased during their escape. Once Lelouch's new alliance, the United Federation of Nations, is formed, their first act is to liberate Japan. To ensure Nunnally's safety, Lelouch meets with Suzaku in an attempt to convince him to help. Lelouch takes full responsibility for all that he has done rather than admit the truth, but Suzaku agrees to help since he recognized what Lelouch is doing. Kallen meets up with Lelouch to tell him that Ohgi wants him to come to warehouse 9. In the elevator, Kallen expresses to Lelouch her gratitude for Nunnally's help when she was captured. They then arrive to see that the core members of the Black Knights are betraying him, stating they know his real identity and Geass power. With Lelouch backed into a corner, he reveals his identity and lies that everything he has done was for his entertainment to save Kallen from dying with him, telling her that she needs to live. As they are about to gun Lelouch down, Rolo appears in the Shinkirō to evacuate him but dies in the attempt as he overuses his Geass. Lelouch comes to terms with his feelings for Rolo and buries him properly as the little brother of Lelouch Lamperouge. Following the betrayal of the Black Knights, Lelouch focuses on defeating the Emperor. Lelouch confronts the Emperor in the Sword of Akasha, where he learns the truth about his mother and Charles' plans. Lelouch denies their attempt to create a new world and kills both Charles and Marianne with C.C. and Suzaku. One month later, he installs himself as the 99th Emperor of Britannia and appoints Suzaku as his Knight of Zero. As Emperor, Lelouch abolishes all the oppressive laws and class systems of Britannia, frees every colony (thereby negating the concept of \"Numbers\"), and puts down all resistance to his goals. However, the seemingly benevolent acts are a smokescreen for his intention to take over the world, which he calls the Zero Requiem. He announces that Britannia intends to join the U.F.N. At the meeting, Lelouch takes the council members hostage after learning Britannia's large population would give him a majority voting block. This confusion brings him into conflict with Schneizel and the Black Knights, the former bringing his F.L.E.I.J.A.-equipped floating fortress into the battle. The biggest surprise comes when Nunnally is revealed to be alive and declares herself to be his and Suzaku's enemy. Though initially reluctant, Lelouch is convinced that he must fight her for the sake of his plan. Using Nina's countermeasure, Lelouch and Suzaku disable the F.L.E.I.J.A., and the two proceed to board the Damocles. He manages to place Schneizel under his control and then confronts Nunnally, who has regained her sight. Lelouch uses his Geass on Nunnally to get her to hand over the F.L.E.I.J.A. launch button and takes over Damocles. With no one left capable of opposing him, Lelouch becomes the ruler of the world. Sometime after the battle with Schneizel and the Black Knights, Lelouch appoints Marrybell in charge of Damocles. Lelouch arranges the public execution of the Black Knight leaders and the U.F.N. representatives. Suzaku, disguised as Zero, interrupts and kills Lelouch, the culmination of the Zero Requiem as they had planned. [/Spoiler]\n\n[Spoiler] By directing all the hatred of the world onto him, Lelouch's death will serve to facilitate peace; while simultaneously redeeming both Lelouch's and Suzaku's sins by having them impose the most significant punishments on themselves. Finally, Lelouch wished for a tomorrow to Nunnally, life for Suzaku, who wanted to atone his since through death. At the same time, during the Glinda Knights' and Peace Mark's assault on Damocles, Marrybell and Orpheus fall to their deaths. Nunnally can only watch in shock. When Lelouch falls near her, she takes his hand and realizes that he had sacrificed himself on purpose, for her dream and world peace. Lelouch dies smiling in the arms of a crying Nunnally, saying he has destroyed the world and created it anew. Suzaku is left playing the role of Zero. The aftermath is narrated by Kallen, who ends up forgiving Lelouch as she has realized Lelouch's true intentions were noble and explained how the world is much better off with all the energy being focused on reconstruction. During the final scene of the series, C.C. makes one last remark to Lelouch about how she may have been wrong about Geass condemning one to a life of solitude. [/Spoiler]\n\nGeass:\n\nLelouch's Geass, bestowed upon him by C.C., gives him \"The Power of Absolute Obedience,\" allowing him to plant commands within a person's mind upon eye contact in a manner comparable to hypnosis. Activation of his Geass is visually represented by the manifestation of a Geass Sigil in his left eye. Commands dictated are written into the minds of the designated targets, the Sigil projecting him from his eye to theirs.\n\n[Spoiler] Lelouch could initially toggle Geass activation at will but subsequently lost this control and suffered from an affliction known as \"runaway Geass\" near the end of the first series. In the second season, C.C. gives Lelouch a contact lens that blocks his Geass but indicates that his Geass will eventually grow powerful enough to render it ineffective. Lelouch's Geass evolves to cover both of his eyes in episode 21 due to pushing his Geass to the limit, trying to command C's World, the collective unconscious of humanity itself. He receives a second contact lens to cover it later. [/Spoiler]\n\nOf all the Geass abilities in the series, Lelouch's has been explored the most and also seems to have the most restrictions, and side effects of any Geass introduced:Only affects the nervous system.\nCommands must be issued verbally.\nThe victim must make direct eye contact for commands to be issued. The maximum effective distance is 272 meters. A line of sight via a reflective surface is sufficient for the effect to occur.\nCommands may be issued only once to any given individual, but any number of commands may be issued at the initial application so long as eye contact is unbroken. Since Jeremiah's Geass Canceller negates all Geass effects, those exposed to it may be commanded once again.\nThe victim will not perform any action disallowed by their physical or mental capabilities, though they will try to carry out the command to the best of their ability. However, orders that affect the mind or consciousness (such as erasing memories or seeing hallucinations) are possible even though the victim could not usually force themselves to do so. Also, commands that ask for something unpreventable and physically impossible, such as telling a dying person to \"not die,\" will not have to make them immune to death.\nAn action will be carried out for as long as dictated in its command or the indicated conditional circumstance. Eye contact does not need to be maintained for command execution to occur. No upper limit has been established, but the conditional command Lelouch gives Suzaku is still in effect more than a year later.\nThe victim's memories for the duration of command issue and execution are sealed and cannot be recalled.\nAs demonstrated in Princess Euphemia's response to the command that she kills the Japanese, a victim may resist a commanded action to some degree if it is utterly appalling and morally incomprehensible to them.(Source: Code Geass Wiki, Villains Wiki, Heroes Wiki, Anime and Manga Universe Wiki)"}]}},"noMatches":{"summary":"No matches","value":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":0,"total":0,"per_page":25}},"data":[]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/characters?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters"}}}}}}},"operationId":"getCharacters"}},"/characters/{id}":{"get":{"summary":"Character Details","tags":["Characters"],"description":"Get a character by their MyAnimeList ID.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"}],"responses":{"200":{"description":"Successful response returning character details","content":{"application/json":{"schema":{"description":"Successful response returning character details","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"name":{"type":"string"},"name_kanji":{"type":"string","nullable":true},"nicknames":{"type":"array","items":{"type":"string"}},"favorites":{"type":"integer"},"about":{"type":"string","nullable":true}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/character/1/Spike_Spiegel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/11/516853.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/11/516853t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/11/516853.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/11/516853t.webp"}},"name":"Spiegel, Spike","name_kanji":"スパイク・スピーゲル","nicknames":[],"favorites":49473,"about":"Birthdate: June 26, 2044\n\nHeight: 185 cm (6' 1\")\n\nWeight: 70 kg (155 lbs)\n\nBlood type: O\n\nPlanet of Origin: Mars\n\nSpike Spiegel is a tall and lean 27-year-old bounty hunter born on Mars. The inspiration for Spike is found in martial artist Bruce Lee who uses the martial arts style of Jeet Kune Do as depicted in Session 8, \"Waltz For Venus\". He has fluffy, dark green hair (which is inspired by Yusaku Matsuda's) and reddish brown eyes, one of which is artificial and lighter than the other. He is usually dressed in a blue leisure suit, with a yellow shirt and Lupin III inspired boots. A flashback in Session 6 revealed it was his fully functioning right eye which was surgically replaced by the cybernetic one (although Spike himself may not have conscious recollection of the procedure since he claims to have lost his natural eye in an \"accident\"). One theory is that his natural eye may have been lost during the pre-series massacre in which he supposedly \"died\". The purpose of this cybernetic eye is never explicitly stated, though it apparently gives him exceptional hand-eye coordination - particularly with firearms (Spike's gun of choice is a Jericho 941, as seen throughout the series). In the first episode, when facing a bounty-head using Red Eye, Spike mocks him, calling his moves \"too slow\". At first, this seems like posturing on Spike's part, but even with his senses and reflexes accelerated to superhuman levels by the drug, the bounty cannot even touch Spike. A recurring device throughout the entire show is a closeup on Spike's fully-natural left eye before dissolving to a flashback of his life as part of the syndicate. As said by Spike himself in the last episode, his right eye \"only sees the present\" and his left eye \"only sees the past.\" Spike often has a bent cigarette between his lips, sometimes despite rain or \"No Smoking\" signs."}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/characters/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/1"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/1"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/1"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Character with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/characters/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/1"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/1"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/1"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/1"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/1"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/1"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/1"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/1"}}}}}}},"operationId":"getCharactersById"}},"/characters/{id}/full":{"get":{"summary":"Character Full Details","tags":["Characters"],"description":"Get a character with all their extra details in one request.\n\n> SFW flags filter out non-sfw anime and manga from the character's appearances.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning full character details","content":{"application/json":{"schema":{"description":"Successful response returning full character details","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"name":{"type":"string"},"name_kanji":{"type":"string","nullable":true},"nicknames":{"type":"array","items":{"type":"string"}},"favorites":{"type":"integer"},"about":{"type":"string","nullable":true},"anime":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"anime":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}},"manga":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"manga":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}},"voices":{"type":"array","items":{"type":"object","properties":{"person":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}}},"name":{"type":"string"}}},"language":{"type":"string"}}}}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/character/1/Spike_Spiegel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/11/516853.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/11/516853t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/11/516853.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/11/516853t.webp"}},"name":"Spiegel, Spike","name_kanji":"スパイク・スピーゲル","nicknames":[],"favorites":49473,"about":"Birthdate: June 26, 2044\n\nHeight: 185 cm (6' 1\")\n\nWeight: 70 kg (155 lbs)\n\nBlood type: O\n\nPlanet of Origin: Mars\n\nSpike Spiegel is a tall and lean 27-year-old bounty hunter born on Mars. The inspiration for Spike is found in martial artist Bruce Lee who uses the martial arts style of Jeet Kune Do as depicted in Session 8, \"Waltz For Venus\". He has fluffy, dark green hair (which is inspired by Yusaku Matsuda's) and reddish brown eyes, one of which is artificial and lighter than the other. He is usually dressed in a blue leisure suit, with a yellow shirt and Lupin III inspired boots. A flashback in Session 6 revealed it was his fully functioning right eye which was surgically replaced by the cybernetic one (although Spike himself may not have conscious recollection of the procedure since he claims to have lost his natural eye in an \"accident\"). One theory is that his natural eye may have been lost during the pre-series massacre in which he supposedly \"died\". The purpose of this cybernetic eye is never explicitly stated, though it apparently gives him exceptional hand-eye coordination - particularly with firearms (Spike's gun of choice is a Jericho 941, as seen throughout the series). In the first episode, when facing a bounty-head using Red Eye, Spike mocks him, calling his moves \"too slow\". At first, this seems like posturing on Spike's part, but even with his senses and reflexes accelerated to superhuman levels by the drug, the bounty cannot even touch Spike. A recurring device throughout the entire show is a closeup on Spike's fully-natural left eye before dissolving to a flashback of his life as part of the syndicate. As said by Spike himself in the last episode, his right eye \"only sees the present\" and his left eye \"only sees the past.\" Spike often has a bent cigarette between his lips, sometimes despite rain or \"No Smoking\" signs.","anime":[{"role":"Main","anime":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"title":"Cowboy Bebop"}},{"role":"Main","anime":{"mal_id":5,"url":"https://myanimelist.net/anime/5/Cowboy_Bebop__Tengoku_no_Tobira","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1439/93480.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1439/93480l.webp"}},"title":"Cowboy Bebop: Tengoku no Tobira"}}],"manga":[{"role":"Main","manga":{"mal_id":173,"url":"https://myanimelist.net/manga/173/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.webp"}},"title":"Cowboy Bebop"}},{"role":"Main","manga":{"mal_id":174,"url":"https://myanimelist.net/manga/174/Shooting_Star_Bebop__Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/176770.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/176770t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/176770l.webp"}},"title":"Shooting Star Bebop: Cowboy Bebop"}}],"voices":[{"person":{"mal_id":11,"url":"https://myanimelist.net/people/11/Kouichi_Yamadera","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/92590.jpg"}},"name":"Yamadera, Kouichi"},"language":"Japanese"},{"person":{"mal_id":12,"url":"https://myanimelist.net/people/12/Steven_Blum","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/45741.jpg"}},"name":"Blum, Steven"},"language":"English"}]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/characters/abc/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/1/full"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/1/full"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/1/full"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Character with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/characters/0/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/1/full"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/1/full"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/1/full"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/1/full"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/1/full"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/1/full"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/1/full"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/1/full"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/1/full"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/1/full"}}}}}}},"operationId":"getCharactersByIdFull"}},"/characters/{id}/anime":{"get":{"summary":"Character Anime Appearances","tags":["Characters"],"description":"Get the anime a character appears in.\n\n> SFW flags filter out non-sfw anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning matching anime series","content":{"application/json":{"schema":{"description":"Successful response returning matching anime series","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"anime":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}}},"example":{"data":[{"role":"Main","anime":{"mal_id":1,"url":"https://myanimelist.net/anime/1/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/4/19644.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/4/19644t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/4/19644l.webp"}},"title":"Cowboy Bebop"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/characters/abc/anime"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/1/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/1/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/1/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Character with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/characters/0/anime"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/1/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/1/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/1/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/1/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/1/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/1/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/1/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/1/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/1/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/1/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/1/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/1/anime"}}}}}}},"operationId":"getCharactersByIdAnime"}},"/characters/{id}/manga":{"get":{"summary":"Character Manga Appearances","tags":["Characters"],"description":"Get the manga a character appears in.\n\n> SFW flags filter out non-sfw manga.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning matching manga series","content":{"application/json":{"schema":{"description":"Successful response returning matching manga series","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"manga":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}}},"example":{"data":[{"role":"Main","manga":{"mal_id":173,"url":"https://myanimelist.net/manga/173/Cowboy_Bebop","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/5/166652.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/5/166652t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/5/166652l.webp"}},"title":"Cowboy Bebop"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/characters/abc/manga"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/1/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/1/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/1/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Character with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/characters/0/manga"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/1/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/1/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/1/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/1/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/1/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/1/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/1/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/1/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/1/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/1/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/1/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/1/manga"}}}}}}},"operationId":"getCharactersByIdManga"}},"/characters/{id}/voices":{"get":{"summary":"Character Voice Actors","tags":["Characters"],"description":"Get a character's voice actors.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"}],"responses":{"200":{"description":"Successful response returning voice actors","content":{"application/json":{"schema":{"description":"Successful response returning voice actors","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"language":{"type":"string"},"person":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}}},"name":{"type":"string"}}}}}}},"example":{"data":[{"language":"Japanese","person":{"mal_id":11,"url":"https://myanimelist.net/people/11/Kouichi_Yamadera","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/92590.jpg"}},"name":"Yamadera, Kouichi"}},{"language":"English","person":{"mal_id":12,"url":"https://myanimelist.net/people/12/Steven_Blum","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/45741.jpg"}},"name":"Blum, Steven"}},{"language":"French","person":{"mal_id":9237,"url":"https://myanimelist.net/people/9237/Yann_Pichon","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/72205.jpg"}},"name":"Pichon, Yann"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/characters/abc/voices"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/1/voices"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/1/voices"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/1/voices"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Character with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/characters/0/voices"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/1/voices"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/1/voices"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/1/voices"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/1/voices"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/1/voices"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/1/voices"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/1/voices"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/1/voices"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/1/voices"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/1/voices"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/1/voices"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/1/voices"}}}}}}},"operationId":"getCharactersByIdVoices"}},"/characters/{id}/pictures":{"get":{"summary":"Character Pictures","tags":["Characters"],"description":"Get the picture catalogue for a character.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"}],"responses":{"200":{"description":"Successful response returning character pictures","content":{"application/json":{"schema":{"description":"Successful response returning character pictures","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}},"example":{"data":[{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/10/34138.jpg"}},{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/11/34139.jpg"}},{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/5/34140.jpg"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/characters/abc/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/1/pictures"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/1/pictures"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/1/pictures"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Character with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/characters/0/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/1/pictures"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/1/pictures"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/1/pictures"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/1/pictures"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/1/pictures"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/1/pictures"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/1/pictures"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/1/pictures"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/1/pictures"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/1/pictures"}}}}}}},"operationId":"getCharactersByIdPictures"}},"/characters/{id}/articles":{"get":{"summary":"Character Articles","tags":["Characters"],"description":"Get featured articles about a character.\n\n> SFW flags filter out articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":17},"in":"path","name":"id","required":true,"description":"The MAL Character ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":20,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":20,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning character featured articles","content":{"application/json":{"schema":{"description":"Successful response returning character featured articles","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"published_at":{"type":"string","nullable":true},"author_username":{"type":"string"},"author_url":{"type":"string","nullable":true},"views":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"excerpt":{"type":"string"}}}}},"example":{"pagination":{"last_visible_page":5,"has_next_page":true},"data":[{"mal_id":2061,"url":"https://myanimelist.net/featured/2061/18_of_the_Funniest_Anime_Faces_Ever","title":"18 of the Funniest Anime Faces Ever","summary":"Some characters are funny because of all the crazy antics they get up to. But others just have the right kind of physiognomy, which make them prone to pulling off some funny anime faces - intentionally or unintentionally.","published_at":"2017-01-18T10:13:00+00:00","author_username":"MisterD98","author_url":"https://myanimelist.net/profile/MisterD98","views":866451,"tags":["Collection","Funny"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1482965945-3d9561fa5a014da11e0dd3b2f148b1b0.jpeg"}},"excerpt":"Some characters are funny because of all the crazy antics they get up to. But others just have the right kind of physiognomy, which make them prone to pulling off so..."}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/characters/17/articles?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/17/articles"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/17/articles"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/17/articles"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Character with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/characters/0/articles"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/17/articles"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/17/articles"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/17/articles"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/17/articles"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/17/articles"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/17/articles"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/17/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/17/articles"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/17/articles"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/17/articles"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/17/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/17/articles"}}}}}}},"operationId":"getCharactersByIdArticles"}},"/characters/ids":{"get":{"summary":"Get All Character IDs","tags":["Characters"],"description":"Get the ID of every character in one request.","security":[{"serverKey":[]}],"responses":{"200":{"description":"Successful response returning all unique character IDs","content":{"application/json":{"schema":{"description":"Successful response returning all unique character IDs","type":"object","properties":{"data":{"type":"array","items":{"type":"integer"}}},"example":{"data":[1,2,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,21]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/characters/ids"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/characters/ids"}},"missingServerKey":{"summary":"Restricted endpoint without a Server Key","value":{"status":401,"type":"UnauthorizedException","message":"Server Key is required for this endpoint.","error":"Send a valid Server Key in the X-Server-Key header.","path":"/v1/characters/ids"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/characters/ids"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/characters/ids"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/characters/ids"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/characters/ids"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/characters/ids"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/characters/ids"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/characters/ids"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/characters/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/characters/ids"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/characters/ids"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/characters/ids"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/characters/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/characters/ids"}}}}}}},"operationId":"getCharactersIds"}},"/people":{"get":{"summary":"People Search","tags":["People"],"description":"Search and browse the full people catalogue with advanced filters and sorting.\n\n> SFW flags filter out people who only worked on non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search query"},{"schema":{"type":"string","maxLength":1},"in":"query","name":"letter","required":false,"description":"Only entries whose name starts with this letter. One letter, in any case."},{"schema":{"type":"string","maxLength":100},"in":"query","name":"given_name","required":false,"description":"Only people with this given name, such as `Kana`. Matches the whole given name, ignoring case."},{"schema":{"type":"string","maxLength":100},"in":"query","name":"family_name","required":false,"description":"Only people with this family name, such as `Hanazawa`. Matches the whole family name, ignoring case."},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_birthday","required":false,"description":"`true` for people with a birthday, `false` for people without one.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_image","required":false,"description":"`true` for people with a picture, `false` for people that show MAL's question-mark placeholder or none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_about","required":false,"description":"`true` for people with an about text, `false` for people without one.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_website","required":false,"description":"`true` for people with a website, `false` for people without one.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_alternate_names","required":false,"description":"`true` for people with at least one alternate name, `false` for people without any.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_family_name","required":false,"description":"`true` for people with a family name, `false` for people without one.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"anime","required":false,"description":"Only people credited in any of these anime MAL IDs, as staff or as a voice actor. With `voice_language`, the voice credit in that language must be in one of these anime. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"manga","required":false,"description":"Only people credited as an author of any of these manga MAL IDs. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"characters","required":false,"description":"Only people who voiced any of these character MAL IDs. With `voice_language`, they must have voiced the character in that language, and with `anime`, `season` or `season_year` too, in one of those anime and in an anime of that season. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["voice","staff","author"],"x-enumDescriptions":{}}},"in":"query","name":"credit","required":false,"description":"Only people with any selected kind of credit. Multiple values match any selected kind. With `anime`, `season`, `season_year`, `producers`, `anime_type`, `source`, `active_after`, `active_before`, `airing=true` or `upcoming=true`, a `voice` or `staff` credit is on one anime that meets all of them; without them, on any anime.\n\n- `voice`: Voice actor\n- `staff`: Anime staff\n- `author`: Manga author","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["voice","staff","author"],"x-enumDescriptions":{}}},"in":"query","name":"credit_exclude","required":false,"description":"Exclude people with any selected kind of credit. Comma-separated. With `anime`, `season`, `season_year`, `producers`, `anime_type`, `source`, `active_after`, `active_before`, `airing=true` or `upcoming=true`, only a `voice` or `staff` credit on an anime that meets all of them excludes; without them, one on any anime.\n\n- `voice`: Voice actor\n- `staff`: Anime staff\n- `author`: Manga author","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["director","co_director","assistant_director","episode_director","storyboard","series_composition","script","screenplay","original_creator","creator","planning","producer","executive_producer","chief_producer","co_producer","associate_producer","assistant_producer","planning_producer","production_manager","production_assistant","production_coordination","assistant_production_coordinator","series_production_director","publicity","casting_director","associate_casting_director","character_design","original_character_design","mechanical_design","chief_animation_director","animation_director","assistant_animation_director","key_animation","2nd_key_animation","in_between_animation","animation_check","layout","principle_drawing","art_director","background_art","color_design","color_setting","digital_paint","special_effects","director_of_photography","editing","online_editor","online_editing_supervision","setting","setting_manager","spotting","music","sound_director","sound_effects","sound_manager","sound_supervisor","recording","recording_engineer","recording_assistant","assistant_engineer","re_recording_mixing","dialogue_editing","adr_director","post_production_assistant","theme_song_performance","theme_song_composition","theme_song_lyrics","theme_song_arrangement","inserted_song_performance"]}},"in":"query","name":"position","required":false,"description":"Only people MAL credits with any selected staff job. With `anime`, `season`, `season_year`, `producers`, `anime_type`, `source`, `active_after`, `active_before`, `airing=true` or `upcoming=true`, the job is on one anime that meets all of them; without them, on any anime. Multiple values match any selected job.\n\n- `director`: Director\n- `co_director`: Co-Director\n- `assistant_director`: Assistant Director\n- `episode_director`: Episode Director\n- `storyboard`: Storyboard\n- `series_composition`: Series Composition\n- `script`: Script\n- `screenplay`: Screenplay\n- `original_creator`: Original Creator\n- `creator`: Creator\n- `planning`: Planning\n- `producer`: Producer\n- `executive_producer`: Executive Producer\n- `chief_producer`: Chief Producer\n- `co_producer`: Co-Producer\n- `associate_producer`: Associate Producer\n- `assistant_producer`: Assistant Producer\n- `planning_producer`: Planning Producer\n- `production_manager`: Production Manager\n- `production_assistant`: Production Assistant\n- `production_coordination`: Production Coordination\n- `assistant_production_coordinator`: Assistant Production Coordinator\n- `series_production_director`: Series Production Director\n- `publicity`: Publicity\n- `casting_director`: Casting Director\n- `associate_casting_director`: Associate Casting Director\n- `character_design`: Character Design\n- `original_character_design`: Original Character Design\n- `mechanical_design`: Mechanical Design\n- `chief_animation_director`: Chief Animation Director\n- `animation_director`: Animation Director\n- `assistant_animation_director`: Assistant Animation Director\n- `key_animation`: Key Animation\n- `2nd_key_animation`: 2nd Key Animation\n- `in_between_animation`: In-Between Animation\n- `animation_check`: Animation Check\n- `layout`: Layout\n- `principle_drawing`: Principle Drawing\n- `art_director`: Art Director\n- `background_art`: Background Art\n- `color_design`: Color Design\n- `color_setting`: Color Setting\n- `digital_paint`: Digital Paint\n- `special_effects`: Special Effects\n- `director_of_photography`: Director of Photography\n- `editing`: Editing\n- `online_editor`: Online Editor\n- `online_editing_supervision`: Online Editing Supervision\n- `setting`: Setting\n- `setting_manager`: Setting Manager\n- `spotting`: Spotting\n- `music`: Music\n- `sound_director`: Sound Director\n- `sound_effects`: Sound Effects\n- `sound_manager`: Sound Manager\n- `sound_supervisor`: Sound Supervisor\n- `recording`: Recording\n- `recording_engineer`: Recording Engineer\n- `recording_assistant`: Recording Assistant\n- `assistant_engineer`: Assistant Engineer\n- `re_recording_mixing`: Re-Recording Mixing\n- `dialogue_editing`: Dialogue Editing\n- `adr_director`: ADR Director\n- `post_production_assistant`: Post-Production Assistant\n- `theme_song_performance`: Theme Song Performance\n- `theme_song_composition`: Theme Song Composition\n- `theme_song_lyrics`: Theme Song Lyrics\n- `theme_song_arrangement`: Theme Song Arrangement\n- `inserted_song_performance`: Inserted Song Performance","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["director","co_director","assistant_director","episode_director","storyboard","series_composition","script","screenplay","original_creator","creator","planning","producer","executive_producer","chief_producer","co_producer","associate_producer","assistant_producer","planning_producer","production_manager","production_assistant","production_coordination","assistant_production_coordinator","series_production_director","publicity","casting_director","associate_casting_director","character_design","original_character_design","mechanical_design","chief_animation_director","animation_director","assistant_animation_director","key_animation","2nd_key_animation","in_between_animation","animation_check","layout","principle_drawing","art_director","background_art","color_design","color_setting","digital_paint","special_effects","director_of_photography","editing","online_editor","online_editing_supervision","setting","setting_manager","spotting","music","sound_director","sound_effects","sound_manager","sound_supervisor","recording","recording_engineer","recording_assistant","assistant_engineer","re_recording_mixing","dialogue_editing","adr_director","post_production_assistant","theme_song_performance","theme_song_composition","theme_song_lyrics","theme_song_arrangement","inserted_song_performance"]}},"in":"query","name":"position_exclude","required":false,"description":"Exclude people MAL credits with any selected staff job. With `anime`, `season`, `season_year`, `producers`, `anime_type`, `source`, `active_after`, `active_before`, `airing=true` or `upcoming=true`, only a job on one anime that meets all of them excludes; without them, a job on any anime. Comma-separated.\n\n- `director`: Director\n- `co_director`: Co-Director\n- `assistant_director`: Assistant Director\n- `episode_director`: Episode Director\n- `storyboard`: Storyboard\n- `series_composition`: Series Composition\n- `script`: Script\n- `screenplay`: Screenplay\n- `original_creator`: Original Creator\n- `creator`: Creator\n- `planning`: Planning\n- `producer`: Producer\n- `executive_producer`: Executive Producer\n- `chief_producer`: Chief Producer\n- `co_producer`: Co-Producer\n- `associate_producer`: Associate Producer\n- `assistant_producer`: Assistant Producer\n- `planning_producer`: Planning Producer\n- `production_manager`: Production Manager\n- `production_assistant`: Production Assistant\n- `production_coordination`: Production Coordination\n- `assistant_production_coordinator`: Assistant Production Coordinator\n- `series_production_director`: Series Production Director\n- `publicity`: Publicity\n- `casting_director`: Casting Director\n- `associate_casting_director`: Associate Casting Director\n- `character_design`: Character Design\n- `original_character_design`: Original Character Design\n- `mechanical_design`: Mechanical Design\n- `chief_animation_director`: Chief Animation Director\n- `animation_director`: Animation Director\n- `assistant_animation_director`: Assistant Animation Director\n- `key_animation`: Key Animation\n- `2nd_key_animation`: 2nd Key Animation\n- `in_between_animation`: In-Between Animation\n- `animation_check`: Animation Check\n- `layout`: Layout\n- `principle_drawing`: Principle Drawing\n- `art_director`: Art Director\n- `background_art`: Background Art\n- `color_design`: Color Design\n- `color_setting`: Color Setting\n- `digital_paint`: Digital Paint\n- `special_effects`: Special Effects\n- `director_of_photography`: Director of Photography\n- `editing`: Editing\n- `online_editor`: Online Editor\n- `online_editing_supervision`: Online Editing Supervision\n- `setting`: Setting\n- `setting_manager`: Setting Manager\n- `spotting`: Spotting\n- `music`: Music\n- `sound_director`: Sound Director\n- `sound_effects`: Sound Effects\n- `sound_manager`: Sound Manager\n- `sound_supervisor`: Sound Supervisor\n- `recording`: Recording\n- `recording_engineer`: Recording Engineer\n- `recording_assistant`: Recording Assistant\n- `assistant_engineer`: Assistant Engineer\n- `re_recording_mixing`: Re-Recording Mixing\n- `dialogue_editing`: Dialogue Editing\n- `adr_director`: ADR Director\n- `post_production_assistant`: Post-Production Assistant\n- `theme_song_performance`: Theme Song Performance\n- `theme_song_composition`: Theme Song Composition\n- `theme_song_lyrics`: Theme Song Lyrics\n- `theme_song_arrangement`: Theme Song Arrangement\n- `inserted_song_performance`: Inserted Song Performance","style":"form","explode":false},{"schema":{"type":"string","enum":["story","art"],"x-enumDescriptions":{}},"in":"query","name":"author_role","required":false,"description":"Only people MAL credits with this author role: `story` for the writing, `art` for the drawing. With `manga`, the role in those manga; without it, in any manga. An author credited with Story & Art matches both.","examples":{"default":{"value":"story","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Only people credited in titles with every selected genre, theme or demographic ID: each in at least one of their anime, or each in at least one of their manga. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Exclude people credited in any anime or manga with any of these genre, theme or demographic IDs. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"producers","required":false,"description":"Only people credited in an anime of any of these producer or studio MAL IDs, as staff or as a voice actor. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"magazines","required":false,"description":"Only people credited as an author of a manga serialized in any of these magazine MAL IDs. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"anime_type","required":false,"description":"Only people credited in an anime of any selected type, as staff or as a voice actor. Comma-separated.\n\n- `tv`: TV\n- `movie`: Movie\n- `ova`: OVA\n- `special`: Special\n- `ona`: ONA\n- `music`: Music\n- `cm`: CM\n- `pv`: PV\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"manga_type","required":false,"description":"Only people credited as an author of a manga of any selected type. Comma-separated.\n\n- `manga`: Manga\n- `novel`: Novel\n- `lightnovel`: Light Novel\n- `oneshot`: One-shot\n- `doujin`: Doujinshi\n- `manhwa`: Manhwa\n- `manhua`: Manhua","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["original","manga","4_koma_manga","web_manga","digital_manga","novel","web_novel","light_novel","visual_novel","game","card_game","book","picture_book","radio","music","mixed_media","other","unknown"]}},"in":"query","name":"source","required":false,"description":"Only people credited in an anime adapted from any selected source material, as staff or as a voice actor. Comma-separated.\n\n- `original`: Original\n- `manga`: Manga\n- `4_koma_manga`: 4-koma manga\n- `web_manga`: Web manga\n- `digital_manga`: Digital manga\n- `novel`: Novel\n- `web_novel`: Web novel\n- `light_novel`: Light novel\n- `visual_novel`: Visual novel\n- `game`: Game\n- `card_game`: Card game\n- `book`: Book\n- `picture_book`: Picture book\n- `radio`: Radio\n- `music`: Music\n- `mixed_media`: Mixed media\n- `other`: Other\n- `unknown`: Unknown / missing classification","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["winter","spring","summer","fall"]}},"in":"query","name":"season","required":false,"description":"Only people credited in an anime of any selected MAL debut season, as staff or as a voice actor. With `season_year`, any selected season of any selected year, in the same anime. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","minimum":1,"maximum":9999}},"in":"query","name":"season_year","required":false,"description":"Only people credited in an anime of any of these MAL debut-season years, as staff or as a voice actor. This can differ from the calendar start year. Comma-separated.","style":"form","explode":false},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"airing","required":false,"description":"`true` for people credited in at least one anime airing now, `false` for people credited in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"upcoming","required":false,"description":"`true` for people credited in at least one anime that has not aired yet, `false` for people credited in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"publishing","required":false,"description":"`true` for people credited as an author of at least one manga publishing now, `false` for people credited in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["english","french","german","hebrew","hungarian","italian","japanese","korean","mandarin","portuguese_br","spanish"]}},"in":"query","name":"voice_language","required":false,"description":"Only people credited as a voice actor in any of these languages. With `season`, `season_year`, `anime` or `characters`, that same credit must be in an anime of that season, in one of those anime and of one of those characters, for each of them given. The role counts (`min_voice_roles`, `max_voice_roles`, the main and supporting ones, `order_by=voice_roles`) then count only roles in these languages. Comma-separated.\n\n- `english`: English\n- `french`: French\n- `german`: German\n- `hebrew`: Hebrew\n- `hungarian`: Hungarian\n- `italian`: Italian\n- `japanese`: Japanese\n- `korean`: Korean\n- `mandarin`: Mandarin\n- `portuguese_br`: Portuguese (BR)\n- `spanish`: Spanish","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["english","french","german","hebrew","hungarian","italian","japanese","korean","mandarin","portuguese_br","spanish"]}},"in":"query","name":"voice_language_exclude","required":false,"description":"Exclude people credited as a voice actor in any of these languages. With `season`, `season_year`, `anime` or `characters`, only a credit in an anime of that season, in one of those anime and of one of those characters, for each of them given, excludes. Comma-separated.\n\n- `english`: English\n- `french`: French\n- `german`: German\n- `hebrew`: Hebrew\n- `hungarian`: Hungarian\n- `italian`: Italian\n- `japanese`: Japanese\n- `korean`: Korean\n- `mandarin`: Mandarin\n- `portuguese_br`: Portuguese (BR)\n- `spanish`: Spanish","style":"form","explode":false},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"active_after","required":false,"description":"Only people credited in an anime or manga that started in this year or later. With `active_before`, the same anime or manga must meet both."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"active_before","required":false,"description":"Only people credited in an anime or manga that started in this year or earlier. With `active_after`, the same anime or manga must meet both."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"debut_after","required":false,"description":"Only people whose earliest credited anime or manga started in this year or later."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"last_credit_before","required":false,"description":"Only people whose latest credited anime or manga started in this year or earlier. Anime and manga that have not started yet count with their planned year."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive. Missing counts are treated as zero."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive. Missing counts are treated as zero."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_anime_credits","required":false,"description":"Minimum number of anime the person is credited in, as staff or as a voice actor, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_anime_credits","required":false,"description":"Maximum number of anime the person is credited in, as staff or as a voice actor, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_manga_credits","required":false,"description":"Minimum number of manga the person is credited as an author of, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_manga_credits","required":false,"description":"Maximum number of manga the person is credited as an author of, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_voice_roles","required":false,"description":"Minimum number of characters the person voiced, inclusive. With `voice_language`, only roles in those languages count."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_voice_roles","required":false,"description":"Maximum number of characters the person voiced, inclusive. With `voice_language`, only roles in those languages count."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_main_voice_roles","required":false,"description":"Minimum number of main characters the person voiced, inclusive. With `voice_language`, only roles in those languages count."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_main_voice_roles","required":false,"description":"Maximum number of main characters the person voiced, inclusive. With `voice_language`, only roles in those languages count."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_supporting_voice_roles","required":false,"description":"Minimum number of supporting characters the person voiced, inclusive. With `voice_language`, only roles in those languages count."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_supporting_voice_roles","required":false,"description":"Maximum number of supporting characters the person voiced, inclusive. With `voice_language`, only roles in those languages count."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_voice_languages","required":false,"description":"Minimum number of languages the person is credited as a voice actor in, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_voice_languages","required":false,"description":"Maximum number of languages the person is credited as a voice actor in, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","name","birthday","favorites","anime_credits","voice_roles","manga_credits","debut","last_credit"]},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by. `favorites` and the counts list the most first unless `sort=asc`.\n\n- `mal_id`: MAL ID\n- `name`: Name\n- `birthday`: Birthday\n- `favorites`: Favorites\n- `anime_credits`: Number of anime the person is credited in, as staff or as a voice actor\n- `voice_roles`: Number of characters the person voiced; with `voice_language`, only those voiced in these languages\n- `manga_credits`: Number of manga the person is credited as an author of\n- `debut`: Start year of the earliest credited anime or manga; people without credits, or whose credits have no start date, come last\n- `last_credit`: Start year of the latest credited anime or manga; people without credits, or whose credits have no start date, come last","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending. Only applies together with `order_by`.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning matching people","content":{"application/json":{"schema":{"description":"Successful response returning matching people","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a person (voice actor, staff, or author).","properties":{"mal_id":{"type":"integer","description":"Unique person ID on MyAnimeList."},"url":{"type":"string","description":"Direct profile page URL on MyAnimeList."},"website_url":{"type":"string","nullable":true,"description":"Official website URL of the person, if available."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}},"description":"Portrait JPG image URL. A person without a portrait shows MAL's placeholder picture."},"name":{"type":"string","description":"The full name of the person (Family, Given)."},"given_name":{"type":"string","nullable":true,"description":"The given name of the person."},"family_name":{"type":"string","nullable":true,"description":"The family name of the person."},"alternate_names":{"type":"array","items":{"type":"string"},"description":"Alternative names, nicknames or kanji aliases."},"birthday":{"type":"string","nullable":true,"description":"Birthday in ISO 8601 format, as on Jikan. A birthday MAL gives only as a month and year is shown on the 1st of that month. One given only as a year, or with no year, is null."},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"about":{"type":"string","nullable":true,"description":"Biography, career summary, and additional context description."}}}}},"example":{"pagination":{"last_visible_page":3441,"has_next_page":true,"current_page":1,"items":{"count":25,"total":86016,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/people/1/Tomokazu_Seki","website_url":"https://www.atomicmonkey.jp/talent/sekitomokazu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/85360.jpg"}},"name":"Seki, Tomokazu","given_name":"智一","family_name":"関","alternate_names":["Seki Mondoya","門戸 開","Monto Hiraku"],"birthday":"1972-09-08T00:00:00+00:00","favorites":6304,"about":"Hometown: Tokyo, Japan\n\nBlood type: AB\n\nProfile: Atomic Monkey\n\nX: @seki0908\n\nInstagram: @sekitomokazu\n\nYouTube: @sekitomo"}]},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":3441,"has_next_page":true,"current_page":1,"items":{"count":25,"total":86016,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/people/1/Tomokazu_Seki","website_url":"https://www.atomicmonkey.jp/talent/sekitomokazu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/85360.jpg"}},"name":"Seki, Tomokazu","given_name":"智一","family_name":"関","alternate_names":["Seki Mondoya","門戸 開","Monto Hiraku"],"birthday":"1972-09-08T00:00:00+00:00","favorites":6304,"about":"Hometown: Tokyo, Japan\n\nBlood type: AB\n\nProfile: Atomic Monkey\n\nX: @seki0908\n\nInstagram: @sekitomokazu\n\nYouTube: @sekitomo"}]}},"noMatches":{"summary":"No matches","value":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":0,"total":0,"per_page":25}},"data":[]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/people?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people"}}}}}}},"operationId":"getPeople"}},"/people/{id}":{"get":{"summary":"Person Details","tags":["People"],"description":"Get a person by their MyAnimeList ID.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"}],"responses":{"200":{"description":"Successful response returning person details","content":{"application/json":{"schema":{"description":"Successful response returning person details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing a person (voice actor, staff, or author).","properties":{"mal_id":{"type":"integer","description":"Unique person ID on MyAnimeList."},"url":{"type":"string","description":"Direct profile page URL on MyAnimeList."},"website_url":{"type":"string","nullable":true,"description":"Official website URL of the person, if available."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}},"description":"Portrait JPG image URL. A person without a portrait shows MAL's placeholder picture."},"name":{"type":"string","description":"The full name of the person (Family, Given)."},"given_name":{"type":"string","nullable":true,"description":"The given name of the person."},"family_name":{"type":"string","nullable":true,"description":"The family name of the person."},"alternate_names":{"type":"array","items":{"type":"string"},"description":"Alternative names, nicknames or kanji aliases."},"birthday":{"type":"string","nullable":true,"description":"Birthday in ISO 8601 format, as on Jikan. A birthday MAL gives only as a month and year is shown on the 1st of that month. One given only as a year, or with no year, is null."},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"about":{"type":"string","nullable":true,"description":"Biography, career summary, and additional context description."}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/people/1/Tomokazu_Seki","website_url":"https://www.atomicmonkey.jp/talent/sekitomokazu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/85360.jpg"}},"name":"Seki, Tomokazu","given_name":"智一","family_name":"関","alternate_names":["Seki Mondoya","門戸 開","Monto Hiraku"],"birthday":"1972-09-08T00:00:00+00:00","favorites":6304,"about":"Hometown: Tokyo, Japan\n\nBlood type: AB\n\nProfile: Atomic Monkey\n\nX: @seki0908\n\nInstagram: @sekitomokazu\n\nYouTube: @sekitomo"}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/people/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/1"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/1"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/1"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Person with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/people/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/1"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/1"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/1"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/1"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/1"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/1"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/1"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/1"}}}}}}},"operationId":"getPeopleById"}},"/people/{id}/full":{"get":{"summary":"Person Full Details","tags":["People"],"description":"Get a person with all their extra details in one request.\n\n> SFW flags filter out non-sfw anime, manga and voice roles from the person's works.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning person full details","content":{"application/json":{"schema":{"description":"Successful response returning person full details","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer","description":"Unique person ID on MyAnimeList."},"url":{"type":"string","description":"Direct profile page URL on MyAnimeList."},"website_url":{"type":"string","nullable":true,"description":"Official website URL of the person, if available."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}},"description":"Portrait JPG image URL. A person without a portrait shows MAL's placeholder picture."},"name":{"type":"string","description":"The full name of the person (Family, Given)."},"given_name":{"type":"string","nullable":true,"description":"The given name of the person."},"family_name":{"type":"string","nullable":true,"description":"The family name of the person."},"alternate_names":{"type":"array","items":{"type":"string"},"description":"Alternative names, nicknames or kanji aliases."},"birthday":{"type":"string","nullable":true,"description":"Birthday in ISO 8601 format, as on Jikan. A birthday MAL gives only as a month and year is shown on the 1st of that month. One given only as a year, or with no year, is null."},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"about":{"type":"string","nullable":true,"description":"Biography, career summary, and additional context description."},"anime":{"type":"array","items":{"type":"object","properties":{"position":{"type":"string"},"anime":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}},"manga":{"type":"array","items":{"type":"object","properties":{"position":{"type":"string"},"manga":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}},"voices":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"anime":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}},"character":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"name":{"type":"string"}}}}}}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/people/1/Tomokazu_Seki","website_url":"https://www.atomicmonkey.jp/talent/sekitomokazu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/85360.jpg"}},"name":"Seki, Tomokazu","given_name":"智一","family_name":"関","alternate_names":["Seki Mondoya","門戸 開","Monto Hiraku"],"birthday":"1972-09-08T00:00:00+00:00","favorites":6304,"about":"Hometown: Tokyo, Japan\n\nBlood type: AB\n\nProfile: Atomic Monkey\n\nX: @seki0908\n\nInstagram: @sekitomokazu\n\nYouTube: @sekitomo","anime":[{"position":"Theme Song Performance (ED)","anime":{"mal_id":30016,"url":"https://myanimelist.net/anime/30016/Nanbaka","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/2/81399.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/2/81399t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/2/81399l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/2/81399.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/2/81399t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/2/81399l.webp"}},"title":"Nanbaka"}},{"position":"Theme Song Performance","anime":{"mal_id":9863,"url":"https://myanimelist.net/anime/9863/SKET_Dance","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/9/73974.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/9/73974t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/9/73974l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/9/73974.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/9/73974t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/9/73974l.webp"}},"title":"SKET Dance"}}],"manga":[],"voices":[{"role":"Main","anime":{"mal_id":64059,"url":"https://myanimelist.net/anime/64059/Boushoku_no_Berserk_Season_2","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1644/160992.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1644/160992.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992l.webp"}},"title":"Boushoku no Berserk Season 2"},"character":{"mal_id":194138,"url":"https://myanimelist.net/character/194138/Greed","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/8/506012.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/8/506012t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/8/506012.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/8/506012t.webp"}},"name":"Greed"}},{"role":"Supporting","anime":{"mal_id":64058,"url":"https://myanimelist.net/anime/64058/Kagurabachi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1653/157089.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1653/157089t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1653/157089l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1653/157089.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1653/157089t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1653/157089l.webp"}},"title":"Kagurabachi"},"character":{"mal_id":234925,"url":"https://myanimelist.net/character/234925/Kunishige_Rokuhira","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/9/636910.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/9/636910t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/9/636910.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/9/636910t.webp"}},"name":"Rokuhira, Kunishige"}}]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/people/abc/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/1/full"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/1/full"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/1/full"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Person with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/people/0/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/1/full"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/1/full"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/1/full"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/1/full"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/1/full"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/1/full"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/1/full"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/1/full"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/1/full"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/1/full"}}}}}}},"operationId":"getPeopleByIdFull"}},"/people/{id}/anime":{"get":{"summary":"Person Anime Roles","tags":["People"],"description":"Get the anime a person worked on.\n\n> SFW flags filter out non-sfw anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning anime roles","content":{"application/json":{"schema":{"description":"Successful response returning anime roles","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"position":{"type":"string"},"anime":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}}},"example":{"data":[{"position":"Theme Song Performance (ED)","anime":{"mal_id":30016,"url":"https://myanimelist.net/anime/30016/Nanbaka","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/2/81399.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/2/81399t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/2/81399l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/2/81399.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/2/81399t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/2/81399l.webp"}},"title":"Nanbaka"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/people/abc/anime"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/1/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/1/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/1/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Person with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/people/0/anime"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/1/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/1/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/1/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/1/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/1/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/1/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/1/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/1/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/1/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/1/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/1/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/1/anime"}}}}}}},"operationId":"getPeopleByIdAnime"}},"/people/{id}/manga":{"get":{"summary":"Person Manga Roles","tags":["People"],"description":"Get the manga a person worked on.\n\n> SFW flags filter out non-sfw manga.","parameters":[{"schema":{"type":"integer","default":1868},"in":"path","name":"id","required":true,"description":"The MAL People ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning manga roles","content":{"application/json":{"schema":{"description":"Successful response returning manga roles","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"position":{"type":"string"},"manga":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}}}}},"example":{"data":[{"position":"Story & Art","manga":{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.webp"}},"title":"Berserk"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/people/abc/manga"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/1868/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/1868/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/1868/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Person with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/people/0/manga"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/1868/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/1868/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/1868/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/1868/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/1868/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/1868/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/1868/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/1868/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/1868/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/1868/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/1868/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/1868/manga"}}}}}}},"operationId":"getPeopleByIdManga"}},"/people/{id}/voices":{"get":{"summary":"Person Voice Acting Roles","tags":["People"],"description":"Get a person's voice acting roles.\n\n> SFW flags filter out voice roles in non-sfw anime.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning voice roles","content":{"application/json":{"schema":{"description":"Successful response returning voice roles","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"anime":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}},"character":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"name":{"type":"string"}}}}}}},"example":{"data":[{"role":"Main","anime":{"mal_id":64059,"url":"https://myanimelist.net/anime/64059/Boushoku_no_Berserk_Season_2","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1644/160992.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1644/160992.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1644/160992l.webp"}},"title":"Boushoku no Berserk Season 2"},"character":{"mal_id":194138,"url":"https://myanimelist.net/character/194138/Greed","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/8/506012.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/8/506012t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/8/506012.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/8/506012t.webp"}},"name":"Greed"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/people/abc/voices"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/1/voices"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/1/voices"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/1/voices"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Person with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/people/0/voices"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/1/voices"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/1/voices"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/1/voices"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/1/voices"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/1/voices"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/1/voices"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/1/voices"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/1/voices"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/1/voices"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/1/voices"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/1/voices"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/1/voices"}}}}}}},"operationId":"getPeopleByIdVoices"}},"/people/{id}/pictures":{"get":{"summary":"Person Pictures","tags":["People"],"description":"Get the picture catalogue for a person.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"}],"responses":{"200":{"description":"Successful response returning person pictures","content":{"application/json":{"schema":{"description":"Successful response returning person pictures","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}},"example":{"data":[{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/17141.jpg"}},{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/2/18747.jpg"}},{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/44649.jpg"}}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/people/abc/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/1/pictures"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/1/pictures"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/1/pictures"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Person with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/people/0/pictures"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/1/pictures"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/1/pictures"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/1/pictures"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/1/pictures"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/1/pictures"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/1/pictures"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/1/pictures"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/1/pictures"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/1/pictures"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/1/pictures"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/1/pictures"}}}}}}},"operationId":"getPeopleByIdPictures"}},"/people/{id}/articles":{"get":{"summary":"Person Articles","tags":["People"],"description":"Get featured articles about a person.\n\n> SFW flags filter out articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":1879},"in":"path","name":"id","required":true,"description":"The MAL People ID"},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":20,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":20,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning person featured articles","content":{"application/json":{"schema":{"description":"Successful response returning person featured articles","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"published_at":{"type":"string","nullable":true},"author_username":{"type":"string"},"author_url":{"type":"string","nullable":true},"views":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"excerpt":{"type":"string"}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":2230,"url":"https://myanimelist.net/featured/2230/Manga_Store_Recommendations_from_the_Editor_1","title":"[Manga Store] Recommendations from the Editor #1","summary":"2018 marks the opening of MAL’s official Manga Store! Now open to over 30 countries around the world, be sure to check it out!","published_at":"2018-03-08T08:10:00+00:00","author_username":"MAL_editing_team","author_url":"https://myanimelist.net/profile/MAL_editing_team","views":27981,"tags":["Spoiler"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1520493665-16a15bef4bf36e4ff40878f1613e78f8.png"}},"excerpt":"2018 marks the opening of MAL’s official Manga Store! Now open to over 30 countries around the world, be sure to check it out!"}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/people/1879/articles?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/1879/articles"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/1879/articles"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/1879/articles"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Person with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/people/0/articles"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/1879/articles"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/1879/articles"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/1879/articles"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/1879/articles"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/1879/articles"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/1879/articles"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/1879/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/1879/articles"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/1879/articles"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/1879/articles"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/1879/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/1879/articles"}}}}}}},"operationId":"getPeopleByIdArticles"}},"/people/ids":{"get":{"summary":"Get All Person IDs","tags":["People"],"description":"Get the ID of every person in one request.","security":[{"serverKey":[]}],"responses":{"200":{"description":"Successful response returning all unique person IDs","content":{"application/json":{"schema":{"description":"Successful response returning all unique person IDs","type":"object","properties":{"data":{"type":"array","items":{"type":"integer"}}},"example":{"data":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/people/ids"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/people/ids"}},"missingServerKey":{"summary":"Restricted endpoint without a Server Key","value":{"status":401,"type":"UnauthorizedException","message":"Server Key is required for this endpoint.","error":"Send a valid Server Key in the X-Server-Key header.","path":"/v1/people/ids"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/people/ids"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/people/ids"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/people/ids"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/people/ids"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/people/ids"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/people/ids"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/people/ids"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/people/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/people/ids"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/people/ids"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/people/ids"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/people/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/people/ids"}}}}}}},"operationId":"getPeopleIds"}},"/producers":{"get":{"summary":"Producers Search","tags":["Producers"],"description":"Search and browse the full producers/studios/licensors catalogue with advanced filters and sorting.\n\n> SFW flags filter out companies credited only in non-sfw anime.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search query"},{"schema":{"type":"string","minLength":1,"maxLength":1},"in":"query","name":"letter","required":false,"description":"Only entries whose name starts with this letter. One letter, in any case."},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"anime_type","required":false,"description":"Only companies credited in an anime of any selected type. Comma-separated.\n\n- `tv`: TV\n- `movie`: Movie\n- `ova`: OVA\n- `special`: Special\n- `ona`: ONA\n- `music`: Music\n- `cm`: CM\n- `pv`: PV\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["original","manga","4_koma_manga","web_manga","digital_manga","novel","web_novel","light_novel","visual_novel","game","card_game","book","picture_book","radio","music","mixed_media","other","unknown"]}},"in":"query","name":"source","required":false,"description":"Only companies credited in an anime adapted from any selected source material. Comma-separated.\n\n- `original`: Original\n- `manga`: Manga\n- `4_koma_manga`: 4-koma manga\n- `web_manga`: Web manga\n- `digital_manga`: Digital manga\n- `novel`: Novel\n- `web_novel`: Web novel\n- `light_novel`: Light novel\n- `visual_novel`: Visual novel\n- `game`: Game\n- `card_game`: Card game\n- `book`: Book\n- `picture_book`: Picture book\n- `radio`: Radio\n- `music`: Music\n- `mixed_media`: Mixed media\n- `other`: Other\n- `unknown`: Unknown / missing classification","style":"form","explode":false},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_about","required":false,"description":"`true` for companies with an about text, `false` for companies without one.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_image","required":false,"description":"`true` for companies with a logo, `false` for companies that show MAL's no-picture placeholder or none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"has_established","required":false,"description":"`true` for companies with a founding date (`established`), `false` for companies without one.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"dissolved","required":false,"description":"`true` for companies MAL lists as dissolved, `false` for companies MAL does not. Some closed companies have no dissolved date on MAL.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated IDs. Entries must have all of them.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated IDs. Entries with any of them are left out.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"worked_with","required":false,"description":"Only companies that worked on an anime with any of these companies. Comma-separated IDs.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["studio","producer","licensor"],"x-enumDescriptions":{}}},"in":"query","name":"role","required":false,"description":"Only studios, producers or licensors, as MAL lists them. Comma-separated.","style":"form","explode":false},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"airing","required":false,"description":"`true` for companies credited in at least one anime airing now, `false` for companies credited in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false"],"x-enumDescriptions":{}},"in":"query","name":"upcoming","required":false,"description":"`true` for companies credited in at least one anime that has not aired yet, `false` for companies credited in none.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_anime","required":false,"description":"Minimum number of anime the company is credited in, inclusive. With `role`, only anime in those jobs count."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_anime","required":false,"description":"Maximum number of anime the company is credited in, inclusive. With `role`, only anime in those jobs count."},{"schema":{"type":"array","items":{"type":"string","enum":["winter","spring","summer","fall"]}},"in":"query","name":"season","required":false,"description":"Only companies credited in an anime of any selected MAL debut season. With `season_year`, any selected season of any selected year, in the same anime. Comma-separated.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","minimum":1,"maximum":9999}},"in":"query","name":"season_year","required":false,"description":"Only companies credited in an anime of any of these MAL debut-season years. This can differ from the calendar start year. Comma-separated.","style":"form","explode":false},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"active_after","required":false,"description":"Only companies credited in an anime that started in this year or later. With `active_before`, the same anime must meet both."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"active_before","required":false,"description":"Only companies credited in an anime that started in this year or earlier. With `active_after`, the same anime must meet both."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"debut_after","required":false,"description":"Only companies whose earliest credited anime started in this year or later."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"last_credit_before","required":false,"description":"Only companies whose latest credited anime started in this year or earlier. Anime that have not started yet count with their planned year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"established_after","required":false,"description":"Only companies founded in this year or later."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"established_before","required":false,"description":"Only companies founded in this year or earlier."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["mal_id","name","count","favorites","established","debut","last_credit"]},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.\n\n- `mal_id`: MAL ID\n- `name`: Name\n- `count`: Number of anime the company is credited in; with `role`, only anime in those jobs\n- `favorites`: Favorites\n- `established`: Founding date; companies without one come last\n- `debut`: Start year of the company's earliest credited anime; companies without one come last\n- `last_credit`: Start year of the company's latest credited anime; companies without one come last","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["desc","asc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning matching producers","content":{"application/json":{"schema":{"description":"Successful response returning matching producers","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"},"current_page":{"type":"integer"},"items":{"type":"object","properties":{"count":{"type":"integer"},"total":{"type":"integer"},"per_page":{"type":"integer"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime studio or publishing company.","properties":{"mal_id":{"type":"integer","description":"Unique producer ID on MyAnimeList."},"url":{"type":"string","description":"Direct producer page URL on MyAnimeList."},"titles":{"type":"array","description":"Translations or alternative titles for this producer.","items":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"}}}},"images":{"type":"object","description":"Producer or studio logo image URL.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"established":{"type":"string","nullable":true,"description":"Founding date in ISO 8601 format, as on Jikan. A date MAL gives only as a month and year is shown on the 1st of that month. One given only as a year is null."},"about":{"type":"string","nullable":true,"description":"Historical and context background information."},"count":{"type":"integer","description":"Number of approved anime that credit this company as a producer, studio or licensor."}}}}},"example":{"pagination":{"last_visible_page":113,"has_next_page":true,"current_page":1,"items":{"count":25,"total":2808,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/anime/producer/1/Studio_Pierrot","titles":[{"type":"Default","title":"Studio Pierrot"},{"type":"Japanese","title":"スタジオぴえろ"},{"type":"Synonym","title":"Pierrot"}],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/company_logos/a0524dfa-5a6d-40a7-8a1e-233e3822acb5_600x600_i"}},"favorites":6605,"established":"1979-05-01T00:00:00+00:00","about":"Pierrot ぴえろ (Pierrot Co., Ltd.) is a Japanese animation studio established in May 1979 by former employees of both Tatsunoko Production and Mushi Production. Its headquarters are located in Mitaka, Tokyo. Pierrot is renowned for several worldwide popular anime series, such as Naruto, Bleach, Yu Yu Hakusho, Black Clover, Boruto: Naruto Next Generations, Tokyo Ghoul, and Great Teacher Onizuka.","count":335}]},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":113,"has_next_page":true,"current_page":1,"items":{"count":25,"total":2808,"per_page":25}},"data":[{"mal_id":1,"url":"https://myanimelist.net/anime/producer/1/Studio_Pierrot","titles":[{"type":"Default","title":"Studio Pierrot"},{"type":"Japanese","title":"スタジオぴえろ"},{"type":"Synonym","title":"Pierrot"}],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/company_logos/a0524dfa-5a6d-40a7-8a1e-233e3822acb5_600x600_i"}},"favorites":6605,"established":"1979-05-01T00:00:00+00:00","about":"Pierrot ぴえろ (Pierrot Co., Ltd.) is a Japanese animation studio established in May 1979 by former employees of both Tatsunoko Production and Mushi Production. Its headquarters are located in Mitaka, Tokyo. Pierrot is renowned for several worldwide popular anime series, such as Naruto, Bleach, Yu Yu Hakusho, Black Clover, Boruto: Naruto Next Generations, Tokyo Ghoul, and Great Teacher Onizuka.","count":335}]}},"noMatches":{"summary":"No matches","value":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":0,"total":0,"per_page":25}},"data":[]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/producers?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/producers"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/producers"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/producers"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/producers"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/producers"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/producers"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/producers"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/producers"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/producers"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/producers"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/producers"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/producers"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/producers"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/producers"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/producers"}}}}}}},"operationId":"getProducers"}},"/producers/{id}":{"get":{"summary":"Producer Details","tags":["Producers"],"description":"Get a producer or studio by its MyAnimeList ID.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Producer ID"}],"responses":{"200":{"description":"Successful response returning producer details","content":{"application/json":{"schema":{"description":"Successful response returning producer details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing an anime studio or publishing company.","properties":{"mal_id":{"type":"integer","description":"Unique producer ID on MyAnimeList."},"url":{"type":"string","description":"Direct producer page URL on MyAnimeList."},"titles":{"type":"array","description":"Translations or alternative titles for this producer.","items":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"}}}},"images":{"type":"object","description":"Producer or studio logo image URL.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"established":{"type":"string","nullable":true,"description":"Founding date in ISO 8601 format, as on Jikan. A date MAL gives only as a month and year is shown on the 1st of that month. One given only as a year is null."},"about":{"type":"string","nullable":true,"description":"Historical and context background information."},"count":{"type":"integer","description":"Number of approved anime that credit this company as a producer, studio or licensor."}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/producer/1/Studio_Pierrot","titles":[{"type":"Default","title":"Studio Pierrot"},{"type":"Japanese","title":"スタジオぴえろ"},{"type":"Synonym","title":"Pierrot"}],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/company_logos/a0524dfa-5a6d-40a7-8a1e-233e3822acb5_600x600_i"}},"favorites":6605,"established":"1979-05-01T00:00:00+00:00","about":"Pierrot ぴえろ (Pierrot Co., Ltd.) is a Japanese animation studio established in May 1979 by former employees of both Tatsunoko Production and Mushi Production. Its headquarters are located in Mitaka, Tokyo. Pierrot is renowned for several worldwide popular anime series, such as Naruto, Bleach, Yu Yu Hakusho, Black Clover, Boruto: Naruto Next Generations, Tokyo Ghoul, and Great Teacher Onizuka.","count":335}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/producers/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/producers/1"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/producers/1"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/producers/1"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Producer with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/producers/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/producers/1"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/producers/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/producers/1"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/producers/1"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/producers/1"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/producers/1"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/producers/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/producers/1"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/producers/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/producers/1"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/producers/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/producers/1"}}}}}}},"operationId":"getProducersById"}},"/producers/{id}/full":{"get":{"summary":"Producer Full Details","tags":["Producers"],"description":"Get a producer or studio with all its extra details in one request.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Producer ID"}],"responses":{"200":{"description":"Successful response returning full producer details","content":{"application/json":{"schema":{"description":"Successful response returning full producer details","type":"object","properties":{"data":{"type":"object","description":"Full details for an anime studio or publishing company including external resource links.","properties":{"mal_id":{"type":"integer","description":"Unique producer ID on MyAnimeList."},"url":{"type":"string","description":"Direct producer page URL on MyAnimeList."},"titles":{"type":"array","description":"Translations or alternative titles for this producer.","items":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"}}}},"images":{"type":"object","description":"Producer or studio logo image URL.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"established":{"type":"string","nullable":true,"description":"Founding date in ISO 8601 format, as on Jikan. A date MAL gives only as a month and year is shown on the 1st of that month. One given only as a year is null."},"about":{"type":"string","nullable":true,"description":"Historical and context background information."},"count":{"type":"integer","description":"Number of approved anime that credit this company as a producer, studio or licensor."},"external":{"type":"array","description":"External websites and links for this company.","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the external resource (e.g. Official Site, Twitter)."},"url":{"type":"string","description":"The external resource URL link."}}}}}}},"example":{"data":{"mal_id":1,"url":"https://myanimelist.net/anime/producer/1/Studio_Pierrot","titles":[{"type":"Default","title":"Studio Pierrot"},{"type":"Japanese","title":"スタジオぴえろ"},{"type":"Synonym","title":"Pierrot"}],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/company_logos/a0524dfa-5a6d-40a7-8a1e-233e3822acb5_600x600_i"}},"favorites":6605,"established":"1979-05-01T00:00:00+00:00","about":"Pierrot ぴえろ (Pierrot Co., Ltd.) is a Japanese animation studio established in May 1979 by former employees of both Tatsunoko Production and Mushi Production. Its headquarters are located in Mitaka, Tokyo. Pierrot is renowned for several worldwide popular anime series, such as Naruto, Bleach, Yu Yu Hakusho, Black Clover, Boruto: Naruto Next Generations, Tokyo Ghoul, and Great Teacher Onizuka.","count":335,"external":[{"name":"pierrot.jp","url":"http://pierrot.jp/"},{"name":"en.pierrot.jp","url":"https://en.pierrot.jp/"},{"name":"@studiopierrot_","url":"https://twitter.com/studiopierrot"},{"name":"Facebook","url":"https://www.facebook.com/studiopierrot"},{"name":"YouTube","url":"https://www.youtube.com/channel/UC0U2GG9WNndvt1wK41l9iqg"},{"name":"pierrot.jp","url":"https://pierrot.jp/company/"},{"name":"bangumi.tv","url":"https://bangumi.tv/person/320"},{"name":"ja.wikipedia.org","url":"https://ja.wikipedia.org/wiki/%E3%81%B4%E3%81%88%E3%82%8D"},{"name":"wikiwand.com","url":"https://www.wikiwand.com/en/Pierrot_(company)"},{"name":"animeperson.com","url":"http://animeperson.com/studio/212/"},{"name":"anisearch.com","url":"https://www.anisearch.com/company/212,pierrot-co-ltd"}]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/producers/abc/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/producers/1/full"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/producers/1/full"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/producers/1/full"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Producer with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/producers/0/full"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/producers/1/full"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/producers/1/full"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/producers/1/full"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/producers/1/full"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/producers/1/full"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/producers/1/full"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/producers/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/producers/1/full"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/producers/1/full"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/producers/1/full"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/producers/1/full"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/producers/1/full"}}}}}}},"operationId":"getProducersByIdFull"}},"/producers/{id}/external":{"get":{"summary":"Producer External Links","tags":["Producers"],"description":"Get the links to other sites about a producer or studio.\n\nAlso included in every `/producers/{id}/full` response.","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Producer ID"}],"responses":{"200":{"description":"Successful response returning external links","content":{"application/json":{"schema":{"description":"Successful response returning external links","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}}},"example":{"data":[{"name":"pierrot.jp","url":"http://pierrot.jp/"},{"name":"en.pierrot.jp","url":"https://en.pierrot.jp/"},{"name":"@studiopierrot_","url":"https://twitter.com/studiopierrot"}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/producers/abc/external"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/producers/1/external"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/producers/1/external"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/producers/1/external"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Producer with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/producers/0/external"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/producers/1/external"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/producers/1/external"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/producers/1/external"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/producers/1/external"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/producers/1/external"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/producers/1/external"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/producers/1/external"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/producers/1/external"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/producers/1/external"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/producers/1/external"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/producers/1/external"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/producers/1/external"}}}}}}},"operationId":"getProducersByIdExternal"}},"/producers/ids":{"get":{"summary":"Get All Producer IDs","tags":["Producers"],"description":"Get the ID of every producer and studio in one request.","security":[{"serverKey":[]}],"responses":{"200":{"description":"Successful response returning all unique producer IDs","content":{"application/json":{"schema":{"description":"Successful response returning all unique producer IDs","type":"object","properties":{"data":{"type":"array","items":{"type":"integer"}}},"example":{"data":[1,2,3,4,5,6,7,8,10,11,13,14,15,16,17,18,21,22]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/producers/ids"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/producers/ids"}},"missingServerKey":{"summary":"Restricted endpoint without a Server Key","value":{"status":401,"type":"UnauthorizedException","message":"Server Key is required for this endpoint.","error":"Send a valid Server Key in the X-Server-Key header.","path":"/v1/producers/ids"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/producers/ids"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/producers/ids"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/producers/ids"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/producers/ids"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/producers/ids"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/producers/ids"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/producers/ids"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/producers/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/producers/ids"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/producers/ids"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/producers/ids"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/producers/ids"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/producers/ids"}}}}}}},"operationId":"getProducersIds"}},"/genres/anime":{"get":{"summary":"Anime Genres","tags":["Genres"],"description":"Get all anime genres, themes and demographics.\n\n> SFW flags filter out non-sfw genres and count only sfw anime.","parameters":[{"schema":{"type":"string","enum":["genres","explicit_genres","themes","demographics"]},"in":"query","name":"filter","required":false,"description":"Filter genres by category","examples":{"default":{"value":"genres","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning anime genres","content":{"application/json":{"schema":{"description":"Successful response returning anime genres","type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"A genre, theme, or demographic classification catalog entry.","properties":{"mal_id":{"type":"integer","description":"Unique catalog ID of the genre/theme."},"name":{"type":"string","description":"The name of the genre/theme."},"url":{"type":"string","description":"Direct genre list page URL on MyAnimeList."},"count":{"type":"integer","description":"Approved entries classified under this genre/theme, as many as the list's genres filter finds."}}}}},"example":{"data":[{"mal_id":1,"name":"Action","url":"https://myanimelist.net/anime/genre/1/Action","count":5053},{"mal_id":2,"name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure","count":4638},{"mal_id":5,"name":"Avant Garde","url":"https://myanimelist.net/anime/genre/5/Avant_Garde","count":1149}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/genres/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/genres/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/genres/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/genres/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/genres/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/genres/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/genres/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/genres/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/genres/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/genres/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/genres/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/genres/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/genres/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/genres/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/genres/anime"}}}}}}},"operationId":"getGenresAnime"}},"/genres/manga":{"get":{"summary":"Manga Genres","tags":["Genres"],"description":"Get all manga genres, themes and demographics.\n\n> SFW flags filter out non-sfw genres and count only sfw manga.","parameters":[{"schema":{"type":"string","enum":["genres","explicit_genres","themes","demographics"]},"in":"query","name":"filter","required":false,"description":"Filter genres by category","examples":{"default":{"value":"genres","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning manga genres","content":{"application/json":{"schema":{"description":"Successful response returning manga genres","type":"object","properties":{"data":{"type":"array","items":{"type":"object","description":"A genre, theme, or demographic classification catalog entry.","properties":{"mal_id":{"type":"integer","description":"Unique catalog ID of the genre/theme."},"name":{"type":"string","description":"The name of the genre/theme."},"url":{"type":"string","description":"Direct genre list page URL on MyAnimeList."},"count":{"type":"integer","description":"Approved entries classified under this genre/theme, as many as the list's genres filter finds."}}}}},"example":{"data":[{"mal_id":1,"name":"Action","url":"https://myanimelist.net/manga/genre/1/Action","count":11460},{"mal_id":2,"name":"Adventure","url":"https://myanimelist.net/manga/genre/2/Adventure","count":4718},{"mal_id":5,"name":"Avant Garde","url":"https://myanimelist.net/manga/genre/5/Avant_Garde","count":104}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/genres/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/genres/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/genres/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/genres/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/genres/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/genres/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/genres/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/genres/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/genres/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/genres/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/genres/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/genres/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/genres/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/genres/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/genres/manga"}}}}}}},"operationId":"getGenresManga"}},"/magazines":{"get":{"summary":"Manga Magazines","tags":["Magazines"],"description":"Search and browse the full magazine catalogue with filters and sorting.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search query"},{"schema":{"type":"string","minLength":1,"maxLength":1},"in":"query","name":"letter","required":false,"description":"Filter by first letter"},{"schema":{"type":"string","enum":["mal_id","name","count"],"default":"mal_id","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"mal_id","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning manga magazines","content":{"application/json":{"schema":{"description":"Successful response returning manga magazines","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"A manga serialization publisher or magazine catalog entry.","properties":{"mal_id":{"type":"integer","description":"Unique catalog ID of the publisher/magazine."},"name":{"type":"string","description":"The name of the publisher/magazine."},"url":{"type":"string","description":"Direct serialization catalog page URL on MyAnimeList."},"count":{"type":"integer","description":"Approved manga serialized in this publisher/magazine, as many as /manga?magazines= finds."}}}}},"example":{"pagination":{"last_visible_page":60,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1476,"per_page":25}},"data":[{"mal_id":1,"name":"Big Comic Original","url":"https://myanimelist.net/manga/magazine/1/Big_Comic_Original","count":102},{"mal_id":2,"name":"Young Animal","url":"https://myanimelist.net/manga/magazine/2/Young_Animal","count":178},{"mal_id":3,"name":"Big Comic Spirits","url":"https://myanimelist.net/manga/magazine/3/Big_Comic_Spirits","count":312}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/magazines?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/magazines"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/magazines"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/magazines"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/magazines"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/magazines"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/magazines"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/magazines"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/magazines"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/magazines"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/magazines"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/magazines"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/magazines"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/magazines"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/magazines"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/magazines"}}}}}}},"operationId":"getMagazines"}},"/random/anime":{"get":{"summary":"Random Anime","tags":["Random"],"description":"Get a random anime.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `tv`: TV series\n- `movie`: Movie\n- `ova`: OVA (original video animation)\n- `special`: Special\n- `ona`: ONA (original net animation, e.g. web releases)\n- `music`: Music video\n- `cm`: CM (commercial)\n- `pv`: PV (promotional video)\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","complete","upcoming"],"x-enumDescriptions":{}},"in":"query","name":"status","required":false,"description":"Only anime with this airing status.\n\n- `airing`: Currently Airing\n- `complete`: Finished Airing\n- `upcoming`: Not yet aired","examples":{"default":{"value":"airing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["original","manga","4_koma_manga","web_manga","digital_manga","novel","web_novel","light_novel","visual_novel","game","card_game","book","picture_book","radio","music","mixed_media","other","unknown"]}},"in":"query","name":"source","required":false,"description":"Only entries with any selected source material. Multiple values match any selected source.\n\n- `original`: Original\n- `manga`: Manga\n- `4_koma_manga`: 4-koma manga\n- `web_manga`: Web manga\n- `digital_manga`: Digital manga\n- `novel`: Novel\n- `web_novel`: Web novel\n- `light_novel`: Light novel\n- `visual_novel`: Visual novel\n- `game`: Game\n- `card_game`: Card game\n- `book`: Book\n- `picture_book`: Picture book\n- `radio`: Radio\n- `music`: Music\n- `mixed_media`: Mixed media\n- `other`: Other\n- `unknown`: Unknown / missing classification","style":"form","explode":false},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"has_trailer","required":false,"description":"Filter by whether a main-trailer YouTube ID or URL is available. Playback availability is not checked.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"producers","required":false,"description":"Filter by producer, studio or licensor MAL IDs. Multiple IDs match any selected company.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"number","minimum":0,"maximum":10},"in":"query","name":"min_score","required":false,"description":"Minimum score, inclusive."},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"max_score","required":false,"description":"Maximum score, inclusive."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"year","required":false,"description":"Calendar year of the aired or published start date. Cannot be combined with min_year or max_year. For anime, this can differ from MAL's season year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"min_year","required":false,"description":"Minimum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"max_year","required":false,"description":"Maximum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning random anime details","content":{"application/json":{"schema":{"description":"Successful response returning random anime details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}},"example":{"data":{"mal_id":5859,"url":"https://myanimelist.net/anime/5859/Kiddy_GiRL-AND_Pilot","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/6/12294.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/6/12294t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/6/12294l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/6/12294.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/6/12294t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/6/12294l.webp"}},"trailer":{"youtube_id":null,"url":null,"embed_url":null,"images":{"image_url":null,"small_image_url":null,"medium_image_url":null,"large_image_url":null,"maximum_image_url":null},"title":null,"views":null,"likes":null,"dislikes":null,"comment_count":null,"published_at":null,"duration":null,"privacy_status":null,"region_restriction":null,"embeddable":null},"approved":true,"titles":[{"type":"Default","title":"Kiddy GiRL-AND Pilot"},{"type":"Japanese","title":"キディ・ガーランド"},{"type":"Synonym","title":"Kiddy Grade 2 Pilot"}],"title":"Kiddy GiRL-AND Pilot","title_english":null,"title_japanese":"キディ・ガーランド","title_synonyms":["Kiddy Grade 2 Pilot"],"type":"OVA","source":"Original","episodes":1,"status":"Finished Airing","airing":false,"aired":{"from":"2007-05-25T00:00:00+00:00","to":null,"prop":{"from":{"day":25,"month":5,"year":2007},"to":{"day":null,"month":null,"year":null}},"string":"May 25, 2007"},"duration":"6 min","rating":"PG-13 - Teens 13 or older","score":6.58,"scored_by":1758,"rank":7596,"popularity":9545,"members":5380,"favorites":6,"synopsis":"ES members Éclair and Lumière once were involved in a battle to decide the fate of the galaxy. They prevailed and peace was restored to the galaxy. Now, several years later, the galaxy once again stands on the brink of chaos. This conflict will see the dawn of two new heroines; Ascoeur and Q-feuille.","background":null,"season":"spring","year":2007,"broadcast":{"day":null,"time":null,"timezone":null,"string":null},"producers":[{"mal_id":113,"type":"anime","name":"Kadokawa Shoten","url":"https://myanimelist.net/anime/producer/113/Kadokawa_Shoten"}],"licensors":[],"studios":[{"mal_id":163,"type":"anime","name":"asread.","url":"https://myanimelist.net/anime/producer/163/asread"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"},{"mal_id":31,"type":"anime","name":"Super Power","url":"https://myanimelist.net/anime/genre/31/Super_Power"}],"demographics":[]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/random/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/random/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/random/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/random/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/random/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/random/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/random/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/random/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/random/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/random/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/random/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/random/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/random/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/random/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/random/anime"}}}}}}},"operationId":"getRandomAnime"}},"/random/manga":{"get":{"summary":"Random Manga","tags":["Random"],"description":"Get a random manga.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `manga`: Manga\n- `novel`: Novel\n- `lightnovel`: Light Novel\n- `oneshot`: One-shot\n- `doujin`: Doujinshi (self-published)\n- `manhwa`: Manhwa (Korean comics)\n- `manhua`: Manhua (Chinese comics)","style":"form","explode":false},{"schema":{"type":"string","enum":["publishing","complete","upcoming","discontinued","hiatus"]},"in":"query","name":"status","required":false,"description":"Only manga with this publishing status.\n\n- `publishing`: Publishing\n- `complete`: Finished\n- `upcoming`: Not yet published\n- `discontinued`: Discontinued\n- `hiatus`: On Hiatus","examples":{"default":{"value":"publishing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"authors","required":false,"description":"Filter by credited author or artist MAL person IDs. Multiple IDs match any selected author.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"number","minimum":0,"maximum":10},"in":"query","name":"min_score","required":false,"description":"Minimum score, inclusive."},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"max_score","required":false,"description":"Maximum score, inclusive."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"year","required":false,"description":"Calendar year of the aired or published start date. Cannot be combined with min_year or max_year. For anime, this can differ from MAL's season year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"min_year","required":false,"description":"Minimum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"max_year","required":false,"description":"Maximum calendar year of the aired or published start date, inclusive. For anime, this can differ from MAL's season year."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning random manga details","content":{"application/json":{"schema":{"description":"Successful response returning random manga details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}},"example":{"data":{"mal_id":106599,"url":"https://myanimelist.net/manga/106599/Chingiri","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/195315.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/195315t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/195315l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/195315.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/195315t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/195315l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Chingiri"},{"type":"Japanese","title":"ちんぎり"}],"title":"Chingiri","title_english":null,"title_japanese":"ちんぎり","title_synonyms":[],"type":"One-shot","chapters":1,"volumes":null,"status":"Finished","publishing":false,"published":{"from":"2017-04-24T00:00:00+00:00","to":null,"prop":{"from":{"day":24,"month":4,"year":2017},"to":{"day":null,"month":null,"year":null}},"string":"Apr 24, 2017"},"score":6.02,"scored_by":288,"rank":22468,"popularity":28960,"members":482,"favorites":0,"synopsis":"A bored person sees someone use the martial art Chingiri and decides to become his disciple.","background":null,"authors":[{"mal_id":5417,"type":"people","name":"Shimabukuro, Mitsutoshi","url":"https://myanimelist.net/people/5417/Mitsutoshi_Shimabukuro","role":"Story & Art"}],"serializations":[{"mal_id":83,"type":"manga","name":"Shounen Jump (Weekly)","url":"https://myanimelist.net/manga/magazine/83/Shounen_Jump_Weekly"}],"genres":[{"mal_id":1,"type":"manga","name":"Action","url":"https://myanimelist.net/manga/genre/1/Action"},{"mal_id":4,"type":"manga","name":"Comedy","url":"https://myanimelist.net/manga/genre/4/Comedy"}],"explicit_genres":[],"themes":[{"mal_id":17,"type":"manga","name":"Martial Arts","url":"https://myanimelist.net/manga/genre/17/Martial_Arts"}],"demographics":[{"mal_id":27,"type":"manga","name":"Shounen","url":"https://myanimelist.net/manga/genre/27/Shounen"}]}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/random/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/random/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/random/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/random/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/random/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/random/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/random/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/random/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/random/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/random/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/random/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/random/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/random/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/random/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/random/manga"}}}}}}},"operationId":"getRandomManga"}},"/random/characters":{"get":{"summary":"Random Character","tags":["Random"],"description":"Get a random character.","parameters":[{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive. Missing counts are treated as zero."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive. Missing counts are treated as zero."}],"responses":{"200":{"description":"Successful response returning random character details","content":{"application/json":{"schema":{"description":"Successful response returning random character details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing an anime or manga character.","properties":{"mal_id":{"type":"integer","description":"Unique character ID on MyAnimeList."},"url":{"type":"string","description":"Direct character profile page URL on MyAnimeList."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}},"description":"JPG and WebP character headshots in various resolutions."},"name":{"type":"string","description":"The full name of the character (Family, Given)."},"name_kanji":{"type":"string","nullable":true,"description":"Kanji representation of the name, if available."},"nicknames":{"type":"array","items":{"type":"string"},"description":"Nicknames or aliases of the character."},"favorites":{"type":"integer","description":"Total favorited count on MyAnimeList."},"about":{"type":"string","nullable":true,"description":"Biography and descriptive text for the character."}}}},"example":{"data":{"mal_id":186943,"url":"https://myanimelist.net/character/186943/Hotaru_Hinase","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/5/533661.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/5/533661t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/5/533661.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/5/533661t.webp"}},"name":"Hinase, Hotaru","name_kanji":"日生 ほたる","nicknames":[],"favorites":60,"about":"Hotaru Hinase is the main female protagonist of A Condition Called Love. She is a fairly average girl who has never been in love and doesn't even think she can fall in love. But after being moved somewhat by Hananoi's persistence in asking her out, she decides to give dating him a shot to hopefully become someone who can experience this thing you call love.\n\n(Source: Hananoi-kun to Koi no Yamai Wiki!)"}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/random/characters"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/random/characters"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/random/characters"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/random/characters"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/random/characters"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/random/characters"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/random/characters"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/random/characters"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/random/characters"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/random/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/random/characters"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/random/characters"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/random/characters"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/random/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/random/characters"}}}}}}},"operationId":"getRandomCharacters"}},"/random/people":{"get":{"summary":"Random Person","tags":["Random"],"description":"Get a random person.","parameters":[{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_favorites","required":false,"description":"Minimum favorites count, inclusive. Missing counts are treated as zero."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_favorites","required":false,"description":"Maximum favorites count, inclusive. Missing counts are treated as zero."}],"responses":{"200":{"description":"Successful response returning random person details","content":{"application/json":{"schema":{"description":"Successful response returning random person details","type":"object","properties":{"data":{"type":"object","description":"Core schema representing a person (voice actor, staff, or author).","properties":{"mal_id":{"type":"integer","description":"Unique person ID on MyAnimeList."},"url":{"type":"string","description":"Direct profile page URL on MyAnimeList."},"website_url":{"type":"string","nullable":true,"description":"Official website URL of the person, if available."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}},"description":"Portrait JPG image URL. A person without a portrait shows MAL's placeholder picture."},"name":{"type":"string","description":"The full name of the person (Family, Given)."},"given_name":{"type":"string","nullable":true,"description":"The given name of the person."},"family_name":{"type":"string","nullable":true,"description":"The family name of the person."},"alternate_names":{"type":"array","items":{"type":"string"},"description":"Alternative names, nicknames or kanji aliases."},"birthday":{"type":"string","nullable":true,"description":"Birthday in ISO 8601 format, as on Jikan. A birthday MAL gives only as a month and year is shown on the 1st of that month. One given only as a year, or with no year, is null."},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"about":{"type":"string","nullable":true,"description":"Biography, career summary, and additional context description."}}}},"example":{"data":{"mal_id":38549,"url":"https://myanimelist.net/people/38549/Kenichi_Kitano","website_url":null,"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/img/sp/icon/apple-touch-icon-256.png"}},"name":"Kitano, Kenichi","given_name":"健一","family_name":"北野","alternate_names":[],"birthday":null,"favorites":1,"about":null}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/random/people"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/random/people"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/random/people"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/random/people"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/random/people"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/random/people"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/random/people"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/random/people"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/random/people"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/random/people"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/random/people"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/random/people"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/random/people"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/random/people"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/random/people"}}}}}}},"operationId":"getRandomPeople"}},"/recommendations/anime":{"get":{"summary":"Recent Anime Recommendations","tags":["Recommendations"],"description":"Get the latest anime recommendations from users.\n\n> SFW flags filter out recommendations where a non-sfw ID is included.","parameters":[{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":100,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":100,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning recent anime recommendations","content":{"application/json":{"schema":{"description":"Successful response returning recent anime recommendations","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}},"content":{"type":"string","nullable":true},"date":{"type":"string","nullable":true},"user":{"type":"object","properties":{"url":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"pagination":{"last_visible_page":1152,"has_next_page":true},"data":[{"mal_id":"44037-63431","entry":[{"mal_id":44037,"url":"https://myanimelist.net/anime/44037/Shin_no_Nakama_ja_Nai_to_Yuusha_no_Party_wo_Oidasareta_node_Henkyou_de_Slow_Life_suru_Koto_ni_Shimashita","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1723/117854.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1723/117854t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1723/117854l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1723/117854.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1723/117854t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1723/117854l.webp"}},"title":"Shin no Nakama ja Nai to Yuusha no Party wo Oidasareta node, Henkyou de Slow Life suru Koto ni Shimashita"},{"mal_id":63431,"url":"https://myanimelist.net/anime/63431/Tsuihou_sareta_Cheat_Fuyo_Majutsushi_wa_Kimama_na_Second_Life_wo_Ouka_suru_Ore_wa_Buki_dake_ja_Naku_Arayuru_Mono_ni_Kyouka_Point_wo_Fuyo_Dekiru_shi_Ore_no_Ishi_de_Itsudemo_Kouka_wo_Kaijo_Dekiru_kedo_Nokotta_Hitotachi_Daijoubu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1963/160339.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1963/160339t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1963/160339l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1963/160339.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1963/160339t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1963/160339l.webp"}},"title":"Tsuihou sareta Cheat Fuyo Majutsushi wa Kimama na Second Life wo Ouka suru. Ore wa Buki dake ja Naku, Arayuru Mono ni \"Kyouka Point\" wo Fuyo Dekiru shi, Ore no Ishi de Itsudemo Kouka wo Kaijo Dekiru kedo, Nokotta Hitotachi Daijoubu?"}],"content":"Shin no Nakama started the “kicked out of the hero’s party” trend. The protagonist is forced out, so it starts a peaceful new life (or a new adventure), and the old party/guild feels the loss. Cheat Fuyo has exactly the same plot. You'll feel a deja vu during the entire series!","date":"2026-11-13T00:00:00+00:00","user":{"url":"https://myanimelist.net/profile/ToumaTachibana","username":"ToumaTachibana"}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/recommendations/anime?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/recommendations/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/recommendations/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/recommendations/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/recommendations/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/recommendations/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/recommendations/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/recommendations/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/recommendations/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/recommendations/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/recommendations/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/recommendations/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/recommendations/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/recommendations/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/recommendations/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/recommendations/anime"}}}}}}},"operationId":"getRecommendationsAnime"}},"/recommendations/manga":{"get":{"summary":"Recent Manga Recommendations","tags":["Recommendations"],"description":"Get the latest manga recommendations from users.\n\n> SFW flags filter out recommendations where a non-sfw ID is included.","parameters":[{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":100,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":100,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning recent manga recommendations","content":{"application/json":{"schema":{"description":"Successful response returning recent manga recommendations","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"string"},"entry":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}},"content":{"type":"string","nullable":true},"date":{"type":"string","nullable":true},"user":{"type":"object","properties":{"url":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"pagination":{"last_visible_page":418,"has_next_page":true},"data":[{"mal_id":"153945-176137","entry":[{"mal_id":153945,"url":"https://myanimelist.net/manga/153945/Inkya_datta_Ore_no_Seishun_Revenge__Tenshi_Sugiru_Ano_Ko_to_Ayumu_Re_Life","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/2/282408.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/2/282408t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/2/282408l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/2/282408.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/2/282408t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/2/282408l.webp"}},"title":"Inkya datta Ore no Seishun Revenge: Tenshi Sugiru Ano Ko to Ayumu Re Life"},{"mal_id":176137,"url":"https://myanimelist.net/manga/176137/Hikagemono_demo_Yarinaoshite_Ii_desu_ka","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/4/324285.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/4/324285t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/4/324285l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/4/324285.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/4/324285t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/4/324285l.webp"}},"title":"Hikagemono demo Yarinaoshite Ii desu ka?"}],"content":"mc's travel back into the past to their highschool days to change their future!","date":"2026-11-13T00:00:00+00:00","user":{"url":"https://myanimelist.net/profile/faeirye","username":"faeirye"}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/recommendations/manga?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/recommendations/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/recommendations/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/recommendations/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/recommendations/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/recommendations/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/recommendations/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/recommendations/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/recommendations/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/recommendations/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/recommendations/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/recommendations/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/recommendations/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/recommendations/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/recommendations/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/recommendations/manga"}}}}}}},"operationId":"getRecommendationsManga"}},"/top/anime":{"get":{"summary":"Top Anime","tags":["Top"],"description":"Get the highest-ranked anime.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","enum":["airing","upcoming","bypopularity","favorite"]},"in":"query","name":"filter","required":false,"description":"Limit the ranking to a subset: currently airing, upcoming, by popularity or by favorites.","examples":{"default":{"value":"airing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `tv`: TV series\n- `movie`: Movie\n- `ova`: OVA (original video animation)\n- `special`: Special\n- `ona`: ONA (original net animation, e.g. web releases)\n- `music`: Music video\n- `cm`: CM (commercial)\n- `pv`: PV (promotional video)\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_episodes","required":false,"description":"Minimum known positive episode count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_episodes","required":false,"description":"Maximum known positive episode count, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Ranking order. asc keeps the normal top-first order; desc reverses the primary ranking field. Defaults to asc.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning top anime series","content":{"application/json":{"schema":{"description":"Successful response returning top anime series","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":1231,"has_next_page":true,"current_page":1,"items":{"count":25,"total":30770,"per_page":25}},"data":[{"mal_id":52991,"url":"https://myanimelist.net/anime/52991/Sousou_no_Frieren","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1015/138006.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1015/138006t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1015/138006l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1015/138006.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1015/138006t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1015/138006l.webp"}},"trailer":{"youtube_id":"ZEkwCGJ3o7M","url":"https://www.youtube.com/watch?v=ZEkwCGJ3o7M","embed_url":"https://www.youtube-nocookie.com/embed/ZEkwCGJ3o7M?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/ZEkwCGJ3o7M/default.jpg","small_image_url":"https://img.youtube.com/vi/ZEkwCGJ3o7M/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/ZEkwCGJ3o7M/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/ZEkwCGJ3o7M/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/ZEkwCGJ3o7M/maxresdefault.jpg"},"title":"『葬送のフリーレン』PV第5弾【一級魔法使い試験編／二次試験】／Frieren: Beyond Journey's End","views":1168461,"likes":21764,"dislikes":50,"comment_count":0,"published_at":"2024-02-09T14:45:03+00:00","duration":"PT56S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Sousou no Frieren"},{"type":"Japanese","title":"葬送のフリーレン"},{"type":"English","title":"Frieren: Beyond Journey's End"},{"type":"Synonym","title":"Frieren at the Funeral"},{"type":"Synonym","title":"Frieren The Slayer"}],"title":"Sousou no Frieren","title_english":"Frieren: Beyond Journey's End","title_japanese":"葬送のフリーレン","title_synonyms":["Frieren at the Funeral","Frieren The Slayer"],"type":"TV","source":"Manga","episodes":28,"status":"Finished Airing","airing":false,"aired":{"from":"2023-09-29T00:00:00+00:00","to":"2024-03-22T00:00:00+00:00","prop":{"from":{"day":29,"month":9,"year":2023},"to":{"day":22,"month":3,"year":2024}},"string":"Sep 29, 2023 to Mar 22, 2024"},"duration":"24 min per ep","rating":"PG-13 - Teens 13 or older","score":9.24,"scored_by":952706,"rank":1,"popularity":95,"members":1543683,"favorites":94785,"synopsis":"During their decade-long quest to defeat the Demon King, the members of the hero's party—Himmel himself, the priest Heiter, the dwarf warrior Eisen, and the elven mage Frieren—forge bonds through adventures and battles, creating unforgettable precious memories for most of them.\n\nHowever, the time that Frieren spends with her comrades is equivalent to merely a fraction of her life, which has lasted over a thousand years. When the party disbands after their victory, Frieren casually returns to her \"usual\" routine of collecting spells across the continent. Due to her different sense of time, she seemingly holds no strong feelings toward the experiences she went through.\n\nAs the years pass, Frieren gradually realizes how her days in the hero's party truly impacted her. Witnessing the deaths of two of her former companions, Frieren begins to regret having taken their presence for granted; she vows to better understand humans and create real personal connections. Although the story of that once memorable journey has long ended, a new tale is about to begin.\n\n[Written by MAL Rewrite]","background":"Sousou no Frieren was released on Blu-ray and DVD in seven volumes from January 24, 2024, to July 17, 2024. The series aired on Nippon TV's Friday Anime Night block.","season":"fall","year":2023,"broadcast":{"day":"Fridays","time":"23:00","timezone":"Asia/Tokyo","string":"Fridays at 23:00 (JST)"},"producers":[{"mal_id":17,"type":"anime","name":"Aniplex","url":"https://myanimelist.net/anime/producer/17/Aniplex"},{"mal_id":53,"type":"anime","name":"Dentsu","url":"https://myanimelist.net/anime/producer/53/Dentsu"},{"mal_id":62,"type":"anime","name":"Shogakukan-Shueisha Productions","url":"https://myanimelist.net/anime/producer/62/Shogakukan-Shueisha_Productions"},{"mal_id":1003,"type":"anime","name":"Nippon Television Network","url":"https://myanimelist.net/anime/producer/1003/Nippon_Television_Network"},{"mal_id":1143,"type":"anime","name":"TOHO animation","url":"https://myanimelist.net/anime/producer/1143/TOHO_animation"},{"mal_id":1430,"type":"anime","name":"Shogakukan","url":"https://myanimelist.net/anime/producer/1430/Shogakukan"}],"licensors":[{"mal_id":1468,"type":"anime","name":"Crunchyroll","url":"https://myanimelist.net/anime/producer/1468/Crunchyroll"}],"studios":[{"mal_id":11,"type":"anime","name":"Madhouse","url":"https://myanimelist.net/anime/producer/11/Madhouse"}],"genres":[{"mal_id":2,"type":"anime","name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure"},{"mal_id":46,"type":"anime","name":"Award Winning","url":"https://myanimelist.net/anime/genre/46/Award_Winning"},{"mal_id":8,"type":"anime","name":"Drama","url":"https://myanimelist.net/anime/genre/8/Drama"},{"mal_id":10,"type":"anime","name":"Fantasy","url":"https://myanimelist.net/anime/genre/10/Fantasy"}],"explicit_genres":[],"themes":[],"demographics":[{"mal_id":27,"type":"anime","name":"Shounen","url":"https://myanimelist.net/anime/genre/27/Shounen"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/anime?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/anime"}}}}}}},"operationId":"getTopAnime"}},"/top/manga":{"get":{"summary":"Top Manga","tags":["Top"],"description":"Get the highest-ranked manga.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","enum":["publishing","upcoming","bypopularity","favorite"]},"in":"query","name":"filter","required":false,"description":"Limit the ranking to a subset: currently publishing, upcoming, by popularity or by favorites.","examples":{"default":{"value":"publishing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `manga`: Manga\n- `novel`: Novel\n- `lightnovel`: Light Novel\n- `oneshot`: One-shot\n- `doujin`: Doujinshi (self-published)\n- `manhwa`: Manhwa (Korean comics)\n- `manhua`: Manhua (Chinese comics)","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_chapters","required":false,"description":"Minimum known positive chapter count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_chapters","required":false,"description":"Maximum known positive chapter count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_volumes","required":false,"description":"Minimum known positive volume count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_volumes","required":false,"description":"Maximum known positive volume count, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Ranking order. asc keeps the normal top-first order; desc reverses the primary ranking field. Defaults to asc.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning top manga series","content":{"application/json":{"schema":{"description":"Successful response returning top manga series","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The MyAnimeList catalog ID of this manga entry."},"url":{"type":"string","description":"The MyAnimeList catalog webpage URL of the manga."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this manga.","items":{"type":"object","properties":{"type":{"type":"string","description":"The language/type classification of this title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the manga."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the manga, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the manga, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot). null when MAL doesn't know the type yet, as on Jikan."},"chapters":{"type":"integer","nullable":true,"description":"Total chapters published (null if ongoing)."},"volumes":{"type":"integer","nullable":true,"description":"Total volumes published (null if ongoing)."},"status":{"type":"string","description":"Publishing status of the manga (e.g. Publishing, Finished, On Hiatus)."},"publishing":{"type":"boolean","description":"Whether the manga is currently in active serialization."},"published":{"type":"object","description":"Publication date details, including dates in ISO-8601 formatting, split components, and text display string. For a date known only to the year or month, the ISO-8601 date is its first day and the unknown components in `prop` are null.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"The count of users who have rated the manga."},"rank":{"type":"integer","nullable":true,"description":"Global rank of the manga based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list additions."},"members":{"type":"integer","nullable":true,"description":"Total number of users who have added this manga to their list."},"favorites":{"type":"integer","nullable":true,"description":"Total number of users who have favorited this manga."},"synopsis":{"type":"string","nullable":true,"description":"A description or synopsis of the manga storyline."},"background":{"type":"string","nullable":true,"description":"Historical, publication or marketing background context."},"authors":{"type":"array","items":{"type":"object","description":"A reference to a manga author or artist, including their credited role.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the person."},"type":{"type":"string","description":"The type of the catalog item (always 'people')."},"name":{"type":"string","description":"The name of the author or artist."},"url":{"type":"string","description":"The MyAnimeList website link for this person."},"role":{"type":"string","nullable":true,"description":"The credited role of the person (e.g., 'Story', 'Art', 'Story & Art')."}}},"description":"Authors and artists credited for the manga, including their role (Story, Art, or Story & Art)."},"serializations":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Publications or magazines where the manga was serialized."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications of the manga."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among a manga's genres, so they are in `genres`. `/genres/manga?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen, Shojo)."}}}}},"example":{"pagination":{"last_visible_page":3445,"has_next_page":true,"current_page":1,"items":{"count":25,"total":86125,"per_page":25}},"data":[{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157897.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157897t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157897l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"},{"type":"English","title":"Berserk"},{"type":"Synonym","title":"Berserk: The Prototype"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":["Berserk: The Prototype"],"type":"Manga","chapters":null,"volumes":null,"status":"Publishing","publishing":true,"published":{"from":"1989-08-25T00:00:00+00:00","to":null,"prop":{"from":{"day":25,"month":8,"year":1989},"to":{"day":null,"month":null,"year":null}},"string":"Aug 25, 1989 to ?"},"score":9.46,"scored_by":407412,"rank":1,"popularity":1,"members":814539,"favorites":140014,"synopsis":"Guts, a former mercenary now known as the Black Swordsman, is out for revenge. After a tumultuous childhood, he finally finds someone he respects and believes he can trust, only to have everything fall apart when this person takes away everything important to Guts for the purpose of fulfilling his own desires. Now marked for death, Guts becomes condemned to a fate in which he is relentlessly pursued by demonic beings.\n\nSetting out on a dreadful quest riddled with misfortune, Guts, armed with a massive sword and monstrous strength, will let nothing stop him, not even death itself, until he is finally able to take the head of the one who stripped him—and his loved one—of their humanity.\n\n[Written by MAL Rewrite]\n\nIncluded one-shot:\nVolume 14: Berserk: The Prototype","background":"Berserk won the Excellence Award at the sixth Tezuka Osamu Cultural Prize in 2002. As of August 2025, over 70 million copies of the manga are in circulation. The series has been published in English by Dark Horse Comics since November 4, 2003. It has also been released in Argentina, Brazil, Czech Republic, France, Germany, Greece, Hong Kong, Italy, México, Poland, South Korea, Spain, Taiwan, Thailand, and Turkey. In May 2021, the author Kentaro Miura suddenly died at the age of 54. Chapter 364 of Berserk was published posthumously on September 10, 2021. Miura would often share details about the series' story with his childhood friend and fellow mangaka Kouji Mori. The series resumed on June 24, 2022, with Studio Gaga handling the art and Kouji Mori's supervision.","authors":[{"mal_id":1868,"type":"people","name":"Miura, Kentarou","url":"https://myanimelist.net/people/1868/Kentarou_Miura","role":"Story & Art"},{"mal_id":49592,"type":"people","name":"Studio Gaga","url":"https://myanimelist.net/people/49592/Studio_Gaga","role":"Art"}],"serializations":[{"mal_id":2,"type":"manga","name":"Young Animal","url":"https://myanimelist.net/manga/magazine/2/Young_Animal"}],"genres":[{"mal_id":1,"type":"manga","name":"Action","url":"https://myanimelist.net/manga/genre/1/Action"},{"mal_id":2,"type":"manga","name":"Adventure","url":"https://myanimelist.net/manga/genre/2/Adventure"},{"mal_id":46,"type":"manga","name":"Award Winning","url":"https://myanimelist.net/manga/genre/46/Award_Winning"},{"mal_id":8,"type":"manga","name":"Drama","url":"https://myanimelist.net/manga/genre/8/Drama"},{"mal_id":10,"type":"manga","name":"Fantasy","url":"https://myanimelist.net/manga/genre/10/Fantasy"},{"mal_id":14,"type":"manga","name":"Horror","url":"https://myanimelist.net/manga/genre/14/Horror"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"},{"mal_id":38,"type":"manga","name":"Military","url":"https://myanimelist.net/manga/genre/38/Military"},{"mal_id":40,"type":"manga","name":"Psychological","url":"https://myanimelist.net/manga/genre/40/Psychological"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/manga?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/manga"}}}}}}},"operationId":"getTopManga"}},"/top/people":{"get":{"summary":"Top People","tags":["Top"],"description":"Get the most favorited people.","parameters":[{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning top people","content":{"application/json":{"schema":{"description":"Successful response returning top people","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a person (voice actor, staff, or author).","properties":{"mal_id":{"type":"integer","description":"Unique person ID on MyAnimeList."},"url":{"type":"string","description":"Direct profile page URL on MyAnimeList."},"website_url":{"type":"string","nullable":true,"description":"Official website URL of the person, if available."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}},"description":"Portrait JPG image URL. A person without a portrait shows MAL's placeholder picture."},"name":{"type":"string","description":"The full name of the person (Family, Given)."},"given_name":{"type":"string","nullable":true,"description":"The given name of the person."},"family_name":{"type":"string","nullable":true,"description":"The family name of the person."},"alternate_names":{"type":"array","items":{"type":"string"},"description":"Alternative names, nicknames or kanji aliases."},"birthday":{"type":"string","nullable":true,"description":"Birthday in ISO 8601 format, as on Jikan. A birthday MAL gives only as a month and year is shown on the 1st of that month. One given only as a year, or with no year, is null."},"favorites":{"type":"integer","description":"Total list favorited count on MyAnimeList."},"about":{"type":"string","nullable":true,"description":"Biography, career summary, and additional context description."}}}}},"example":{"pagination":{"last_visible_page":3441,"has_next_page":true,"current_page":1,"items":{"count":25,"total":86016,"per_page":25}},"data":[{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.seiyuawards.jp/winning/winning_09","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/66163.jpg"}},"name":"Kamiya, Hiroshi","given_name":"浩史","family_name":"神谷","alternate_names":["ヒロC","HiroC","Kamiyan","ピロシ","かみやん"],"birthday":"1975-01-28T00:00:00+00:00","favorites":108705,"about":"Birthplace: Matsudo, Chiba Prefecture, Japan\n\nHometown: Ushiku, Ibaraki Prefecture, Japan\n\nBlood type: A\n\nHeight: 167 cm (5'6\")\n\nWeight: 53 kg (117 lbs)\n\nKamiya Hiroshi went to Aoni Juku and decided to pursue voice acting. Since then, he's been affiliated with Aoni Production from his debut in 1994 to present.\n\nKamiya Hiroshi hosts several radio programs, one of the oldest and most prevalent programs he hosts together with a fellow seiyuu Ono Daisuke is Kamiya Hiroshi Ono Daisuke no DearGirl: Stories (神谷浩史・小野大輔のDearGirl～Stories～) since April 2007. The program they hosted together won \"Best Personality Awards\" in the 9th Annual Seiyuu Awards in 2015.\n\nHe and Ono Daisuke are vocalists of MasochistiC Ono BanD (MOB) that debuted in Nippon Budoukan in 2013 through the DearGirl: Stories Festival Carnival Matsuri. MOB went on hiatus in 2015 but the band announced their coming back on the 10th-anniversary celebration of his and Ono Daisuke's radio program, that was held on July 25, 2016.\n\nIn May 2010, he and Miyu Irino banded a Kiramune-unit called KAmiYU, for Mokei Senshi Gunpla Builders Beginning G theme song. First Mini-album \"link-up\" was released on August 3, 2011.\n\nAwards:\n\n- 2nd Seiyuu Awards (2008) - Best Supporting Actor Award\n\n- 3rd Seiyuu Awards (2009) - Best Actor and Best Personality Awards\n\n- Tokyo Anime Awards (2010) - Voice Actor Award\n\n- 6th Seiyuu Awards (2012) - Most Votes Award\n\n- 7th Seiyuu Awards (2013) - Most Votes Award\n\n- 8th Seiyuu Awards (2014) - Most Votes Award\n\n- 9th Seiyuu Awards (2015) - Best Personality and Most Votes Awards\n\n- 10th Seiyuu Awards (2016) - Most Votes Award - winning the award for 5 consecutive times earned him induction into Seiyuu Awards' Hall of Fame\n\n- 13th Seiyuu Awards (2019) - Most Votes Award\n\n- 14th Seiyuu Awards (2020) - Most Votes Award\n\nAnnounced his marriage to actress Rina Aizawa on January 1, 2025.\n\nProfile: Aoni\n\nKiramune\n\nX (Music): @Utahiroshi15th\n\nInstagram: @hiroshi1975kamiya"}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/people?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/people"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/people"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/people"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/people"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/people"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/people"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/people"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/people"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/people"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/people"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/people"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/people"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/people"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/people"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/people"}}}}}}},"operationId":"getTopPeople"}},"/top/characters":{"get":{"summary":"Top Characters","tags":["Top"],"description":"Get the most favorited characters.","parameters":[{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning top characters","content":{"application/json":{"schema":{"description":"Successful response returning top characters","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime or manga character.","properties":{"mal_id":{"type":"integer","description":"Unique character ID on MyAnimeList."},"url":{"type":"string","description":"Direct character profile page URL on MyAnimeList."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}},"description":"JPG and WebP character headshots in various resolutions."},"name":{"type":"string","description":"The full name of the character (Family, Given)."},"name_kanji":{"type":"string","nullable":true,"description":"Kanji representation of the name, if available."},"nicknames":{"type":"array","items":{"type":"string"},"description":"Nicknames or aliases of the character."},"favorites":{"type":"integer","description":"Total favorited count on MyAnimeList."},"about":{"type":"string","nullable":true,"description":"Biography and descriptive text for the character."}}}}},"example":{"pagination":{"last_visible_page":9276,"has_next_page":true,"current_page":1,"items":{"count":25,"total":231882,"per_page":25}},"data":[{"mal_id":417,"url":"https://myanimelist.net/character/417/Lelouch_Lamperouge","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/8/406163.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/8/406163t.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/8/406163.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/8/406163t.webp"}},"name":"Lamperouge, Lelouch","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":181838,"about":"Age: 17 (first season), 18 (second season)\n\nBirthdate:  December 5, 1999 a.t.b. (Sagittarius)\n\nBlood Type: A\n\nNationality: Britannia\n\nHeight: 178 cm (5'10\")\n\nOccupation: Student, Terrorist, Knightmare Pilot, Politician, Emperor, Prince\n\nAllegiance: Order of the Black Knights\n\nPosition: Leader of the Black Knights\n\nKnightmare: Sutherland, Burai, Gawain, Shinkirou\n\nLelouch is the main protagonist of the anime/manga series Code Geass. He is the Eleventh Prince of the Holy Britannian Empire and the son of the 98th Emperor of Britannia, Charles zi Britannia.\n\nLelouch is a very clever individual who is also calm, sophisticated, and arrogant due to his aristocratic upbringing. While at school, Lelouch conducts himself as a friendly, likable, and often an easygoing student. However, this is a mask to hide his true nature. While as Zero, his true nature is expressed. His charisma and beliefs in justice gain him the trust and respect of many soldiers and leaders.\n\nHe is known for having a very stoic personality. He never cared about schoolwork, seeing the entire thing as trivial, even though his high intelligence would make it easy for him. He enjoys seeking out challenges, often playing chess against the nobility. In general, Lelouch takes most day-to-day affairs with open disinterest, often not even noticing the affection of others, especially Shirley, his classmate. He has a strong dislike for nobles, viewing them as tepid and \"overprivileged parasites.\"\n\nMany characters have noted that Lelouch is entirely selfish, as his desire to remake the world into what he wants it to become from his desire to avenge his mother's apparent death and Nunnally's sake. However, in time, he realizes that this goal is not just for them but also the entire world.\n\nDespite his cold, calculating demeanor and ruthlessness in battle, he can be a rather compassionate person to his friends and loved ones. To Nunnally, he is a loving older brother, and to Suzaku, a loyal friend, although the two are enemies. Lelouch, at first glance, seems to have relatively little concern for the well-being of his subordinates, but in reality, he does care about them, seeing them as valuable allies.\n\n[Spoiler] As the series progresses, Lelouch suffers traumas and further losses that further deepen his resolve. However, he also grows less merciful to his enemies if he cannot Geass them. [/Spoiler]\n\nBackground (as Lelouch):\n\n[Spoiler] Lelouch was born on December 5, 1999, a.t.b. as Lelouch vi Britannia, the son of Charles Zi Britannia, and the late Imperial Consort Marianne, making Lelouch the Eleventh Prince of the Holy Britannian Empire. He was in line to be the seventeenth heir to the throne before his mother's assassination and his sister's crippling in the same incident. A ten-year-old Lelouch confronted the Emperor afterward and accused him of leaving his mother defenseless, even going as far as renouncing his entitlement to the throne. In response, his father banished him to Japan and used him as a political hostage in the Sakuradite conflict. During his stay at the Kururugi household, he first met Suzaku Kururugi, with whom the young Lelouch did not interact initially in a friendly way, before later becoming friends. However, when Britannia finally developed its Knightmare Frames fleet and decided to invade Japan to seize control of the Sakuradite mines, discarding Lelouch's use as a diplomatic tool. Lelouch, fearing for his sister's safety, hid their true identities and sought the help of the Ashford family, who were his mother's allies. His mother's death and his father's apparent lack of concern regarding it were considerable blows to Lelouch. He always felt that it was unfair for both his mother and sister and made it his goal to pursue a better world for Nunnally. He also seeks to discover the valid reason for his mother's death, who got murdered in the Aries Imperial Palace, a place terrorists would be unlikely to penetrate successfully without being noticed, if at all. [/Spoiler]\n\nBackground (as Zero):\n\n[Spoiler] Shortly after gaining the power of Geass from C.C., Lelouch assumes the secret identity of Zero, a mysterious, masked revolutionary dressed in a black helmet and cloak. The helmet has a retractable plate over the left eye so Lelouch can use his Geass. In this guise, he forms the Black Knights, initially composed of Kaname Ohgi's resistance group members. The goal of this vigilante group is a campaign against influential individuals who oppress the helpless, which he eventually expands into reforming Japan as an independent nation. Lelouch is willing to do whatever it takes to carry out his goal, even if it means lying to his followers and using people as bait for the outcome he desires. However, he has trouble putting his close friends in harms way for the sake of his goal, which is a weakness as a commander but a remnant of his humanity and sanity. In particular, his feelings for Nunnally often hinder his plans, particularly at the end of the first season, where he abandons a massive war with Britannian forces to rescue her. He has come to embrace the fact that he needs to destroy before reconstruction can occur, even if it means harming those he cares for. Initially, Lelouch is motivated by the desire to avenge his mother's death and construct an ideal world where his sister Nunnally can live peacefully. After Nunnally becomes Viceroy of Area 11, and her wishes conflict with his goals, his friends help him to realize that his rebellion is no longer just for Nunnally but for all the people of the world. [/Spoiler]\n\nFirst Season:\n\n[Spoiler] Lelouch makes his first appearance at the beginning of the first episode of the series, as a child, along with Suzaku Kururugi watching the Britannian Military entering Japan, with the figure of C.C. watching them. He is introduced to be a student of Ashford Academy, a member of its Student Council. He is a brilliant thinker who is exceptionally talented at chess. He lives with his younger sister, Nunnally, and their maid, Sayoko, in the Student Council building of Ashford Academy, where they are looked after by the Ashford Family. Lelouch and his friend Rivalz enter a room where a chess match was being played, with Lelouch claiming he can turn the situation on the chess table in under 9 minutes. He effortlessly crushes him in a short period (8 minutes, 32 seconds) while the noble gapes at his defeat.  As they walk out of the casino, they are interrupted by Clovis's \"heart-breaking\" speech, which turns out to be an act. On the road, Rivalz accidentally cuts the way of the terrorists, resulting in their vehicle's crash. Soon enough, Lelouch is swept into the conflict between the Holy Britannian Empire and Japanese Resistance Operatives. Suzaku, who Lelouch had not met for seven years, finds the vehicle and confronts Lelouch, who he mistakes as a terrorist. Nagata opens the capsule, and instead of gas, a restrained C.C. appears. Before they can get answers, Suzaku's superior comes and tells him not to question his briefing and shoot the \"terrorist,\" Lelouch. When he refuses, he got shot in the back. Lelouch and C.C. take the opportunity to escape. Just as they seem to have evaded detection, Lelouch's phone rings, giving him away; as they are about to kill him, C.C. jumps in front and shot in the forehead. However, surprisingly, he is grabbed by the hand of C.C., who proposes a contract that would allow him to live and endow him with Geass, the power of kings. He accepts and stands up, reinvigorated, and uses his ability to make his pursuers kill themselves. Following his actions, Villetta Nu appears in her Sutherland, and Lelouch decides to take it and uses his Geass on her. After using his newfound power, he attempts to crush the rest of the Britannian Military that is wiping out the Elevens in the Shinjuku Ghetto. He uses Ohgi's Resistance Group and gives them orders to eliminate the Britannian Soldiers. Later on, Britannian Army's experimental Knightmare Lancelot, piloted by Suzaku, ruins Lelouch's plans. Just as the Britannian Army corners the terrorists, Clovis orders an immediate cease-fire under coercion by Lelouch. Lelouch confronts Clovis at gunpoint about the murder of his mother, Marianne vi Britannia, before killing him. When he returns to Ashford Academy, he discovers that Kallen Stadtfeld, one of the terrorists he helped Shinjuku Ghetto, attends the same school. Limitations to his power are also revealed when he attempts to question her and unsuccessfully erase her memory. Both he and Kallen attempt to gain information from each other through Sayoko. To Lelouch's surprise, C.C., the girl who gave him Geass, shows up alive in his residence. He discovers that she is immortal and learns more about his Geass ability. Unknown to Lelouch, Cornelia had set a trap for Zero at the Saitama Ghetto by simulating the conditions in Shinjuku Ghetto. Despite C.C.'s warnings, Lelouch takes the bait and goes to the aid of the Saitama resistance. His plan falls apart from a combination of Cornelia's superior tactics and the resistance cell's different motivations. Lelouch is cornered and nearly discovered, but C.C. dons his Zero costume and distracts the Britannian Army, allowing him to escape. Lelouch blames his defeat on the undisciplined rebels and resolves to build something better than a mere resistance unit, first an army, \"people,\" and finally a nation. He later forms The Order of the Black Knights during the Japanese Liberation Front Hotel Incident after rescuing the hostages. He leads the Black Knights becoming a revolutionary and gains popular support amongst the Elevens. The turning point in his rebellion comes when Euphemia li Britannia declares the region under Mt. Fuji, the Special Administrative Zone of Japan, giving the Japanese people their name and country back, albeit in a much smaller area. This decrement effectively destroys any possibility of the Black Knights' rebellion; acceptance would render them powerless, and refusal would make them pariahs. Lelouch confronts her at the opening ceremony and tries to have her shoot him, hoping to make himself a martyr. When she mentions giving her title up, he surrenders and agrees to work with her. However, his Geass permanently activates, and an offhand comment about ordering her to kill the Japanese forces her to do just that. Lelouch got forced to kill Euphemia to end the ensuing massacre, but he becomes a hero of the people in doing so. Using this newfound support, Lelouch announces the creation of the United States of Japan and can lead an attack on the Tokyo Settlement. The episode goes well at first, but when Lelouch learns that Nunnally got kidnapped, he abandons the battle, leaving his forces helpless against the much better organized Britannian forces. On his way to rescue Nunnally, Jeremiah intercepts him after an ensuing battle. Lelouch and C.C. make their way to Kamine Island to search for Nunnally, but Jeremiah appears once more. Being unable to defeat him as the Gawain has taken its toll in the many battles it has participated in, C.C. decides to sacrifice herself and drops Lelouch off. Afterward, Suzaku Kuruguri confronted Lelouch. Kallen appears as well, and Suzaku reveals to her that Zero's true identity is Lelouch. Lelouch attempts to broker a truce, trying to convince Suzaku to help him find Nunnally, but Suzaku is distraught over the death of Euphemia and refuses to listen. An angered Lelouch draws his pistol, and he and Suzaku attempt to shoot one another. A single gunshot is heard as the screen fades to black at the end of the first season. [/Spoiler]\n\nSecond Season:\n\n[Spoiler] One year later, Lelouch is once again a student at Ashford Academy. He has had his memories rewritten by Charles Zi Britannia, revealed to possess a Geass power of his own, erasing his memory of being a prince, being Zero, and having a younger brother named Rolo Lamperouge instead of a sister. He is seen running away from Villetta Nu, who is revealed to be a teacher now in the first episode. He is able to leave Ashford Academy with Rolo to go gamble at Babel Tower. It is here where Kallen and the remnants of the Black Knights attempt to retrieve Zero. After being cornered by the OSI, C.C. appears and restores Lelouch's memories. Afterward, Urabe and Kallen appear in their respective Knightmares, and he resumes leadership of the Black Knights. Initially, Lelouch makes his base in the Chinese Federation's consulate, using his Geass on the High Eunuch stationed there so Hifh Eunuch will welcome them. When Nunnally is appointed as Viceroy of Area 11 and announces her plans to re-establish the Special Administrative Zone of Japan, Lelouch falls into a depression since he would be impeding her wishes by continuing his rebellion. He nearly begins taking Refrain before Kallen stops him. With the help of Kallen and his friends at the Ashford Academy, Lelouch realizes that his mission no longer revolves solely around Nunnally but concerns the rest of his friends and the Japanese people as well. Lelouch engineers the legal exile of the Black Knights by getting the Britannians to agree to exile Zero in exchange for bringing one million participants for Nunnally's new Japan. By having them all dress as Zero, he forces Suzaku to exile the Black Knights. They successfully escape to the Chinese Federation, where Lelouch begins allying with the other world powers to create a force that rivals Britannia. During his time in Area 11, Jeremiah Gottwald restores Shirley's memories right before she got shot by Rolo Lamperouge, an assassin for the Geass Directorate. Unable to retaliate against either, as they are now his allies, Lelouch instead wipes out the Directorate, in the process learning of C.C.'s wish to die and that the Emperor has become immortal. C.C. would have had Lelouch kill her and take on her immortality, but instead spares him by placing him inside her memories while the Emperor kills her. Lelouch refuses to let her die unhappy, encouraging her to live on, but memories of her life after gaining Geass are erased during their escape. Once Lelouch's new alliance, the United Federation of Nations, is formed, their first act is to liberate Japan. To ensure Nunnally's safety, Lelouch meets with Suzaku in an attempt to convince him to help. Lelouch takes full responsibility for all that he has done rather than admit the truth, but Suzaku agrees to help since he recognized what Lelouch is doing. Kallen meets up with Lelouch to tell him that Ohgi wants him to come to warehouse 9. In the elevator, Kallen expresses to Lelouch her gratitude for Nunnally's help when she was captured. They then arrive to see that the core members of the Black Knights are betraying him, stating they know his real identity and Geass power. With Lelouch backed into a corner, he reveals his identity and lies that everything he has done was for his entertainment to save Kallen from dying with him, telling her that she needs to live. As they are about to gun Lelouch down, Rolo appears in the Shinkirō to evacuate him but dies in the attempt as he overuses his Geass. Lelouch comes to terms with his feelings for Rolo and buries him properly as the little brother of Lelouch Lamperouge. Following the betrayal of the Black Knights, Lelouch focuses on defeating the Emperor. Lelouch confronts the Emperor in the Sword of Akasha, where he learns the truth about his mother and Charles' plans. Lelouch denies their attempt to create a new world and kills both Charles and Marianne with C.C. and Suzaku. One month later, he installs himself as the 99th Emperor of Britannia and appoints Suzaku as his Knight of Zero. As Emperor, Lelouch abolishes all the oppressive laws and class systems of Britannia, frees every colony (thereby negating the concept of \"Numbers\"), and puts down all resistance to his goals. However, the seemingly benevolent acts are a smokescreen for his intention to take over the world, which he calls the Zero Requiem. He announces that Britannia intends to join the U.F.N. At the meeting, Lelouch takes the council members hostage after learning Britannia's large population would give him a majority voting block. This confusion brings him into conflict with Schneizel and the Black Knights, the former bringing his F.L.E.I.J.A.-equipped floating fortress into the battle. The biggest surprise comes when Nunnally is revealed to be alive and declares herself to be his and Suzaku's enemy. Though initially reluctant, Lelouch is convinced that he must fight her for the sake of his plan. Using Nina's countermeasure, Lelouch and Suzaku disable the F.L.E.I.J.A., and the two proceed to board the Damocles. He manages to place Schneizel under his control and then confronts Nunnally, who has regained her sight. Lelouch uses his Geass on Nunnally to get her to hand over the F.L.E.I.J.A. launch button and takes over Damocles. With no one left capable of opposing him, Lelouch becomes the ruler of the world. Sometime after the battle with Schneizel and the Black Knights, Lelouch appoints Marrybell in charge of Damocles. Lelouch arranges the public execution of the Black Knight leaders and the U.F.N. representatives. Suzaku, disguised as Zero, interrupts and kills Lelouch, the culmination of the Zero Requiem as they had planned. [/Spoiler]\n\n[Spoiler] By directing all the hatred of the world onto him, Lelouch's death will serve to facilitate peace; while simultaneously redeeming both Lelouch's and Suzaku's sins by having them impose the most significant punishments on themselves. Finally, Lelouch wished for a tomorrow to Nunnally, life for Suzaku, who wanted to atone his since through death. At the same time, during the Glinda Knights' and Peace Mark's assault on Damocles, Marrybell and Orpheus fall to their deaths. Nunnally can only watch in shock. When Lelouch falls near her, she takes his hand and realizes that he had sacrificed himself on purpose, for her dream and world peace. Lelouch dies smiling in the arms of a crying Nunnally, saying he has destroyed the world and created it anew. Suzaku is left playing the role of Zero. The aftermath is narrated by Kallen, who ends up forgiving Lelouch as she has realized Lelouch's true intentions were noble and explained how the world is much better off with all the energy being focused on reconstruction. During the final scene of the series, C.C. makes one last remark to Lelouch about how she may have been wrong about Geass condemning one to a life of solitude. [/Spoiler]\n\nGeass:\n\nLelouch's Geass, bestowed upon him by C.C., gives him \"The Power of Absolute Obedience,\" allowing him to plant commands within a person's mind upon eye contact in a manner comparable to hypnosis. Activation of his Geass is visually represented by the manifestation of a Geass Sigil in his left eye. Commands dictated are written into the minds of the designated targets, the Sigil projecting him from his eye to theirs.\n\n[Spoiler] Lelouch could initially toggle Geass activation at will but subsequently lost this control and suffered from an affliction known as \"runaway Geass\" near the end of the first series. In the second season, C.C. gives Lelouch a contact lens that blocks his Geass but indicates that his Geass will eventually grow powerful enough to render it ineffective. Lelouch's Geass evolves to cover both of his eyes in episode 21 due to pushing his Geass to the limit, trying to command C's World, the collective unconscious of humanity itself. He receives a second contact lens to cover it later. [/Spoiler]\n\nOf all the Geass abilities in the series, Lelouch's has been explored the most and also seems to have the most restrictions, and side effects of any Geass introduced:Only affects the nervous system.\nCommands must be issued verbally.\nThe victim must make direct eye contact for commands to be issued. The maximum effective distance is 272 meters. A line of sight via a reflective surface is sufficient for the effect to occur.\nCommands may be issued only once to any given individual, but any number of commands may be issued at the initial application so long as eye contact is unbroken. Since Jeremiah's Geass Canceller negates all Geass effects, those exposed to it may be commanded once again.\nThe victim will not perform any action disallowed by their physical or mental capabilities, though they will try to carry out the command to the best of their ability. However, orders that affect the mind or consciousness (such as erasing memories or seeing hallucinations) are possible even though the victim could not usually force themselves to do so. Also, commands that ask for something unpreventable and physically impossible, such as telling a dying person to \"not die,\" will not have to make them immune to death.\nAn action will be carried out for as long as dictated in its command or the indicated conditional circumstance. Eye contact does not need to be maintained for command execution to occur. No upper limit has been established, but the conditional command Lelouch gives Suzaku is still in effect more than a year later.\nThe victim's memories for the duration of command issue and execution are sealed and cannot be recalled.\nAs demonstrated in Princess Euphemia's response to the command that she kills the Japanese, a victim may resist a commanded action to some degree if it is utterly appalling and morally incomprehensible to them.(Source: Code Geass Wiki, Villains Wiki, Heroes Wiki, Anime and Manga Universe Wiki)"}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/characters?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/characters"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/characters"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/characters"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/characters"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/characters"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/characters"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/characters"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/characters"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/characters"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/characters"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/characters"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/characters"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/characters"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/characters"}}}}}}},"operationId":"getTopCharacters"}},"/top/reviews":{"get":{"summary":"Top Reviews","tags":["Top"],"description":"Get the most helpful reviews.\n\n> SFW flags filter out reviews about non-sfw entries.","parameters":[{"schema":{"type":"string","enum":["anime","manga"],"x-enumDescriptions":{}},"in":"query","name":"type","required":false,"description":"Only reviews of anime or only reviews of manga.","examples":{"default":{"value":"anime","x-disabled":true}}},{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"boolean","default":true},"in":"query","name":"preliminary","required":false,"description":"Whether the results include preliminary reviews or not.","examples":{"default":{"value":true,"x-disabled":true}}},{"schema":{"type":"boolean","default":true},"in":"query","name":"spoilers","required":false,"description":"Whether the results include reviews with spoilers or not.","examples":{"default":{"value":true,"x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning top reviews","content":{"application/json":{"schema":{"description":"Successful response returning top reviews","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","properties":{"overall":{"type":"integer"},"nice":{"type":"integer"},"love_it":{"type":"integer"},"funny":{"type":"integer"},"confusing":{"type":"integer"},"informative":{"type":"integer"},"well_written":{"type":"integer"},"creative":{"type":"integer"}}},"date":{"type":"string","nullable":true},"review":{"type":"string","nullable":true},"score":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"is_spoiler":{"type":"boolean"},"is_preliminary":{"type":"boolean"},"episodes_watched":{"type":"integer","nullable":true,"description":"On anime reviews only."},"chapters_read":{"type":"integer","nullable":true,"description":"On manga reviews only."},"entry":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}},"user":{"type":"object","properties":{"username":{"type":"string"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}}},"required":["mal_id","url","type","reactions","date","review","score","tags","is_spoiler","is_preliminary","entry","user"]}}},"example":{"pagination":{"last_visible_page":15171,"has_next_page":true,"current_page":1,"items":{"count":25,"total":379254,"per_page":25}},"data":[{"mal_id":2772,"url":"https://myanimelist.net/reviews.php?id=2772","type":"anime","reactions":{"overall":6051,"nice":5620,"love_it":199,"funny":40,"confusing":137,"informative":7,"well_written":45,"creative":3},"date":"2008-02-28T12:25:00+00:00","review":"There are two responses I get, without fail, every time I try to get someone new to watch this show. \"I don't like the art style\" or \"I've seen the dub - NO THANKS.\" I'm guilty of both of these myself. But if there's one thing I need to stress before even getting started on this review, it's that the 4Kids dub is NOT One Piece. For the love of god, PLEASE do not think it is. If you've suffered the misfortune of seeing some of the 4Kids episodes, just erase them from your mind and start fresh. They butchered it, there's really no other way to put it. They cut episodes, changed the dialogue to fit a MUCH younger and apparently far less intelligent audience (almost insultingly so), gave the characters RIDICULOUS voices, and pretty much watered down the entire series. FUNimation has done a much better job so far from what I've seen, but regardless, watching it in its original Japanese form with subtitles is really the way to go.\n\nAs for the art style, it's true, it's completely different from almost anything else I've seen. Much more \"cartoonish\" and maybe not what you'd expect from an anime. Despite that, you end up loving it. I wouldn't even say that you have to \"get used to it\" because it's not something that detracts from the rest of the series in any way. It didn't even take me two episodes before I was thoroughly enjoying it and seeing it as a fresh, new style, exciting almost and unlike anything I'd experienced before. Now, some 300+ episodes later, I can't remember ever NOT liking it, or even why I would have. Especially now with One Piece being aired in high definition, the art is crisp, clean, colorful - VERY sharp and wonderful to look at.\n\nNow that we've got those two points out of the way...\n\nOne Piece is actually one of the best shows I've ever seen, anime or otherwise. The plot is pretty basic at first. Monkey D. Luffy has just set out on his own to find the legendary treasure 'one piece' and become Pirate King, and he's looking for a crew to sail with him. You'll find yourself falling in love with each and every new member as Luffy finds them. They're all extremely well developed, with interesting backgrounds and unique, fun personalities. They form one very quirky crew that's always discovering new adventures and somehow getting themselves into trouble as they strive to achieve their dreams. Each main story arc introduces new minor characters as well, and they're just as much fun and easy to fall in love with as the Straw Hat crew. Not one character is left out or feels like they're there for no reason. Everyone has a purpose and adds to the storyline, and one of the really cool things about One Piece is that these 'purposes' often resurface at later points in the series. No detail is left untouched, and you'll seriously be amazed by the way Oda threads together plots and characters and blends all their stories perfectly the more the series progresses.\n\nThe plot itself, though fairly straightforward at first like I said, quickly evolves into something HUGE. Much of the beginning of the series is dedicated to forming the crew and letting you get to know the characters, though it's definitely never lacking in action, but once they reach the Grand Line, you're swept up in adventure after adventure and following some of the most fantastic story arcs you'll ever watch. The battles and fights are well-paced, with the final boss fight almost always being completely EPIC. But even through the action, One Piece never quite loses it's lighthearted, humorous edge. The episodes are sprinkled with PLENTY of funny moments, never too many and never too few. There's always a wonderful balance of action and humor.\n\nOne Piece also has its fair share of heart-wrenching moments, which may take you by surprise! There are some EXTREMELY powerful scenes and episodes that kind of blindside you and leave you wondering when you became quite so emotionally attached to certain characters or other things. I've definitely found myself near tears or actually crying at more than one point. One Piece has it all - amazing characters, the never-ending yet never TOO over-the-top humor, exciting battles, fun adventures, heartbreaking moments with quick to follow touching moments. And underneath everything, there's always the theme of friendship and teamwork, of working to reach your dreams and helping those closest to you achieve theirs, of growing and maturing as a person and discovering the power within yourself to overcome obstacles of any sort, of just BEING THERE for the rest of your crew when they need you - of being NAKAMA.\n\nIn a word, One Piece is perfect. And perhaps I'm just biased, being an obviously OBSESSED fan at this point, haha, but what can I say? It's been running for 344 episodes so far and not ONCE have I wondered or hoped that it would start to reach an end. It is, simply put, amazing.\n\nSo why should you watch One Piece?\n\nBecause you're missing out on one hell of a fantastic show if you don't at least give it a try.","score":10,"tags":["Recommended","Preliminary"],"is_spoiler":false,"is_preliminary":true,"episodes_watched":344,"entry":{"mal_id":21,"url":"https://myanimelist.net/anime/21/One_Piece","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1244/138851.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1244/138851t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1244/138851l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1244/138851.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1244/138851t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1244/138851l.webp"}},"title":"One Piece"},"user":{"username":"Maxine","url":"https://myanimelist.net/profile/Maxine","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/91c1a580-982e-4110-98ad-cc938beb608b_225w?s=9a9fa52be9f281827d198a0394aebaa8"},"webp":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/91c1a580-982e-4110-98ad-cc938beb608b_225w?s=9a9fa52be9f281827d198a0394aebaa8"}}}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/reviews?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/reviews"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/reviews"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/reviews"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/reviews"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/reviews"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/reviews"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/reviews"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/reviews"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/reviews"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/reviews"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/reviews"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/reviews"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/reviews"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/reviews"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/reviews"}}}}}}},"operationId":"getTopReviews"}},"/top/recommendations":{"get":{"summary":"Top Recommendations","tags":["Top"],"description":"Get the recommendations the most users agree on. Only pairs recommended by at least two users are listed.\n\n> SFW flags filter out recommendations where a non-sfw ID is included.","parameters":[{"schema":{"type":"string","enum":["anime","manga"],"default":"anime","x-enumDescriptions":{}},"in":"query","name":"type","required":false,"description":"Pairs of anime or pairs of manga.","examples":{"default":{"value":"anime","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning the most recommended pairs","content":{"application/json":{"schema":{"description":"Successful response returning the most recommended pairs","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"string","description":"The two MyAnimeList IDs of the pair, lower first"},"url":{"type":"string","description":"The pair's page on MyAnimeList"},"entry":{"type":"array","description":"The two titles, lower MyAnimeList ID first","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}}},"votes":{"type":"integer","description":"Number of users who recommended this pair, in either direction"},"content":{"type":"string","nullable":true,"description":"The text of the first recommendation of this pair"},"date":{"type":"string","nullable":true,"description":"When the first recommendation of this pair was written"},"user":{"type":"object","description":"Who wrote the first recommendation of this pair","properties":{"url":{"type":"string"},"username":{"type":"string"}}}}}}},"example":{"pagination":{"last_visible_page":623,"has_next_page":true,"current_page":1,"items":{"count":25,"total":15551,"per_page":25}},"data":[{"mal_id":"1535-1575","url":"https://myanimelist.net/recommendations/anime/1535-1575","entry":[{"mal_id":1535,"url":"https://myanimelist.net/anime/1535/Death_Note","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1079/138100.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1079/138100.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1079/138100l.webp"}},"title":"Death Note"},{"mal_id":1575,"url":"https://myanimelist.net/anime/1575/Code_Geass__Hangyaku_no_Lelouch","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1032/135088.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1032/135088t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1032/135088l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1032/135088.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1032/135088t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1032/135088l.webp"}},"title":"Code Geass: Hangyaku no Lelouch"}],"votes":650,"content":"Both anime are like a chess game. Very strategic and different from what you've seen before.","date":"2007-06-06T00:00:00+00:00","user":{"url":"https://myanimelist.net/profile/Ryogakun","username":"Ryogakun"}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/recommendations?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/recommendations"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/recommendations"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/recommendations"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/recommendations"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/recommendations"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/recommendations"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/recommendations"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/recommendations"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/recommendations"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/recommendations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/recommendations"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/recommendations"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/recommendations"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/recommendations"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/recommendations"}}}}}}},"operationId":"getTopRecommendations"}},"/top/episodes":{"get":{"summary":"Top Episodes","tags":["Top"],"description":"Get the highest-rated anime episodes, default list is weighted. Episodes with few votes rank lower than their score alone would place them.\n\n> SFW flags filter out episodes belonging to non-sfw IDs.","parameters":[{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["score","votes","comments"],"x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Order of the list. Leave it out for the default ranking. `score`: highest average vote first, among episodes with at least 100 votes. `votes`: most votes first. `comments`: most forum replies first.","examples":{"default":{"value":"score","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning the highest-rated episodes","content":{"application/json":{"schema":{"description":"Successful response returning the highest-rated episodes","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer","description":"The episode number"},"url":{"type":"string"},"title":{"type":"string"},"title_japanese":{"type":"string","nullable":true},"title_romanji":{"type":"string","nullable":true},"duration":{"type":"integer","nullable":true,"description":"Episode duration in seconds"},"aired":{"type":"string","nullable":true},"score":{"type":"number","description":"Average vote from 1 to 5"},"votes":{"type":"integer","description":"Number of votes in the episode's discussion poll"},"filler":{"type":"boolean"},"recap":{"type":"boolean"},"synopsis":{"type":"string","nullable":true},"replies":{"type":"integer","nullable":true,"description":"Number of forum replies for this episode"},"forum_url":{"type":"string","nullable":true},"images":{"type":"object","description":"Episode thumbnail images","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"entry":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}},"description":"The anime the episode belongs to"}}}}},"example":{"pagination":{"last_visible_page":3718,"has_next_page":true,"current_page":1,"items":{"count":25,"total":92939,"per_page":25}},"data":[{"mal_id":135,"url":"https://myanimelist.net/anime/11061/Hunter_x_Hunter_2011/episode/135","title":"This Day × And × This Moment","title_japanese":"コノヒ×ト×コノシュンカン","title_romanji":"Kono Hi × to × Kono Shunkan","duration":1409,"aired":"2014-06-25T00:00:00+00:00","score":4.9,"votes":4341,"filler":false,"recap":false,"synopsis":"Now knowing that he is directly poisoned by the Miniature Rose, Pouf having already died from exposure, Meruem accepts his defeat and convinces Palm to divulge Komugi's location to spend his final moments playing with her. Though Komugi understands that she will also die if she stays with him, Komugi remains by Meruem's side to the very end. Sometime after, with the public kept in the dark as to what truly occurred at East Gorteau and the NGL, Beans releases Netero's retirement video. The Hunter Association accordingly begins preparations to select a new chairman to succeed Netero.\n\n(Source: Wikipedia)\n\nChimera Ant arc: (60/61)","replies":947,"forum_url":"https://myanimelist.net/forum/?topicid=1207197","images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire4-tmb/8271c770b0747b37d91dbcd57d9c81c21403044990_large.jpg"}},"entry":{"mal_id":11061,"url":"https://myanimelist.net/anime/11061/Hunter_x_Hunter_2011","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1337/99013.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1337/99013t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1337/99013l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1337/99013.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1337/99013t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1337/99013l.webp"}},"title":"Hunter x Hunter (2011)"}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/episodes?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/episodes"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/episodes"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/episodes"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/episodes"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/episodes"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/episodes"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/episodes"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/episodes"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/episodes"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/episodes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/episodes"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/episodes"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/episodes"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/episodes"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/episodes"}}}}}}},"operationId":"getTopEpisodes"}},"/top/videos":{"get":{"summary":"Top Videos","tags":["Top"],"description":"Get the most viewed anime trailers or music videos on YouTube. Dislikes are estimates from Return YouTube Dislike.\n\n> SFW flags filter out videos belonging to non-sfw IDs.","parameters":[{"schema":{"type":"string","enum":["all","airing","upcoming","finished"],"default":"all"},"in":"query","name":"filter","required":false,"description":"Only videos of anime that are airing, upcoming or finished. `all` lists every video.","examples":{"default":{"value":"all","x-disabled":true}}},{"schema":{"type":"string","enum":["promo","music"],"default":"promo","x-enumDescriptions":{}},"in":"query","name":"type","required":false,"description":"`promo`: trailers, teasers and commercials. `music`: music videos. MyAnimeList stopped adding music videos around 2023, so newer anime have almost none.","examples":{"default":{"value":"promo","x-disabled":true}}},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"year","required":false,"description":"Only videos uploaded to YouTube in this year (UTC). Cannot be combined with min_year or max_year."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"min_year","required":false,"description":"Only videos uploaded in this year or later."},{"schema":{"type":"integer","minimum":1,"maximum":9999},"in":"query","name":"max_year","required":false,"description":"Only videos uploaded in this year or earlier."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["views","likes","dislikes","comments","title","published_at"],"default":"views"},"in":"query","name":"order_by","required":false,"description":"Order of the list. `title` is the YouTube title and `published_at` the upload date. Videos without a like or comment count come last.","examples":{"default":{"value":"views","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"`desc`: most, newest or Z to A first. `asc`: the reverse. Defaults to `desc`, or to `asc` for `title`.","examples":{"default":{"value":"asc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning the most viewed videos","content":{"application/json":{"schema":{"description":"Successful response returning the most viewed videos","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"youtube_id":{"type":"string"},"url":{"type":"string"},"embed_url":{"type":"string"},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true,"description":"The video's title on YouTube"},"views":{"type":"integer"},"likes":{"type":"integer","nullable":true,"description":"Null when the count is hidden on YouTube"},"dislikes":{"type":"integer","nullable":true,"description":"An estimate from Return YouTube Dislike"},"comment_count":{"type":"integer","nullable":true,"description":"Null when YouTube gives no count"},"published_at":{"type":"string","nullable":true,"description":"When the video was uploaded to YouTube"},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true},"entry":{"type":"array","description":"The anime that list this video on MyAnimeList, most popular first","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"video_title":{"type":"string","nullable":true,"description":"The video's name on the anime's MyAnimeList page, such as PV 1 or OP 1"},"meta":{"type":"object","nullable":true,"description":"The song and artist MyAnimeList gives for a music video","properties":{"title":{"type":"string","nullable":true},"author":{"type":"string","nullable":true}}}}}}}}}},"example":{"pagination":{"last_visible_page":660,"has_next_page":true,"current_page":1,"items":{"count":25,"total":16496,"per_page":25}},"data":[{"youtube_id":"0jqxkDfmvYo","url":"https://www.youtube.com/watch?v=0jqxkDfmvYo","embed_url":"https://www.youtube.com/embed/0jqxkDfmvYo?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/0jqxkDfmvYo/default.jpg","small_image_url":"https://img.youtube.com/vi/0jqxkDfmvYo/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/0jqxkDfmvYo/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/0jqxkDfmvYo/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/0jqxkDfmvYo/maxresdefault.jpg"},"title":"TVアニメ「鬼滅の刃」遊郭編 第1弾PV  2021年放送開始","views":28648249,"likes":369833,"dislikes":6648,"comment_count":null,"published_at":"2021-02-14T12:33:35+00:00","duration":"PT1M27S","privacy_status":"public","region_restriction":null,"embeddable":true,"entry":[{"mal_id":47778,"url":"https://myanimelist.net/anime/47778/Kimetsu_no_Yaiba__Yuukaku-hen","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1908/120036.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1908/120036t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1908/120036l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1908/120036.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1908/120036t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1908/120036l.webp"}},"title":"Kimetsu no Yaiba: Yuukaku-hen","title_english":"Demon Slayer: Kimetsu no Yaiba Entertainment District Arc","title_japanese":"鬼滅の刃 遊郭編","title_synonyms":[],"type":"TV","source":"Manga","episodes":11,"status":"Finished Airing","airing":false,"aired":{"from":"2021-12-05T00:00:00+00:00","to":"2022-02-13T00:00:00+00:00","prop":{"from":{"day":5,"month":12,"year":2021},"to":{"day":13,"month":2,"year":2022}},"string":"Dec 5, 2021 to Feb 13, 2022"},"duration":"26 min per ep","rating":"R - 17+ (violence & profanity)","score":8.68,"members":1795940,"favorites":25182,"season":"winter","year":2022,"approved":true,"scored_by":1153494,"rank":76,"popularity":69,"video_title":"PV 1","meta":null}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/top/videos?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/top/videos"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/top/videos"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/top/videos"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/top/videos"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/top/videos"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/top/videos"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/top/videos"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/top/videos"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/top/videos"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/top/videos"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/top/videos"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/top/videos"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/top/videos"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/top/videos"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/top/videos"}}}}}}},"operationId":"getTopVideos"}},"/seasons/{year}/{season}":{"get":{"summary":"Seasonal Anime","tags":["Seasons"],"description":"Get the anime of a given season, such as fall 2024.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"integer","minimum":1000,"maximum":2999,"default":2025},"in":"path","name":"year","required":true,"description":"Year of the season, e.g. `2025`."},{"schema":{"type":"string","enum":["winter","spring","summer","fall"],"default":"winter"},"in":"path","name":"season","required":true,"description":"Season of the year. Any letter case is accepted."},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"filter","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","complete","upcoming"],"x-enumDescriptions":{}},"in":"query","name":"status","required":false,"description":"Only anime with this airing status.\n\n- `airing`: Currently Airing\n- `complete`: Finished Airing\n- `upcoming`: Not yet aired","examples":{"default":{"value":"airing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_episodes","required":false,"description":"Minimum known positive episode count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_episodes","required":false,"description":"Maximum known positive episode count, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"kids","required":false,"description":"Filter out kids entries when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"continuing","required":false,"description":"Include TV series continuing from a previous season when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["false","true","only",""],"default":"false"},"in":"query","name":"unapproved","required":false,"description":"When true, also includes unapproved entries.","examples":{"default":{"value":"false","x-disabled":true}}},{"schema":{"type":"string","enum":["score","members","start_date","mal_id","episodes","favorites","end_date","scored_by","title"],"default":"members"},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"members","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Returns seasonal anime","content":{"application/json":{"schema":{"description":"Returns seasonal anime","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":8,"has_next_page":true,"current_page":1,"items":{"count":25,"total":194,"per_page":25}},"data":[{"mal_id":58567,"url":"https://myanimelist.net/anime/58567/Ore_dake_Level_Up_na_Ken_Season_2__Arise_from_the_Shadow","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1448/147351.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1448/147351t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1448/147351l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1448/147351.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1448/147351t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1448/147351l.webp"}},"trailer":{"youtube_id":"GDMXGzjJzS4","url":"https://www.youtube.com/watch?v=GDMXGzjJzS4","embed_url":"https://www.youtube-nocookie.com/embed/GDMXGzjJzS4?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/GDMXGzjJzS4/default.jpg","small_image_url":"https://img.youtube.com/vi/GDMXGzjJzS4/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/GDMXGzjJzS4/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/GDMXGzjJzS4/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/GDMXGzjJzS4/maxresdefault.jpg"},"title":"【架南島レイド篇 開始】TVアニメ「俺だけレベルアップな件 Season 2 -Arise from the Shadow-」 第2弾メインPV | 毎週土曜24:00より放送中","views":810956,"likes":18031,"dislikes":83,"comment_count":889,"published_at":"2025-03-04T15:00:30+00:00","duration":"PT2M","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Ore dake Level Up na Ken Season 2: Arise from the Shadow"},{"type":"Japanese","title":"俺だけレベルアップな件 Season 2 -Arise from the Shadow-"},{"type":"English","title":"Solo Leveling Season 2: Arise from the Shadow"},{"type":"Synonym","title":"Solo Leveling Second Season"}],"title":"Ore dake Level Up na Ken Season 2: Arise from the Shadow","title_english":"Solo Leveling Season 2: Arise from the Shadow","title_japanese":"俺だけレベルアップな件 Season 2 -Arise from the Shadow-","title_synonyms":["Solo Leveling Second Season"],"type":"TV","source":"Web manga","episodes":13,"status":"Finished Airing","airing":false,"aired":{"from":"2025-01-05T00:00:00+00:00","to":"2025-03-30T00:00:00+00:00","prop":{"from":{"day":5,"month":1,"year":2025},"to":{"day":30,"month":3,"year":2025}},"string":"Jan 5, 2025 to Mar 30, 2025"},"duration":"23 min per ep","rating":"R - 17+ (violence & profanity)","score":8.49,"scored_by":543683,"rank":172,"popularity":273,"members":844185,"favorites":11849,"synopsis":"Sung Jin-Woo, dubbed the weakest hunter of all mankind, grows stronger by the day with the supernatural powers he has gained. However, keeping his skills hidden becomes more difficult as dungeon-related incidents pile up around him.\n\nWhen Jin-Woo and a few other low-ranked hunters are the only survivors of a dungeon that turns out to be a bigger challenge than initially expected, he draws attention once again, and hunter guilds take an increased interest in him. Meanwhile, a strange hunter who has been lost for ten years returns with a dire warning about an upcoming catastrophic event. As the calamity looms closer, Jin-Woo must continue leveling up to make sure nothing stops him from reaching his ultimate goal—saving the life of his mother.\n\n[Written by MAL Rewrite]","background":null,"season":"winter","year":2025,"broadcast":{"day":"Sundays","time":"00:00","timezone":"Asia/Tokyo","string":"Sundays at 00:00 (JST)"},"producers":[{"mal_id":17,"type":"anime","name":"Aniplex","url":"https://myanimelist.net/anime/producer/17/Aniplex"},{"mal_id":1468,"type":"anime","name":"Crunchyroll","url":"https://myanimelist.net/anime/producer/1468/Crunchyroll"},{"mal_id":1858,"type":"anime","name":"Sonilude","url":"https://myanimelist.net/anime/producer/1858/Sonilude"},{"mal_id":2837,"type":"anime","name":"Netmarble","url":"https://myanimelist.net/anime/producer/2837/Netmarble"},{"mal_id":2839,"type":"anime","name":"Kakao piccoma","url":"https://myanimelist.net/anime/producer/2839/Kakao_piccoma"},{"mal_id":2872,"type":"anime","name":"D&C Media","url":"https://myanimelist.net/anime/producer/2872/D_C_Media"}],"licensors":[],"studios":[{"mal_id":56,"type":"anime","name":"A-1 Pictures","url":"https://myanimelist.net/anime/producer/56/A-1_Pictures"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":2,"type":"anime","name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure"},{"mal_id":10,"type":"anime","name":"Fantasy","url":"https://myanimelist.net/anime/genre/10/Fantasy"}],"explicit_genres":[],"themes":[{"mal_id":50,"type":"anime","name":"Adult Cast","url":"https://myanimelist.net/anime/genre/50/Adult_Cast"},{"mal_id":82,"type":"anime","name":"Urban Fantasy","url":"https://myanimelist.net/anime/genre/82/Urban_Fantasy"}],"demographics":[]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/seasons/2025/winter?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/seasons/2025/winter"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/seasons/2025/winter"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/seasons/2025/winter"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/seasons/2025/winter"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/seasons/2025/winter"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/seasons/2025/winter"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/seasons/2025/winter"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/seasons/2025/winter"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/seasons/2025/winter"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/seasons/2025/winter"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/seasons/2025/winter"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/seasons/2025/winter"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/seasons/2025/winter"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/seasons/2025/winter"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/seasons/2025/winter"}}}}}}},"operationId":"getSeasonsByYearBySeason"}},"/seasons/now":{"get":{"summary":"Seasonal Anime Current","tags":["Seasons"],"description":"Get this season's anime.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"filter","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","complete","upcoming"],"x-enumDescriptions":{}},"in":"query","name":"status","required":false,"description":"Only anime with this airing status.\n\n- `airing`: Currently Airing\n- `complete`: Finished Airing\n- `upcoming`: Not yet aired","examples":{"default":{"value":"airing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_episodes","required":false,"description":"Minimum known positive episode count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_episodes","required":false,"description":"Maximum known positive episode count, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"kids","required":false,"description":"Filter out kids entries when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"continuing","required":false,"description":"Include TV series continuing from a previous season when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["false","true","only",""],"default":"false"},"in":"query","name":"unapproved","required":false,"description":"When true, also includes unapproved entries.","examples":{"default":{"value":"false","x-disabled":true}}},{"schema":{"type":"string","enum":["score","members","start_date","mal_id","episodes","favorites","end_date","scored_by","title"],"default":"members"},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"members","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Returns seasonal anime","content":{"application/json":{"schema":{"description":"Returns seasonal anime","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":6,"has_next_page":true,"current_page":1,"items":{"count":25,"total":143,"per_page":25}},"data":[{"mal_id":61469,"url":"https://myanimelist.net/anime/61469/Steel_Ball_Run__JoJo_no_Kimyou_na_Bouken","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1065/158884.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1065/158884t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1065/158884l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1065/158884.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1065/158884t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1065/158884l.webp"}},"trailer":{"youtube_id":"jXtG_lcR9P4","url":"https://www.youtube.com/watch?v=jXtG_lcR9P4","embed_url":"https://www.youtube-nocookie.com/embed/jXtG_lcR9P4?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/jXtG_lcR9P4/default.jpg","small_image_url":"https://img.youtube.com/vi/jXtG_lcR9P4/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/jXtG_lcR9P4/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/jXtG_lcR9P4/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/jXtG_lcR9P4/maxresdefault.jpg"},"title":"PV 第2弾　アニメ『スティール・ボール・ラン ジョジョの奇妙な冒険』｜2nd Trailer !!　\"STEEL BALL RUN JoJo’s Bizarre Adventure\"","views":1779822,"likes":61461,"dislikes":166,"comment_count":2375,"published_at":"2026-07-03T23:00:13+00:00","duration":"PT1M44S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Steel Ball Run: JoJo no Kimyou na Bouken"},{"type":"Japanese","title":"スティール・ボール・ラン ジョジョの奇妙な冒険"},{"type":"English","title":"Steel Ball Run: JoJo's Bizarre Adventure"},{"type":"Synonym","title":"JoJo's Bizarre Adventure Part 7: Steel Ball Run"},{"type":"Synonym","title":"JoJo no Kimyou na Bouken Part 7: Steel Ball Run"},{"type":"Synonym","title":"SBR"}],"title":"Steel Ball Run: JoJo no Kimyou na Bouken","title_english":"Steel Ball Run: JoJo's Bizarre Adventure","title_japanese":"スティール・ボール・ラン ジョジョの奇妙な冒険","title_synonyms":["JoJo's Bizarre Adventure Part 7: Steel Ball Run","JoJo no Kimyou na Bouken Part 7: Steel Ball Run","SBR"],"type":"ONA","source":"Manga","episodes":null,"status":"Currently Airing","airing":true,"aired":{"from":"2026-03-19T00:00:00+00:00","to":null,"prop":{"from":{"day":19,"month":3,"year":2026},"to":{"day":null,"month":null,"year":null}},"string":"Mar 19, 2026 to ?"},"duration":"27 min","rating":"R - 17+ (violence & profanity)","score":9.03,"scored_by":114695,"rank":10,"popularity":1135,"members":257049,"favorites":8851,"synopsis":"In the American Old West, the world's greatest race is about to begin. Thousands line up in San Diego to travel over six thousand kilometers for a chance to win the grand prize of fifty million dollars. With the era of the horse reaching its end, contestants are allowed to use any kind of vehicle they wish. Competitors will have to endure grueling conditions, traveling up to a hundred kilometers a day through uncharted wastelands. The Steel Ball Run is truly a one-of-a-kind event.\n\nThe youthful Johnny Joestar, a crippled former horse racer, has come to San Diego to watch the start of the race. There he encounters Gyro Zeppeli, a racer with two steel balls at his waist instead of a gun. Johnny witnesses Gyro using one of his steel balls to unleash a fantastical power, compelling a man to fire his gun at himself during a duel. In the midst of the action, Johnny happens to touch the steel ball and feels a power surging through his legs, allowing him to stand up for the first time in two years. Vowing to find the secret of the steel balls, Johnny decides to compete in the race, and so begins his bizarre adventure across America on the Steel Ball Run.\n\n[Written by MAL Rewrite]","background":null,"season":"winter","year":2026,"broadcast":{"day":null,"time":null,"timezone":null,"string":null},"producers":[{"mal_id":415,"type":"anime","name":"Warner Bros. Japan","url":"https://myanimelist.net/anime/producer/415/Warner_Bros_Japan"},{"mal_id":719,"type":"anime","name":"Studio Mausu","url":"https://myanimelist.net/anime/producer/719/Studio_Mausu"},{"mal_id":1783,"type":"anime","name":"ONEMUSIC","url":"https://myanimelist.net/anime/producer/1783/ONEMUSIC"}],"licensors":[],"studios":[{"mal_id":287,"type":"anime","name":"David Production","url":"https://myanimelist.net/anime/producer/287/David_Production"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":2,"type":"anime","name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure"},{"mal_id":7,"type":"anime","name":"Mystery","url":"https://myanimelist.net/anime/genre/7/Mystery"},{"mal_id":37,"type":"anime","name":"Supernatural","url":"https://myanimelist.net/anime/genre/37/Supernatural"}],"explicit_genres":[],"themes":[{"mal_id":13,"type":"anime","name":"Historical","url":"https://myanimelist.net/anime/genre/13/Historical"},{"mal_id":3,"type":"anime","name":"Racing","url":"https://myanimelist.net/anime/genre/3/Racing"}],"demographics":[{"mal_id":42,"type":"anime","name":"Seinen","url":"https://myanimelist.net/anime/genre/42/Seinen"},{"mal_id":27,"type":"anime","name":"Shounen","url":"https://myanimelist.net/anime/genre/27/Shounen"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/seasons/now?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/seasons/now"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/seasons/now"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/seasons/now"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/seasons/now"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/seasons/now"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/seasons/now"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/seasons/now"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/seasons/now"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/seasons/now"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/seasons/now"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/seasons/now"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/seasons/now"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/seasons/now"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/seasons/now"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/seasons/now"}}}}}}},"operationId":"getSeasonsNow"}},"/seasons/previous":{"get":{"summary":"Seasonal Anime Previous","tags":["Seasons"],"description":"Get last season's anime.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"filter","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","complete","upcoming"],"x-enumDescriptions":{}},"in":"query","name":"status","required":false,"description":"Only anime with this airing status.\n\n- `airing`: Currently Airing\n- `complete`: Finished Airing\n- `upcoming`: Not yet aired","examples":{"default":{"value":"airing","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_episodes","required":false,"description":"Minimum known positive episode count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_episodes","required":false,"description":"Maximum known positive episode count, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"kids","required":false,"description":"Filter out kids entries when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"continuing","required":false,"description":"Include TV series continuing from a previous season when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["false","true","only",""],"default":"false"},"in":"query","name":"unapproved","required":false,"description":"When true, also includes unapproved entries.","examples":{"default":{"value":"false","x-disabled":true}}},{"schema":{"type":"string","enum":["score","members","start_date","mal_id","episodes","favorites","end_date","scored_by","title"],"default":"members"},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"members","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Returns seasonal anime","content":{"application/json":{"schema":{"description":"Returns seasonal anime","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":9,"has_next_page":true,"current_page":1,"items":{"count":25,"total":211,"per_page":25}},"data":[{"mal_id":59193,"url":"https://myanimelist.net/anime/59193/Mushoku_Tensei_III__Isekai_Ittara_Honki_Dasu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1527/158340.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1527/158340t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1527/158340l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1527/158340.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1527/158340t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1527/158340l.webp"}},"trailer":{"youtube_id":"ODxfIvSgWuo","url":"https://www.youtube.com/watch?v=ODxfIvSgWuo","embed_url":"https://www.youtube-nocookie.com/embed/ODxfIvSgWuo?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/ODxfIvSgWuo/default.jpg","small_image_url":"https://img.youtube.com/vi/ODxfIvSgWuo/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/ODxfIvSgWuo/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/ODxfIvSgWuo/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/ODxfIvSgWuo/maxresdefault.jpg"},"title":"『無職転生Ⅲ ～異世界行ったら本気だす～』本PV／EDテーマ：「祈り、終われば」中島美嘉／7月4日(土)第1・2話特別連続放送(TOKYO MX,ABEMA,dアニメストア1日先行)","views":1453526,"likes":42888,"dislikes":306,"comment_count":2105,"published_at":"2026-06-04T10:00:20+00:00","duration":"PT1M11S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Mushoku Tensei III: Isekai Ittara Honki Dasu"},{"type":"Japanese","title":"無職転生 III ～異世界行ったら本気だす～"},{"type":"English","title":"Mushoku Tensei: Jobless Reincarnation Season 3"}],"title":"Mushoku Tensei III: Isekai Ittara Honki Dasu","title_english":"Mushoku Tensei: Jobless Reincarnation Season 3","title_japanese":"無職転生 III ～異世界行ったら本気だす～","title_synonyms":[],"type":"TV","source":"Light novel","episodes":14,"status":"Finished Airing","airing":false,"aired":{"from":"2026-07-06T00:00:00+00:00","to":"2026-09-28T00:00:00+00:00","prop":{"from":{"day":6,"month":7,"year":2026},"to":{"day":28,"month":9,"year":2026}},"string":"Jul 6, 2026 to Sep 28, 2026"},"duration":"23 min per ep","rating":"R - 17+ (violence & profanity)","score":8.66,"scored_by":166075,"rank":87,"popularity":735,"members":383535,"favorites":4993,"synopsis":"Third season of Mushoku Tensei: Isekai Ittara Honki Dasu.","background":null,"season":"summer","year":2026,"broadcast":{"day":"Mondays","time":"00:00","timezone":"Asia/Tokyo","string":"Mondays at 00:00 (JST)"},"producers":[{"mal_id":61,"type":"anime","name":"Frontier Works","url":"https://myanimelist.net/anime/producer/61/Frontier_Works"},{"mal_id":245,"type":"anime","name":"TOHO","url":"https://myanimelist.net/anime/producer/245/TOHO"},{"mal_id":306,"type":"anime","name":"Magic Capsule","url":"https://myanimelist.net/anime/producer/306/Magic_Capsule"},{"mal_id":1333,"type":"anime","name":"Hakuhodo DY Music & Pictures","url":"https://myanimelist.net/anime/producer/1333/Hakuhodo_DY_Music_Pictures"},{"mal_id":1416,"type":"anime","name":"BS11","url":"https://myanimelist.net/anime/producer/1416/BS11"},{"mal_id":1444,"type":"anime","name":"Egg Firm","url":"https://myanimelist.net/anime/producer/1444/Egg_Firm"},{"mal_id":1696,"type":"anime","name":"Kadokawa","url":"https://myanimelist.net/anime/producer/1696/Kadokawa"},{"mal_id":2229,"type":"anime","name":"TOHO Music","url":"https://myanimelist.net/anime/producer/2229/TOHO_Music"},{"mal_id":2289,"type":"anime","name":"GREE Entertainment","url":"https://myanimelist.net/anime/producer/2289/GREE_Entertainment"}],"licensors":[],"studios":[{"mal_id":1993,"type":"anime","name":"Studio Bind","url":"https://myanimelist.net/anime/producer/1993/Studio_Bind"}],"genres":[{"mal_id":2,"type":"anime","name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure"},{"mal_id":8,"type":"anime","name":"Drama","url":"https://myanimelist.net/anime/genre/8/Drama"},{"mal_id":10,"type":"anime","name":"Fantasy","url":"https://myanimelist.net/anime/genre/10/Fantasy"}],"explicit_genres":[],"themes":[{"mal_id":62,"type":"anime","name":"Isekai","url":"https://myanimelist.net/anime/genre/62/Isekai"},{"mal_id":72,"type":"anime","name":"Reincarnation","url":"https://myanimelist.net/anime/genre/72/Reincarnation"},{"mal_id":23,"type":"anime","name":"School","url":"https://myanimelist.net/anime/genre/23/School"}],"demographics":[]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/seasons/previous?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/seasons/previous"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/seasons/previous"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/seasons/previous"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/seasons/previous"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/seasons/previous"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/seasons/previous"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/seasons/previous"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/seasons/previous"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/seasons/previous"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/seasons/previous"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/seasons/previous"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/seasons/previous"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/seasons/previous"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/seasons/previous"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/seasons/previous"}}}}}}},"operationId":"getSeasonsPrevious"}},"/seasons/upcoming":{"get":{"summary":"Seasonal Anime Upcoming","tags":["Seasons"],"description":"Get announced anime that haven't aired yet.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"filter","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"exclude_ids","required":false,"description":"Exclude the entries whose MAL IDs you choose, such as the ones already on a user's list. Comma-separated. These answers are never cached.","style":"form","explode":false},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"min_members","required":false,"description":"Minimum member count, inclusive."},{"schema":{"type":"integer","minimum":0,"format":"int32"},"in":"query","name":"max_members","required":false,"description":"Maximum member count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"min_episodes","required":false,"description":"Minimum known positive episode count, inclusive."},{"schema":{"type":"integer","minimum":1,"format":"int32"},"in":"query","name":"max_episodes","required":false,"description":"Maximum known positive episode count, inclusive."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"kids","required":false,"description":"Filter out kids entries when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"continuing","required":false,"description":"Include TV series continuing from a previous season when present (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["false","true","only",""],"default":"false"},"in":"query","name":"unapproved","required":false,"description":"When true, also includes unapproved entries.","examples":{"default":{"value":"false","x-disabled":true}}},{"schema":{"type":"string","enum":["score","members","start_date","mal_id","episodes","favorites","end_date","scored_by","title"],"default":"members"},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"members","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Returns seasonal anime","content":{"application/json":{"schema":{"description":"Returns seasonal anime","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":17,"has_next_page":true,"current_page":1,"items":{"count":25,"total":417,"per_page":25}},"data":[{"mal_id":62516,"url":"https://myanimelist.net/anime/62516/Dandadan_3rd_Season","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1671/154516.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1671/154516t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1671/154516l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1671/154516.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1671/154516t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1671/154516l.webp"}},"trailer":{"youtube_id":null,"url":null,"embed_url":null,"images":{"image_url":null,"small_image_url":null,"medium_image_url":null,"large_image_url":null,"maximum_image_url":null},"title":null,"views":null,"likes":null,"dislikes":null,"comment_count":null,"published_at":null,"duration":null,"privacy_status":null,"region_restriction":null,"embeddable":null},"approved":true,"titles":[{"type":"Default","title":"Dandadan 3rd Season"},{"type":"Japanese","title":"ダンダダン 第3期"},{"type":"English","title":"Dan Da Dan Season 3"}],"title":"Dandadan 3rd Season","title_english":"Dan Da Dan Season 3","title_japanese":"ダンダダン 第3期","title_synonyms":[],"type":"TV","source":"Manga","episodes":null,"status":"Not yet aired","airing":false,"aired":{"from":"2027","to":null,"prop":{"from":{"day":null,"month":null,"year":2027},"to":{"day":null,"month":null,"year":null}},"string":"2027 to ?"},"duration":"Unknown","rating":"R - 17+ (violence & profanity)","score":null,"scored_by":2,"rank":null,"popularity":1809,"members":151753,"favorites":745,"synopsis":"Third season of Dandadan.","background":null,"season":null,"year":null,"broadcast":{"day":null,"time":null,"timezone":null,"string":null},"producers":[],"licensors":[],"studios":[{"mal_id":1591,"type":"anime","name":"Science SARU","url":"https://myanimelist.net/anime/producer/1591/Science_SARU"}],"genres":[{"mal_id":1,"type":"anime","name":"Action","url":"https://myanimelist.net/anime/genre/1/Action"},{"mal_id":4,"type":"anime","name":"Comedy","url":"https://myanimelist.net/anime/genre/4/Comedy"},{"mal_id":37,"type":"anime","name":"Supernatural","url":"https://myanimelist.net/anime/genre/37/Supernatural"}],"explicit_genres":[],"themes":[],"demographics":[{"mal_id":27,"type":"anime","name":"Shounen","url":"https://myanimelist.net/anime/genre/27/Shounen"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/seasons/upcoming?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/seasons/upcoming"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/seasons/upcoming"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/seasons/upcoming"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/seasons/upcoming"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/seasons/upcoming"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/seasons/upcoming"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/seasons/upcoming"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/seasons/upcoming"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/seasons/upcoming"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/seasons/upcoming"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/seasons/upcoming"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/seasons/upcoming"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/seasons/upcoming"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/seasons/upcoming"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/seasons/upcoming"}}}}}}},"operationId":"getSeasonsUpcoming"}},"/seasons":{"get":{"summary":"Available Seasons","tags":["Seasons"],"description":"Get every season you can look up.","responses":{"200":{"description":"Returns list of available year/season pairs","content":{"application/json":{"schema":{"description":"Returns list of available year/season pairs","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer"},"seasons":{"type":"array","items":{"type":"string"}}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":103,"total":103,"per_page":103}},"data":[{"year":2027,"seasons":["winter","spring"]},{"year":2026,"seasons":["winter","spring","summer","fall"]},{"year":2025,"seasons":["winter","spring","summer","fall"]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/seasons"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/seasons"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/seasons"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/seasons"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/seasons"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/seasons"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/seasons"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/seasons"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/seasons"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/seasons"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/seasons"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/seasons"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/seasons"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/seasons"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/seasons"}}}}}}},"operationId":"getSeasons"}},"/reviews/anime":{"get":{"summary":"Recent Anime Reviews","tags":["Reviews"],"description":"Get the latest anime reviews.\n\nSpoiler and preliminary reviews are hidden unless you ask for them.\n\n> SFW flags filter out reviews about non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"],"x-enumDescriptions":{}},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment","examples":{"default":{"value":"recommended","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive).  \nPreliminary reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive).  \nSpoiler reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"newest","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Order of the reviews: newest first, oldest first or most helpful first.","examples":{"default":{"value":"newest","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":50,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":50,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning recent anime reviews","content":{"application/json":{"schema":{"description":"Successful response returning recent anime reviews","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","properties":{"overall":{"type":"integer"},"nice":{"type":"integer"},"love_it":{"type":"integer"},"funny":{"type":"integer"},"confusing":{"type":"integer"},"informative":{"type":"integer"},"well_written":{"type":"integer"},"creative":{"type":"integer"}}},"date":{"type":"string","nullable":true},"review":{"type":"string","nullable":true},"score":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"is_spoiler":{"type":"boolean"},"is_preliminary":{"type":"boolean"},"episodes_watched":{"type":"integer","nullable":true},"entry":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}},"user":{"type":"object","properties":{"username":{"type":"string"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}}}}}},"example":{"pagination":{"last_visible_page":4752,"has_next_page":true},"data":[{"mal_id":625760,"url":"https://myanimelist.net/reviews.php?id=625760","type":"anime","reactions":{"overall":1,"nice":1,"love_it":0,"funny":0,"confusing":0,"informative":0,"well_written":0,"creative":0},"date":"2026-11-13T04:44:00+00:00","review":"Unduly garish and grossly maximalist. Nearly entirely stripped of the 2007 series's incredible atmosphere, creepiness, and slow pacing, and with very little to offer beyond its admittedly stunning visuals. The music is fine, but far more generic and less atmospheric. I also found none of the characters to be particularly compelling or interesting. Overall, this hardly resembles Mononoke in any way.\n\nAlthough I dislike that they chose a more maximalist and extravagant visual direction, l'd be lying if I said the visuals and environments weren't fantastic. So much so that I find it hard to rate this anything less than a 7. Nonetheless, they are less appealing to my tastes than the original's.\n\nI know it's my fault for expecting anything similar to the original anime, but this really feels sorely disappointing. It's like a fan-made, bastardized interpretation of the original, ridded of what makes Mononoke so special, and boiled down to just a profuse, gaudy flood of colors. Not completely horrible, but quite flawed. For the most enjoyment, I'd suggest viewing this as wholly separate from the original Mononoke, just completely its own thing.","score":7,"tags":["Mixed Feelings"],"is_spoiler":false,"is_preliminary":false,"episodes_watched":null,"entry":{"mal_id":52107,"url":"https://myanimelist.net/anime/52107/Mononoke_Movie_1__Karakasa","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1903/142810.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1903/142810t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1903/142810l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1903/142810.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1903/142810t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1903/142810l.webp"}},"title":"Mononoke Movie 1: Karakasa"},"user":{"username":"wrigglelikeaneel","url":"https://myanimelist.net/profile/wrigglelikeaneel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/b22f155f-be48-4674-813a-8c4f5c48e8f1_225w?s=134a88d0fc5e20194aac95184cf1d69a"},"webp":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/b22f155f-be48-4674-813a-8c4f5c48e8f1_225w?s=134a88d0fc5e20194aac95184cf1d69a"}}}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/reviews/anime?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/reviews/anime"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/reviews/anime"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/reviews/anime"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/reviews/anime"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/reviews/anime"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/reviews/anime"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/reviews/anime"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/reviews/anime"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/reviews/anime"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/reviews/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/reviews/anime"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/reviews/anime"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/reviews/anime"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/reviews/anime"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/reviews/anime"}}}}}}},"operationId":"getReviewsAnime"}},"/reviews/manga":{"get":{"summary":"Recent Manga Reviews","tags":["Reviews"],"description":"Get the latest manga reviews.\n\nSpoiler and preliminary reviews are hidden unless you ask for them.\n\n> SFW flags filter out reviews about non-sfw entries.","parameters":[{"schema":{"type":"string","maxLength":30},"in":"query","name":"username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"],"x-enumDescriptions":{}},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment","examples":{"default":{"value":"recommended","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive).  \nPreliminary reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive).  \nSpoiler reviews are left out unless this is set.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"newest","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Order of the reviews: newest first, oldest first or most helpful first.","examples":{"default":{"value":"newest","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":50,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":50,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning recent manga reviews","content":{"application/json":{"schema":{"description":"Successful response returning recent manga reviews","type":"object","properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}},"required":["last_visible_page","has_next_page"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","properties":{"overall":{"type":"integer"},"nice":{"type":"integer"},"love_it":{"type":"integer"},"funny":{"type":"integer"},"confusing":{"type":"integer"},"informative":{"type":"integer"},"well_written":{"type":"integer"},"creative":{"type":"integer"}}},"date":{"type":"string","nullable":true},"review":{"type":"string","nullable":true},"score":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"is_spoiler":{"type":"boolean"},"is_preliminary":{"type":"boolean"},"chapters_read":{"type":"integer","nullable":true},"entry":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"}}},"user":{"type":"object","properties":{"username":{"type":"string"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}}}}}},"example":{"pagination":{"last_visible_page":714,"has_next_page":true},"data":[{"mal_id":625755,"url":"https://myanimelist.net/reviews.php?id=625755","type":"manga","reactions":{"overall":0,"nice":0,"love_it":0,"funny":0,"confusing":0,"informative":0,"well_written":0,"creative":0},"date":"2026-11-13T03:39:00+00:00","review":"This manga is like utopia world where everyone tried to be kind and understand each other. It is quite wonderful because it is never stressful. Everyone acts like normal humans and they overcome their personal issues by talking about them. The main couple is cute but the story is about everyone, not just them, and it’s quite wonderful. Because everyone is wonderful, and this is like heaven world.\n\nI feel completely refreshed after reading this. It’s like detox. Everyone here is my friend. I feel good. I wish real life had kindness in it. But the message of the story is we make that kindness by stopping being stupid up in our heads and just go and talk about how we feel. \n\nThis story also contains a character who is the perfect being, his name is Taira, and he’s the perfect being. He is a “negative” voice in a positive space and is constantly proven wrong but never humiliated. \n\nThe story touches on some particularly relatable topics that were oddly insightful for a manga like this, and I recommend reading it.","score":9,"tags":["Recommended"],"is_spoiler":false,"is_preliminary":false,"chapters_read":null,"entry":{"mal_id":147091,"url":"https://myanimelist.net/manga/147091/Seihantai_na_Kimi_to_Boku","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/263980.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/263980t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/263980l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/263980.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/263980t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/263980l.webp"}},"title":"Seihantai na Kimi to Boku"},"user":{"username":"mointpan","url":"https://myanimelist.net/profile/mointpan","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/d2bc9c24-4f77-41d2-a6ca-fb6d53040a84_225w?s=a2ac6ae9308623412ed55e306d3fa810"},"webp":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/d2bc9c24-4f77-41d2-a6ca-fb6d53040a84_225w?s=a2ac6ae9308623412ed55e306d3fa810"}}}}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/reviews/manga?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/reviews/manga"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/reviews/manga"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/reviews/manga"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/reviews/manga"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/reviews/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/reviews/manga"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/reviews/manga"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/reviews/manga"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/reviews/manga"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/reviews/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/reviews/manga"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/reviews/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/reviews/manga"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/reviews/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/reviews/manga"}}}}}}},"operationId":"getReviewsManga"}},"/schedules":{"get":{"summary":"Anime Schedules","tags":["Schedules"],"description":"Get the weekly broadcast schedule of airing anime.\n\n> SFW flags filter out non-sfw entries.","parameters":[{"schema":{"type":"string","enum":["monday","tuesday","wednesday","thursday","friday","saturday","sunday","unknown","other"]},"in":"query","name":"filter","required":false,"description":"Filter by day of the week","examples":{"default":{"value":"monday","x-disabled":true}}},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type","required":false,"description":"Only entries with any selected type. Multiple values match any selected type.\n\n- `tv`: TV series\n- `movie`: Movie\n- `ova`: OVA (original video animation)\n- `special`: Special\n- `ona`: ONA (original net animation, e.g. web releases)\n- `music`: Music video\n- `cm`: CM (commercial)\n- `pv`: PV (promotional video)\n- `tv_special`: TV Special","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Only entries with any selected rating. Multiple values match any selected rating.\n\n- `g`: G - All Ages\n- `pg`: PG - Children\n- `pg13`: PG-13 - Teens 13 or older\n- `r17`: R - 17+ (violence & profanity)\n- `r`: R+ - Mild Nudity\n- `rx`: Rx - Hentai","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres","required":false,"description":"Comma-separated genre, theme or demographic IDs. Every selected ID must match.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":1}},"in":"query","name":"genres_exclude","required":false,"description":"Comma-separated genre, theme or demographic IDs to exclude.","style":"form","explode":false},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["true","false",""],"x-enumDescriptions":{}},"in":"query","name":"kids","required":false,"description":"Filter out kids entries (flag)","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["false","true","only",""],"default":"false"},"in":"query","name":"unapproved","required":false,"description":"When true, also includes unapproved entries.","examples":{"default":{"value":"false","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning scheduled anime","content":{"application/json":{"schema":{"description":"Successful response returning scheduled anime","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList catalog ID of this anime entry."},"url":{"type":"string","description":"The direct MyAnimeList catalog webpage URL of the anime."},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}},"description":"JPG and WebP cover image URLs in small, default, and large resolutions. An entry without a cover shows MAL's placeholder picture."},"trailer":{"type":"object","description":"YouTube trailer embedding details.","properties":{"youtube_id":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"embed_url":{"type":"string","nullable":true},"images":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"medium_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true},"maximum_image_url":{"type":"string","nullable":true}}},"title":{"type":"string","nullable":true},"views":{"type":"integer","nullable":true},"likes":{"type":"integer","nullable":true},"dislikes":{"type":"integer","nullable":true},"comment_count":{"type":"integer","nullable":true},"published_at":{"type":"string","nullable":true},"duration":{"type":"string","nullable":true},"privacy_status":{"type":"string","nullable":true},"region_restriction":{"type":"object","nullable":true,"description":"Countries where YouTube allows or blocks the video, as two-letter country codes. Only one of the two lists is present. Null when the video is not restricted or its details are unknown.","properties":{"allowed":{"type":"array","items":{"type":"string"}},"blocked":{"type":"array","items":{"type":"string"}}}},"embeddable":{"type":"boolean","nullable":true}}},"approved":{"type":"boolean","description":"Indicates whether the entry has been officially approved by MAL moderators."},"titles":{"type":"array","description":"List of alternative titles and translations of this anime.","items":{"type":"object","properties":{"type":{"type":"string","description":"The type or language classification of the title."},"title":{"type":"string","description":"The title value."}}}},"title":{"type":"string","description":"The primary default title of the anime."},"title_english":{"type":"string","nullable":true,"description":"Official English title of the anime, if available."},"title_japanese":{"type":"string","nullable":true,"description":"Official Japanese title of the anime, if available."},"title_synonyms":{"type":"array","items":{"type":"string"},"description":"Alternative names or synonyms of the title."},"type":{"type":"string","nullable":true,"description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special). null when MAL doesn't know the type yet, as on Jikan."},"source":{"type":"string","nullable":true,"description":"The source material type (e.g. Manga, Light Novel, Original). null when no source was saved."},"episodes":{"type":"integer","nullable":true,"description":"Total episodes broadcasted (null if ongoing/not aired)."},"status":{"type":"string","description":"Airing status of the anime (e.g. Finished Airing, Currently Airing, Not yet aired)."},"airing":{"type":"boolean","description":"Whether the anime is currently broadcasting live episodes."},"aired":{"type":"object","description":"Airing dates, formatted as ISO-8601 strings, split components, and text display string. A date known only to the year or month is given as `2027` or `2027-04` instead of a full date.","properties":{"from":{"type":"string","nullable":true},"to":{"type":"string","nullable":true},"prop":{"type":"object","properties":{"from":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}},"to":{"type":"object","properties":{"day":{"type":"integer","nullable":true},"month":{"type":"integer","nullable":true},"year":{"type":"integer","nullable":true}}}}},"string":{"type":"string","nullable":true}}},"duration":{"type":"string","nullable":true,"description":"Length per episode or total runtime of the anime."},"rating":{"type":"string","nullable":true,"description":"Age rating categorization (e.g. PG-13, R - 17+)."},"score":{"type":"number","nullable":true,"description":"The average rating score out of 10. Returns null when unavailable."},"scored_by":{"type":"integer","nullable":true,"description":"Total user score count."},"rank":{"type":"integer","nullable":true,"description":"Global rank based on average score."},"popularity":{"type":"integer","nullable":true,"description":"Global popularity rank based on list members."},"members":{"type":"integer","nullable":true,"description":"Total users who have this anime added to their catalog lists."},"favorites":{"type":"integer","nullable":true,"description":"Total users who favorited this anime."},"synopsis":{"type":"string","nullable":true,"description":"Main plot summary description."},"background":{"type":"string","nullable":true,"description":"Historical or context information about the production."},"season":{"type":"string","nullable":true,"description":"Season of premier (spring, summer, fall, winter)."},"year":{"type":"integer","nullable":true,"description":"Year of premier."},"broadcast":{"type":"object","description":"Weekly broadcast schedule day, time, and timezone.","properties":{"day":{"type":"string","nullable":true},"time":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"string":{"type":"string","nullable":true}}},"producers":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Production companies or publishers."},"licensors":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Licensing agencies."},"studios":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Animation studios."},"genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Genre classifications."},"explicit_genres":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Always empty, kept for Jikan compatibility: MAL lists Ecchi, Erotica and Hentai among an anime's genres, so they are in `genres`. `/genres/anime?filter=explicit_genres` lists those three."},"themes":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Theme classifications."},"demographics":{"type":"array","items":{"type":"object","description":"A reference to another metadata catalog entry (such as a studio, author, genre, or theme).","properties":{"mal_id":{"type":"integer","description":"The unique MyAnimeList ID of the catalog item."},"type":{"type":"string","description":"The type of the catalog item (e.g., anime, manga, people)."},"name":{"type":"string","description":"The name of the catalog item."},"url":{"type":"string","description":"The MyAnimeList website link for this catalog item."}}},"description":"Demographic classifications (e.g. Shonen, Seinen)."}}}}},"example":{"pagination":{"last_visible_page":5,"has_next_page":true,"current_page":1,"items":{"count":25,"total":120,"per_page":25}},"data":[{"mal_id":63409,"url":"https://myanimelist.net/anime/63409/Doumo_Suki_na_Hito_ni_Horegusuri_wo_Irai_sareta_Majo_desu","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1165/160033.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1165/160033t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1165/160033l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1165/160033.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1165/160033t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1165/160033l.webp"}},"trailer":{"youtube_id":"hGRtocAh3iw","url":"https://www.youtube.com/watch?v=hGRtocAh3iw","embed_url":"https://www.youtube-nocookie.com/embed/hGRtocAh3iw?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/hGRtocAh3iw/default.jpg","small_image_url":"https://img.youtube.com/vi/hGRtocAh3iw/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/hGRtocAh3iw/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/hGRtocAh3iw/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/hGRtocAh3iw/maxresdefault.jpg"},"title":"TVアニメ『どうも、好きな人に惚れ薬を依頼された魔女です。』メインPV｜2026年10月5日より放送開始","views":1267635,"likes":12650,"dislikes":59,"comment_count":283,"published_at":"2026-09-14T09:00:37+00:00","duration":"PT1M36S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Doumo, Suki na Hito ni Horegusuri wo Irai sareta Majo desu."},{"type":"Japanese","title":"どうも、好きな人に惚れ薬を依頼された魔女です。"},{"type":"English","title":"Hello, I am a Witch and my Crush Wants me to Make a Love Potion!"},{"type":"Synonym","title":"Horemajo"}],"title":"Doumo, Suki na Hito ni Horegusuri wo Irai sareta Majo desu.","title_english":"Hello, I am a Witch and my Crush Wants me to Make a Love Potion!","title_japanese":"どうも、好きな人に惚れ薬を依頼された魔女です。","title_synonyms":["Horemajo"],"type":"TV","source":"Light novel","episodes":12,"status":"Currently Airing","airing":true,"aired":{"from":"2026-10-05T00:00:00+00:00","to":null,"prop":{"from":{"day":5,"month":10,"year":2026},"to":{"day":null,"month":null,"year":null}},"string":"Oct 5, 2026 to ?"},"duration":"23 min per ep","rating":"PG-13 - Teens 13 or older","score":7.58,"scored_by":6702,"rank":1871,"popularity":3384,"members":59163,"favorites":128,"synopsis":"Deep within the forest, a cozy and rather cluttered cottage sits on the lakeshore, housing a mysterious, feared witch. In truth, she is a lovely young woman named Rose, who has learned the art of potion-making from her wise grandmother. Rose cherishes her tucked-away life, yet there is a longing in her heart—for a handsome knight she once saw, Sir Harij Azm.\n\nFor four years, Rose's feelings for Harij have lingered, but she can never act on them; witches live outside of human affairs and belong to no country or man. So, when Harij suddenly appears on her doorstep looking for a love potion, Rose is both surprised and heartbroken. Although another woman has captured the noble knight's heart, Rose decides to help him. But before crafting the potion, Rose sends Harij on a series of ridiculous quests for each ingredient, hoping to delay the inevitable and savor their fleeting time together.\n\n[Written by MAL Rewrite]","background":null,"season":"fall","year":2026,"broadcast":{"day":"Mondays","time":"21:30","timezone":"Asia/Tokyo","string":"Mondays at 21:30 (JST)"},"producers":[{"mal_id":143,"type":"anime","name":"Mainichi Broadcasting System","url":"https://myanimelist.net/anime/producer/143/Mainichi_Broadcasting_System"},{"mal_id":238,"type":"anime","name":"AT-X","url":"https://myanimelist.net/anime/producer/238/AT-X"},{"mal_id":1377,"type":"anime","name":"Futabasha","url":"https://myanimelist.net/anime/producer/1377/Futabasha"},{"mal_id":1680,"type":"anime","name":"BS NTV","url":"https://myanimelist.net/anime/producer/1680/BS_NTV"},{"mal_id":1696,"type":"anime","name":"Kadokawa","url":"https://myanimelist.net/anime/producer/1696/Kadokawa"},{"mal_id":2074,"type":"anime","name":"Bit grooove promotion","url":"https://myanimelist.net/anime/producer/2074/Bit_grooove_promotion"},{"mal_id":2147,"type":"anime","name":"Heart Company","url":"https://myanimelist.net/anime/producer/2147/Heart_Company"},{"mal_id":3408,"type":"anime","name":"Sand B","url":"https://myanimelist.net/anime/producer/3408/Sand_B"}],"licensors":[],"studios":[{"mal_id":51,"type":"anime","name":"Diomedéa","url":"https://myanimelist.net/anime/producer/51/Diomedéa"}],"genres":[{"mal_id":10,"type":"anime","name":"Fantasy","url":"https://myanimelist.net/anime/genre/10/Fantasy"},{"mal_id":22,"type":"anime","name":"Romance","url":"https://myanimelist.net/anime/genre/22/Romance"}],"explicit_genres":[],"themes":[],"demographics":[{"mal_id":43,"type":"anime","name":"Josei","url":"https://myanimelist.net/anime/genre/43/Josei"}]}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/schedules?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/schedules"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/schedules"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/schedules"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/schedules"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/schedules"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/schedules"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/schedules"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/schedules"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/schedules"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/schedules"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/schedules"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/schedules"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/schedules"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/schedules"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/schedules"}}}}}}},"operationId":"getSchedules"}},"/news":{"get":{"summary":"News","tags":["News"],"description":"Search and browse the full news catalogue with filters and sorting.\n\n> SFW flags filter out news articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text."},{"schema":{"type":"string"},"in":"query","name":"tag","required":false,"description":"Only items with this tag. The matching `/tags` endpoint lists the available tags."},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","comments"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning news list","content":{"application/json":{"schema":{"description":"Successful response returning news list","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer","description":"MyAnimeList ID"},"url":{"type":"string","description":"MyAnimeList URL"},"title":{"type":"string","description":"Title"},"date":{"type":"string","nullable":true,"description":"Post Date ISO8601"},"author_username":{"type":"string","description":"Author MyAnimeList Username"},"author_url":{"type":"string","description":"Author Profile URL"},"forum_url":{"type":"string","nullable":true,"description":"Forum topic URL"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"comments":{"type":"integer"},"excerpt":{"type":"string"}}}}},"example":{"pagination":{"last_visible_page":643,"has_next_page":true,"current_page":1,"items":{"count":25,"total":16064,"per_page":25}},"data":[{"mal_id":74934042,"url":"https://myanimelist.net/news/74934042","title":"Light Novel 'Isekai Douraku ni Akitara' Gets TV Anime in Winter 2027","date":"2026-11-13T03:22:46+00:00","author_username":"Syureria","author_url":"https://myanimelist.net/profile/Syureria","forum_url":"https://myanimelist.net/forum/?topicid=2286117","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1794540059-9f76257a0672a1369be9c871e20bd9c9.jpeg?s=939da2a493af8e5abe09d18eeee97615"}},"comments":0,"excerpt":"Publishing company Shufunotomo announced a television anime adaptation of Fudaya Sanmongarasu and Tomozo's Isekai Douraku ni Akitara (Living It Up in Another World U..."}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/news?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/news"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/news"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/news"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/news"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/news"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/news"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/news"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/news"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/news"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/news"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/news"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/news"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/news"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/news"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/news"}}}}}}},"operationId":"getNews"}},"/news/tags":{"get":{"summary":"News Tags","tags":["News"],"description":"Get all news tags.","responses":{"200":{"description":"Successful response returning tags and counts","content":{"application/json":{"schema":{"description":"Successful response returning tags and counts","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"}}}}},"example":{"data":[{"name":"More Info","count":5075},{"name":"Preview","count":4148},{"name":"New Anime","count":3856}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/news/tags"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/news/tags"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/news/tags"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/news/tags"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/news/tags"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/news/tags"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/news/tags"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/news/tags"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/news/tags"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/news/tags"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/news/tags"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/news/tags"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/news/tags"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/news/tags"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/news/tags"}}}}}}},"operationId":"getNewsTags"}},"/news/{id}":{"get":{"summary":"News Details","tags":["News"],"description":"Get a news article by its ID.\n\n> SFW flags return 404 for news articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":56264086},"in":"path","name":"id","required":true,"description":"The MAL News ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning news details","content":{"application/json":{"schema":{"description":"Successful response returning news details","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer","description":"MyAnimeList ID"},"url":{"type":"string","description":"MyAnimeList URL"},"title":{"type":"string","description":"Title"},"date":{"type":"string","nullable":true,"description":"Post Date ISO8601"},"author_username":{"type":"string","description":"Author MyAnimeList Username"},"author_url":{"type":"string","description":"Author Profile URL"},"forum_url":{"type":"string","nullable":true,"description":"Forum topic URL"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"comments":{"type":"integer"},"excerpt":{"type":"string"},"content":{"type":"object","required":["html","markdown"],"properties":{"html":{"type":"string","description":"Sanitized, normalized article HTML."},"markdown":{"type":"string","description":"Markdown generated from the sanitized article HTML."}}},"relations":{"type":"object","properties":{"anime":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"name":{"type":"string"},"url":{"type":"string"}}}},"manga":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"name":{"type":"string"},"url":{"type":"string"}}}}}}}}},"example":{"data":{"mal_id":56264086,"url":"https://myanimelist.net/news/56264086","title":"Manga 'Fruits Basket' Receives New TV Anime Adaptation","date":"2018-11-19T14:14:00+00:00","author_username":"Vindstot","author_url":"https://myanimelist.net/profile/Vindstot","forum_url":"https://myanimelist.net/forum/?topicid=1752225","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1542640254-66e5c9c940a2cae6533250e24a978262.jpeg?s=55a85eab45a890d2042b6b1cbecdf699"}},"comments":109,"excerpt":"This year's 24th issue of Hakusensha's Hana to Yume magazine announced a new anime adaptation of Natsuki Takaya's supernatural shoujo manga Fruits Basket on Tuesday,...","content":{"html":"<figure><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1542640254-66e5c9c940a2cae6533250e24a978262.jpeg\" alt=\"Manga &apos;Fruits Basket&apos; Receives New TV Anime Adaptation\"></figure><p>This year&apos;s 24th issue of Hakusensha&apos;s <a href=\"https://myanimelist.net/manga/magazine/21/\">Hana to Yume</a> magazine announced a new anime adaptation of <a href=\"https://myanimelist.net/people/1873/\">Natsuki Takaya</a>&apos;s supernatural shoujo manga <a href=\"https://myanimelist.net/manga/102/\"><em>Fruits Basket</em></a> on Tuesday, scheduled to air on TV Tokyo in 2019. The new anime will adapt the manga series in its entirety. Avex Entertainment also opened an official website for the series simultaneously, revealing new staff, cast, and a teaser visual (pictured).</p><p>The anime announcement was originally revealed through Hana to Yume&apos;s listing of the issue&apos;s cover on November 12. The magazine promptly removed the listing and <a href=\"https://twitter.com/HanaYume/status/1062554497761734656\">issued a statement</a> on its official Twitter the following day that reads, &quot;Please wait for the official announcement regarding <em>Fruits Basket</em>&apos;s media adaptation on November 20.&quot;</p><p>Synopsis<br>\nTooru Honda is an orphan with nowhere to go but a tent in the woods, until the Souma family takes her in. However, the Souma family is no ordinary family, and they hide a grave secret: when they are hugged by someone of the opposite gender, they turn into animals from the Chinese Zodiac!</p><p>Now, Tooru must help Kyou and Yuki Souma hide their curse from their classmates, as well as her friends Arisa Uotani and Megumi Hanajima. As she is drawn further into the mysterious world of the Soumas, she meets more of the family, forging friendships along the way.</p><p>But this curse has caused much suffering; it has broken many Soumas. Despite this, Tooru may just be able to heal their hearts and soothe their souls. [Written by MAL Rewrite]</p><p>Staff<br>\nDirector: <a href=\"https://myanimelist.net/people/38648/\">Yoshihide Ibata</a> (<em>FLCL Progressive</em> co-director)<br>\nSeries Composition: <a href=\"https://myanimelist.net/people/25989/\">Taku Kishimoto</a> (<em>Boku dake ga Inai Machi</em>)<br>\nCharacter Design: <a href=\"https://myanimelist.net/people/21823/\">Yuu Shindou</a> (<em>Yahari Ore no Seishun Love Comedy wa Machigatteiru.</em>)<br>\nExecutive Supervisor: Natsuki Takaya<br>\nStudio: <a href=\"https://myanimelist.net/anime/producer/73/\">TMS Entertainment</a></p><p>Cast<br>\nTooru Honda: <a href=\"https://myanimelist.net/people/44317/\">Manaka Iwami</a> (<em>Gamers!</em>)<br>\nYuki Souma: <a href=\"https://myanimelist.net/people/10989/\">Nobunaga Shimazaki</a> (<em>Ore Monogatari!!</em>)<br>\nKyou Souma: <a href=\"https://myanimelist.net/people/33995/\">Yuuma Uchida</a> (<em>Banana Fish</em>)<br>\nShigure Souma: <a href=\"https://myanimelist.net/people/513/\">Yuuichi Nakamura</a> (<em>Inu x Boku SS</em>)</p><p>North American anime distributor Funimation also <a href=\"https://www.funimation.com/blog/press-release-the-beloved-masterpiece-returns-the-full-fruits-basket-story-is-soon-to-be-animated/\">announced</a> in a press release on Monday that it has licensed the new anime for both streaming and home video rights.</p><p><em>Fruits Basket</em> was published in Hana to Yume magazine between 1998 and 2006 and compiled into 23 volumes. Hakusensha later reprinted the series in 12 omnibus volumes in 2015-2016. Takaya began serializing the <a href=\"https://myanimelist.net/manga/91484/\"><em>Fruits Basket: Another</em></a> sequel manga in <a href=\"https://myanimelist.net/manga/magazine/1323/\">Hana LaLa online</a> web magazine in September 2015, which later moved to the <a href=\"https://myanimelist.net/manga/magazine/1451/\">Manga Park</a> website last August. The manga is expected to <a href=\"https://twitter.com/n_takaya77/status/1026261044954427392\">end</a> in the next chapter, with one-shots planned for subsequent release. The second volume went on sale last September, with the third and final volume scheduled for release at a later date. According to Hakusensha, <em>Fruits Basket</em> has sold a cumulative 30 million copies of its compiled volumes worldwide. The sequel manga currently has 340,000 copies of the first two volumes in circulation.</p><p><a href=\"https://myanimelist.net/anime/producer/37/\">Studio Deen</a> produced a 26-episode <a href=\"https://myanimelist.net/anime/120/\">anime series</a> in Summer 2001, adapting the first six volumes and the earlier chapters of the seventh volume. Funimation released the anime in North America on four DVD volumes in 2002-2003 and later on Blu-ray <a href=\"https://myanimelist.net/news/51743490\">last August</a>.</p><p>Tokyopop originally published the manga in English from 2004-2009 and Ultimate Editions beginning 2007, combining two sequential volumes in a single hard-cover volume. Yen Press relicensed the series in 2015 and published it in 12 omnibus volumes between June 2016 and April 2017, matching Hakusensha&apos;s collector&apos;s editions.</p><p><em>Fruits Basket</em> received the 25th Kodansha Manga Awards for shoujo manga and Best Manga award at the American Anime Awards in 2007. The anime series also won the 2001 Anime Grand Prix Award.</p><p>Official site: <a href=\"https://fruba.jp/\">https://fruba.jp/</a><br>\nOfficial Twitter: @<a href=\"https://twitter.com/fruba_PR\">fruba_PR</a></p><p>Source: <a href=\"https://natalie.mu/comic/news/308544\">Comic Natalie</a></p><p><a href=\"https://myanimelist.net/anime/38680/\">Fruits Basket (2019)</a> on MAL</p>","markdown":"![Manga 'Fruits Basket' Receives New TV Anime Adaptation](https://cdn.myanimelist.net/s/common/uploaded_files/1542640254-66e5c9c940a2cae6533250e24a978262.jpeg)\n\nThis year's 24th issue of Hakusensha's [Hana to Yume](https://myanimelist.net/manga/magazine/21/) magazine announced a new anime adaptation of [Natsuki Takaya](https://myanimelist.net/people/1873/)'s supernatural shoujo manga [_Fruits Basket_](https://myanimelist.net/manga/102/) on Tuesday, scheduled to air on TV Tokyo in 2019. The new anime will adapt the manga series in its entirety. Avex Entertainment also opened an official website for the series simultaneously, revealing new staff, cast, and a teaser visual (pictured).\n\nThe anime announcement was originally revealed through Hana to Yume's listing of the issue's cover on November 12. The magazine promptly removed the listing and [issued a statement](https://twitter.com/HanaYume/status/1062554497761734656) on its official Twitter the following day that reads, \"Please wait for the official announcement regarding _Fruits Basket_'s media adaptation on November 20.\"\n\nSynopsis  \nTooru Honda is an orphan with nowhere to go but a tent in the woods, until the Souma family takes her in. However, the Souma family is no ordinary family, and they hide a grave secret: when they are hugged by someone of the opposite gender, they turn into animals from the Chinese Zodiac!\n\nNow, Tooru must help Kyou and Yuki Souma hide their curse from their classmates, as well as her friends Arisa Uotani and Megumi Hanajima. As she is drawn further into the mysterious world of the Soumas, she meets more of the family, forging friendships along the way.\n\nBut this curse has caused much suffering; it has broken many Soumas. Despite this, Tooru may just be able to heal their hearts and soothe their souls. \\[Written by MAL Rewrite\\]\n\nStaff  \nDirector: [Yoshihide Ibata](https://myanimelist.net/people/38648/) (_FLCL Progressive_ co-director)  \nSeries Composition: [Taku Kishimoto](https://myanimelist.net/people/25989/) (_Boku dake ga Inai Machi_)  \nCharacter Design: [Yuu Shindou](https://myanimelist.net/people/21823/) (_Yahari Ore no Seishun Love Comedy wa Machigatteiru._)  \nExecutive Supervisor: Natsuki Takaya  \nStudio: [TMS Entertainment](https://myanimelist.net/anime/producer/73/)\n\nCast  \nTooru Honda: [Manaka Iwami](https://myanimelist.net/people/44317/) (_Gamers!_)  \nYuki Souma: [Nobunaga Shimazaki](https://myanimelist.net/people/10989/) (_Ore Monogatari!!_)  \nKyou Souma: [Yuuma Uchida](https://myanimelist.net/people/33995/) (_Banana Fish_)  \nShigure Souma: [Yuuichi Nakamura](https://myanimelist.net/people/513/) (_Inu x Boku SS_)\n\nNorth American anime distributor Funimation also [announced](https://www.funimation.com/blog/press-release-the-beloved-masterpiece-returns-the-full-fruits-basket-story-is-soon-to-be-animated/) in a press release on Monday that it has licensed the new anime for both streaming and home video rights.\n\n_Fruits Basket_ was published in Hana to Yume magazine between 1998 and 2006 and compiled into 23 volumes. Hakusensha later reprinted the series in 12 omnibus volumes in 2015-2016. Takaya began serializing the [_Fruits Basket: Another_](https://myanimelist.net/manga/91484/) sequel manga in [Hana LaLa online](https://myanimelist.net/manga/magazine/1323/) web magazine in September 2015, which later moved to the [Manga Park](https://myanimelist.net/manga/magazine/1451/) website last August. The manga is expected to [end](https://twitter.com/n_takaya77/status/1026261044954427392) in the next chapter, with one-shots planned for subsequent release. The second volume went on sale last September, with the third and final volume scheduled for release at a later date. According to Hakusensha, _Fruits Basket_ has sold a cumulative 30 million copies of its compiled volumes worldwide. The sequel manga currently has 340,000 copies of the first two volumes in circulation.\n\n[Studio Deen](https://myanimelist.net/anime/producer/37/) produced a 26-episode [anime series](https://myanimelist.net/anime/120/) in Summer 2001, adapting the first six volumes and the earlier chapters of the seventh volume. Funimation released the anime in North America on four DVD volumes in 2002-2003 and later on Blu-ray [last August](https://myanimelist.net/news/51743490).\n\nTokyopop originally published the manga in English from 2004-2009 and Ultimate Editions beginning 2007, combining two sequential volumes in a single hard-cover volume. Yen Press relicensed the series in 2015 and published it in 12 omnibus volumes between June 2016 and April 2017, matching Hakusensha's collector's editions.\n\n_Fruits Basket_ received the 25th Kodansha Manga Awards for shoujo manga and Best Manga award at the American Anime Awards in 2007. The anime series also won the 2001 Anime Grand Prix Award.\n\nOfficial site: [https://fruba.jp/](https://fruba.jp/)  \nOfficial Twitter: @[fruba\\_PR](https://twitter.com/fruba_PR)\n\nSource: [Comic Natalie](https://natalie.mu/comic/news/308544)\n\n[Fruits Basket (2019)](https://myanimelist.net/anime/38680/) on MAL"},"relations":{"anime":[{"mal_id":120,"name":"Fruits Basket","url":"https://myanimelist.net/anime/120/Fruits_Basket"},{"mal_id":38680,"name":"Fruits Basket 1st Season","url":"https://myanimelist.net/anime/38680/Fruits_Basket_1st_Season"}],"manga":[{"mal_id":102,"name":"Fruits Basket","url":"https://myanimelist.net/manga/102/Fruits_Basket"}]}}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/news/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/news/56264086"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/news/56264086"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/news/56264086"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"News article with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/news/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/news/56264086"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/news/56264086"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/news/56264086"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/news/56264086"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/news/56264086"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/news/56264086"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/news/56264086"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/news/56264086"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/news/56264086"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/news/56264086"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/news/56264086"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/news/56264086"}}}}}}},"operationId":"getNewsById"}},"/articles":{"get":{"summary":"Articles","tags":["Articles"],"description":"Search and browse the full article catalogue with filters and sorting.\n\n> SFW flags filter out articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text."},{"schema":{"type":"string"},"in":"query","name":"tag","required":false,"description":"Only items with this tag. The matching `/tags` endpoint lists the available tags."},{"schema":{"type":"string","maxLength":30},"in":"query","name":"author_username","required":false,"description":"Only content written by this MyAnimeList user. Matches the full username."},{"schema":{"type":"string"},"in":"query","name":"published_after","required":false,"description":"Only items published on or after this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"published_before","required":false,"description":"Only items published on or before this date or timestamp.\n\nUse a date (`2026-11-04`) or a timestamp with seconds and a time zone (`2026-11-04T18:30:00Z` or `2026-11-04T20:30:00+02:00`). A date covers the whole UTC day."},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"published_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning articles list","content":{"application/json":{"schema":{"description":"Successful response returning articles list","type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"published_at":{"type":"string","nullable":true},"author_username":{"type":"string"},"author_url":{"type":"string","nullable":true},"views":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"excerpt":{"type":"string"}}}}},"example":{"pagination":{"last_visible_page":88,"has_next_page":true,"current_page":1,"items":{"count":25,"total":2188,"per_page":25}},"data":[{"mal_id":2422,"url":"https://myanimelist.net/featured/2422/The_Secret_to_Finding_Rare_Japanese_Anime_Merch","title":"The Secret to Finding Rare Japanese Anime Merch","summary":"Anime merchandise hunting doesn’t have to stop at international retailers. Discover why searching Japanese marketplaces, secondhand stores, and Japanese listings can uncover rare, limited, and discontinued goods, and how international fans can access them through ZenMarket.","published_at":"2026-10-01T01:00:00+00:00","author_username":"MAL_editing_team","author_url":"https://myanimelist.net/profile/MAL_editing_team","views":3015,"tags":["Advertorial"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1788226153-01a6d5764290629bd8501c6341eb5cd1.jpeg"}},"excerpt":"Anime merchandise hunting doesn’t have to stop at international retailers. Discover why searching Japanese marketplaces, secondhand stores, and Japanese listings can..."}]},"required":["data","pagination"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/articles?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/articles"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/articles"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/articles"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/articles"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/articles"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/articles"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/articles"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/articles"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/articles"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/articles"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/articles"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/articles"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/articles"}}}}}}},"operationId":"getArticles"}},"/articles/tags":{"get":{"summary":"Article Tags","tags":["Articles"],"description":"Get all featured article tags.","responses":{"200":{"description":"Successful response returning tags and counts","content":{"application/json":{"schema":{"description":"Successful response returning tags and counts","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"}}}}},"example":{"data":[{"name":"Spoiler","count":900},{"name":"Collection","count":715},{"name":"Analysis","count":404}]},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/articles/tags"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/articles/tags"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/articles/tags"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/articles/tags"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/articles/tags"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/articles/tags"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/articles/tags"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/articles/tags"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/articles/tags"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/articles/tags"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/articles/tags"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/articles/tags"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/articles/tags"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/articles/tags"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/articles/tags"}}}}}}},"operationId":"getArticlesTags"}},"/articles/{id}":{"get":{"summary":"Article Details","tags":["Articles"],"description":"Get a featured article by its ID.\n\n> SFW flags return 404 for articles where non-sfw IDs are included.","parameters":[{"schema":{"type":"integer","default":1904},"in":"path","name":"id","required":true,"description":"The MAL Article ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning article details","content":{"application/json":{"schema":{"description":"Successful response returning article details","type":"object","properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"published_at":{"type":"string","nullable":true},"author_username":{"type":"string"},"author_url":{"type":"string","nullable":true},"views":{"type":"integer"},"tags":{"type":"array","items":{"type":"string"}},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"excerpt":{"type":"string"},"content":{"type":"object","properties":{"html":{"type":"string"},"markdown":{"type":"string"}}},"relations":{"type":"object","properties":{"anime":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"name":{"type":"string"},"url":{"type":"string"}}}},"manga":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"name":{"type":"string"},"url":{"type":"string"}}}},"people":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"name":{"type":"string"},"url":{"type":"string"}}}},"characters":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"name":{"type":"string"},"url":{"type":"string"}}}}}}}}},"example":{"data":{"mal_id":1904,"url":"https://myanimelist.net/featured/1904/10_Visual_Novel_Games_That_Need_To_Become_Anime","title":"10 Visual Novel Games That Need To Become Anime","summary":"There have been an incredible number of visual novels that have been turned into anime series. Here, we bring you 10 candidates that absolutely need to have their story told as an animation.","published_at":"2016-09-12T11:26:00+00:00","author_username":"CriticalAndroid","author_url":"https://myanimelist.net/profile/CriticalAndroid","views":60481,"tags":["Collection","Games","Game Adaptation"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1473679579-aba73087cff480d77b7f1aeeefa60292.png"}},"excerpt":"There have been an incredible number of visual novels that have been turned into anime series. Here, we bring you 10 candidates that absolutely need to have their st...","content":{"html":"<p>It’s no secret that there’s been a long history between visual novels and anime. A great number of renowned anime have been derived from visual novels and in turn a great number of anime have been turned into visual novels. <a href=\"https://myanimelist.net/anime/356/Fate_stay_night\"><em>Fate/stay Night</em></a> originally began life as a visual novel in 2004 before turning into multiple anime series starting in 2006. <a href=\"https://myanimelist.net/anime/934/Higurashi_no_Naku_Koro_ni\"><em>Higurashi no Naku Koro ni</em></a>, <a href=\"https://myanimelist.net/anime/9253/Steins_Gate\"><em>Stein;s Gate</em></a>, the <a href=\"https://myanimelist.net/anime/6895/Hakuouki\"><em>Hakuoki</em></a> series, <a href=\"https://myanimelist.net/anime/2167/Clannad\"><em>Clannad</em></a> - all of them are based on visual novels. <br><br>\nFor many years the phenomenon of this style of gaming had been mostly concentrated to Japan. American and European gamers had text based RPG and adventure games in the 1980’s, but a mass market game in which reading and choosing multiple, branching, paths made up the bulk of the action hadn’t taken hold. Much of this changed in 2005 when Capcom released <em>Phoenix Wright: Ace Attorney</em> for the Nintendo DS, otherwise known as <em>Gyakuten Saiban</em> in Japan. The courtroom logic puzzles combined with a point-and-click style of gameplay made for a unique kind of game that the DS seemed tailor made for. <br><br>\nAs bad as it is that it took so long (15 years since it first premiered in Japan on the Game Boy Advance) for <em>Ace Attorney</em> to get an <a href=\"https://myanimelist.net/anime/31630/Gyakuten_Saiban__Sono_Shinjitsu_Igi_Ari\">anime adaptation</a>, at least it finally got one! There are other, less fortunate visual novels still waiting to emerge from the virtual page and into the realm of fully rendered animation. So here are 10 visual novels (across 7 different game series) just waiting to make the jump from game to anime.<br>\n<br></p>\n<hr>\n<h2><em>Hotel Dusk: Room 215 and Last Window: The Secret of Cape West</em></h2>\n<hr>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402878-25ce9e16d34eca3401a1e0fa5f256142.jpeg\" alt=\"Hotel Dusk\" data-align=\"center\"><br>\nFormer detective Kyle Hyde is a man with a past. That might seem like a typical description of a man in a detective drama, and so is the idea of him looking for his missing partner. But the hotel he’s arrived in is anything but typical. In the events of <em>Hotel Dusk: Room 215</em>, not only is Kyle told that his room, 215, is able to grant wishes, but he also begins to discover that the building has a staggering amount of connections to a past that he’s been trying to escape. Between Hyde himself and the intriguingly varied cast of characters staying at the hotel, there’s enough depth and mystery to not only make for a great game, but also make for a great anime series.<br>\n<br></p>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402871-6568f679df6a7ec87518319d9d76398d.jpeg\" alt=\"Lost Window\" data-align=\"center\"><br>\nHyde’s adventures continued in the sequel, <em>Last Window: The Secret of Cape West</em>. With a plot that’s not directly connected to Hotel Dusk, Hyde stumbles upon a unique mystery within the Cape West Apartments complex. The building is due to be demolished, but secrets lay within it that are connected to the deaths of two people from decades past, and a mysterious object called the Scarlet Star. Like the hotel from his previous adventure, Hyde finds the apartments are filled with all sorts of people with their own unique personalities and eccentricities. How much they know of the past and how closely they’re connected to the events surrounding the Scarlet Star are just another element of the mystery behind this case that Hyde never anticipated would come into his life. <br><br>\nBoth games employ a unique graphical style through the use of animated rotoscoping. Normally it’s a technique used in live action to give things an animated appearance, here it’s used on black and white character sprites against full colored backgrounds. If an anime adaptation were made, carrying over this graphical approach could make for a uniquely stylized series that sets itself apart from others with its look, as well as with its story.</p>\n<p><br></p>\n<hr>\n<h2><em>Radical Dreamers</em></h2>\n<hr>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402864-1bfc45b28bc2bd3ba545e28939e571d5.jpeg\" alt=\"Radical Dreamers\" data-align=\"center\"><br>\nThis 1996 visual novel is the oft forgotten, original sequel to <em>Chrono Trigger</em>. It was released only in Japan for the Super Famicom (the Japanese equivalent of the Super Nintendo) It wasn’t a retail game, but a downloadable Satellaview title that gamers could essentially download into a specialized cartridge through a satellite link. <br><br>\nThe game features the characters of Serge, Kid, and Gil as they infiltrate the Viper Manor in search of a treasure known as the Frozen Flame. Unfortunately, Viper Manor is also home to a devastatingly powerful and cruel man known as Lynx, who seized the manor by force some time ago. <br><br>\nIf some of these things sound familiar it’s because elements of the plot were recycled for the game <em>Chrono Cross</em>, with some of the background music being ported over as well. Chrono series director Masato Kato was unhappy with how <em>Radical Dreamers</em> turned out and saw <em>Chrono Cross</em> as the true sequel he wanted to make, though <em>Radical Dreamers</em> still exists as canon in that its events are an alternate reality. <br><br>\nTechnically, there was a Chrono Trigger anime project in the form of <a href=\"https://myanimelist.net/anime/1751/Jikuu_Bouken_Nuumamonjaa\"><em>Jikuu Bouken Nuumamonjaa</em></a>, an OVA short from 1996, but the events of it are completely separate from the games. <em>Chrono Trigger</em> still has an avid fan base, and the only American fans who have had any exposure to <em>Radical Dreamers</em> would be those who obtained a ROM of it online. Even if its story is relegated to taking place in an alternate dimension, it would still provide an interesting place to revisit in the <em>Chrono</em> series, and give fans a proper animated feature to compliment the franchise.</p>\n<p><br></p>\n<hr>\n<h2><em>Policenauts</em></h2>\n<hr>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402885-a1d6b66121426eb021828cfe7cfa7430.jpeg\" alt=\"Policenauts\" data-align=\"center\"><br>\nThe name Hideo Kojima is largely associated with the <em>Metal Gear</em> franchise of video games, and for good reason considering how popular and well received the games are by fans and critics alike. But in 1994, two years before <em>Metal Gear Solid</em>, Kojima released the visual novel game <em>Policenauts</em>. The game focuses on detective Jonathan Ingram, a former astronaut and police officer who was lost in space for 24 years but managed to survive in cold sleep and eventually was rescued. Now back in society as a private investigator, he’s taken aback to find out that his ex-wife wants to hire him to investigate the sudden disappearance of her current husband. Ingram recruits the assistance of his former partner, Ed Brown, and set off to discover a case filled with all the twists, turns, danger, and intrigue that one would expect from a Kojima written story. <br><br>\n<em>Policenauts</em> was never released outside of Japan even though fan translation projects have been around for years. The game itself went through numerous console ports and the increasingly powerful technology over the years allowed for the game to receive large amounts of fully animated and voiced cut scenes. It would be a natural fit for an anime adaptation considering how the game itself is almost an interactive anime project as it is. The science-fiction/film noir setting has proven successful in the years since <em>Policenauts</em> was originally released and the subject matter would be just as timely and enjoyable to watch today as it was back in 1994.</p>\n<p><br></p>\n<hr>\n<h2><em>Theresia</em></h2>\n<hr>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402858-0384f75f890d3f7feca105fd765b1af0.jpeg\" alt=\"Theresia\" data-align=\"center\"><br>\nLeanne wakes up to find herself in an odd, terrifying dungeon, with no memories of herself and a paper with the name, “Theresia” written on it. This psychological horror visual novel doesn’t give its reader/player much more than that upon entering into its world, and the<br>\ndevelopments of its rich, twisted, grim backstory are revealed primarily in flashbacks. Leanne is alone in her journey through the desolate, decaying area in which she finds herself; her only company being the omnipresence of death in the form of deadly traps scattered everywhere. <br><br>\n<em>Theresia</em> actually consists of two stories: \"Dear Emile\" and \"Dear Martel\"; both tales are set within the same universe, but at different points in the story's timeline. An anime series could easily use both of these sections of the game to create a unified narrative - it would make for a wonderful addition to the horror genre thanks to its completely unsettling atmosphere, psychologically tormented characters, and underlying elements that are not so removed from the scope of realism. Though the game consists primarily of visual novel elements to tell its story, there's a lot of point and click adventure elements mixed with survival horror interspersed between the novel segments. Considering how difficult these can be, it can be a bit of a hindrance to enjoying the story. An anime adaptation would eliminate this potential barrier of entry to the plot while still keeping the horror elements alive and well.</p>\n<p><br></p>\n<hr>\n<h2><em>Ever 17</em></h2>\n<hr>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402842-26fa1378af49214842bdddf6d8b0e1fb.jpeg\" alt=\"Ever 17\" data-align=\"center\"><br>\nAmusement parks are fun, right? “Amusement” is literally half of the word. Now imagine it’s an amusement park built underwater so you can really enjoy the splendor of the aquatic life around you. What could possibly ruin that sense of fun and wonder? Well if you said “a leak,” then you’d be correct. The story of Ever 17 takes place from the points of view of several visitors to the LeMU amusement park as it beings to leak, flood, and succumb to the intense water pressure that’s building up outside of it. There’s a lot more to the story than simply trying to escape from a potential watery grave; LeMU is more than just an amusement park and numerous secrets lay figuratively and literally in its depths. <br><br>\nThe story quickly gets very complicated and finding the path to the novel’s true ending involves going down dead end routes, discovering new information, and using said information to change the course of events. An animated adaptation of this could sequentially go down each character’s path and in the final episodes tie everything together, similarly to how the novel does it. It’s a story that dabbles in science-fiction, romance, and tragedy that is just begging to be experienced. The game has also spawned a number of spiritual sequels that could also receive an anime treatment, but <em>Ever 17</em> stands out as the finest in the series with an engaging story that could be viewed just as easily as it can be read and played.</p>\n<p><br></p>\n<hr>\n<h2><em>Zero Escape Trilogy</em></h2>\n<hr>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402827-784507adab2c9d658946f002799a42a0.jpeg\" alt=\"999\" data-align=\"center\"><br>\nHere’s the big one. If there was ever a visual novel series that needs to be adapted into an anime, this is the one. Considering that as of 2016 it’s now a trilogy, there’s even more incentive to turn these stories into the full, incredible narratives that they deserve to be. The first game in the series, <em>Nine Hours, Nine Persons, Nine Doors</em>, sees nine people trapped in a slowly sinking cruise liner that has been modified with special locks, doors, and puzzles that they need to solve in order to escape. <br><br>\nAll of them were kidnapped by a mysterious masked figure calling himself “Zero,” and tells them over the ship’s loudspeaker that if they want to escape, they must find a door labeled “9.” If they want to get to the door alive however, they have to play the “Nonary Game.” While all the rules aren’t revealed to them from the start, it’s made clear that failure to play by the rules will result in death. You play as a young man named Junpei as you make decisions about who to team with, where to go on the ship, and also try to solve the puzzles that come between you and your possible escape. The twists in the story come hard and heavy, ultimately leading to a satisfying conclusion if one takes the time to explore all the endings.<br>\n<br></p>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402821-7d14b1c6ab421482d08fd755de16ab71.jpeg\" alt=\"Virtue's Last Reward\" data-align=\"center\"><br>\nThe series is continued in <em>Zero Escape: Virtue’s Last Reward</em> which finds another set of characters, some of them returning from the previous story, similarly kidnapped and forced to play a version of the Nonary Game, this one being subtitled the Ambidex Edition. Along with solving puzzles and trying to escape through a door labeled “9,” the players in this game are also forced to cast votes that could result in the deaths of other players, or the potential for them to all escape alive…if they can all trust one another.<br>\n<br></p>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402813-72b4e1e3cb645df4a6fd674a71f23687.jpeg\" alt=\"Zero Time Dilemma\" data-align=\"center\"><br>\nThe final title, <em>Zero Time Dilemma</em>, once again sees some returning characters and some new ones, kidnapped and forced to play a game to escape the bunker that they’re trapped in. Unlike the previous games though, this one is titled the “Decision Game” and there is no chance for everyone to survive. This go around, only three people will be permitted to leave the compound alive, as the way to open the exit requires the deaths of six people. <br><br>\nThere’s a tremendous amount of material for an anime adaptation of this series to cover, but it’s definitely possible to do thanks to the trilogy of games actually telling a complete story and the characters having an anime inspired art design, especially in the first title. The puzzle sequences in the games don’t advance the plot much, meaning that these sections could easily be omitted or changed in order to tell a more cohesive story if turned into a series. Given how richly detailed the characters and their relationships are, <em>Zero Escape</em> could prove to be a compelling psychological thriller of a series that truly gets its viewers invested in the survival of these trapped individuals. </p>\n<p><br></p>\n<hr>\n<h2><em>Hatoful Boyfriend</em></h2>\n<hr>\n<p><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1473402834-c26b2d263c2c575e8690df531c643c97.jpeg\" alt=\"Hatoful Boyfriend\" data-align=\"center\"><br>\nIt’s a dating sim/visual novel where you play as the only human girl that attends a school full of talking, intelligent pigeons; pigeons that you become romantically interested in. You may have heard of this game in certain internet circles because of its cult following, and its reputation is well deserved for being everything that it claims to be and more. Details will be spared to avoid revealing anything further but suffice to say, this would make for one hell of a reverse harem anime; kind of like <a href=\"https://myanimelist.net/anime/853/Ouran_Koukou_Host_Club\"><em>Ouran High School Host Club</em></a>…but with a lot of birds. Better yet, if a company chose to adapt the alternate reality side story of \"Bad Boys Love\", it would make for a completely different genre experience utilizing the same cast. Even though Hatoful was spun off a successful web series, it’s still based in visual novel format and tells a different story altogether, meaning there’s still plenty of room for this novel to 'take flight' as an animated feature. And no, I’m not sorry for that pun. I know I should be, but I’m not.</p>","markdown":"It’s no secret that there’s been a long history between visual novels and anime. A great number of renowned anime have been derived from visual novels and in turn a great number of anime have been turned into visual novels. [_Fate/stay Night_](https://myanimelist.net/anime/356/Fate_stay_night) originally began life as a visual novel in 2004 before turning into multiple anime series starting in 2006. [_Higurashi no Naku Koro ni_](https://myanimelist.net/anime/934/Higurashi_no_Naku_Koro_ni), [_Stein;s Gate_](https://myanimelist.net/anime/9253/Steins_Gate), the [_Hakuoki_](https://myanimelist.net/anime/6895/Hakuouki) series, [_Clannad_](https://myanimelist.net/anime/2167/Clannad) - all of them are based on visual novels.  \n  \nFor many years the phenomenon of this style of gaming had been mostly concentrated to Japan. American and European gamers had text based RPG and adventure games in the 1980’s, but a mass market game in which reading and choosing multiple, branching, paths made up the bulk of the action hadn’t taken hold. Much of this changed in 2005 when Capcom released _Phoenix Wright: Ace Attorney_ for the Nintendo DS, otherwise known as _Gyakuten Saiban_ in Japan. The courtroom logic puzzles combined with a point-and-click style of gameplay made for a unique kind of game that the DS seemed tailor made for.  \n  \nAs bad as it is that it took so long (15 years since it first premiered in Japan on the Game Boy Advance) for _Ace Attorney_ to get an [anime adaptation](https://myanimelist.net/anime/31630/Gyakuten_Saiban__Sono_Shinjitsu_Igi_Ari), at least it finally got one! There are other, less fortunate visual novels still waiting to emerge from the virtual page and into the realm of fully rendered animation. So here are 10 visual novels (across 7 different game series) just waiting to make the jump from game to anime.  \n  \n\n* * *\n\n## _Hotel Dusk: Room 215 and Last Window: The Secret of Cape West_\n\n* * *\n\n![Hotel Dusk](https://cdn.myanimelist.net/s/common/uploaded_files/1473402878-25ce9e16d34eca3401a1e0fa5f256142.jpeg)  \nFormer detective Kyle Hyde is a man with a past. That might seem like a typical description of a man in a detective drama, and so is the idea of him looking for his missing partner. But the hotel he’s arrived in is anything but typical. In the events of _Hotel Dusk: Room 215_, not only is Kyle told that his room, 215, is able to grant wishes, but he also begins to discover that the building has a staggering amount of connections to a past that he’s been trying to escape. Between Hyde himself and the intriguingly varied cast of characters staying at the hotel, there’s enough depth and mystery to not only make for a great game, but also make for a great anime series.  \n  \n\n![Lost Window](https://cdn.myanimelist.net/s/common/uploaded_files/1473402871-6568f679df6a7ec87518319d9d76398d.jpeg)  \nHyde’s adventures continued in the sequel, _Last Window: The Secret of Cape West_. With a plot that’s not directly connected to Hotel Dusk, Hyde stumbles upon a unique mystery within the Cape West Apartments complex. The building is due to be demolished, but secrets lay within it that are connected to the deaths of two people from decades past, and a mysterious object called the Scarlet Star. Like the hotel from his previous adventure, Hyde finds the apartments are filled with all sorts of people with their own unique personalities and eccentricities. How much they know of the past and how closely they’re connected to the events surrounding the Scarlet Star are just another element of the mystery behind this case that Hyde never anticipated would come into his life.  \n  \nBoth games employ a unique graphical style through the use of animated rotoscoping. Normally it’s a technique used in live action to give things an animated appearance, here it’s used on black and white character sprites against full colored backgrounds. If an anime adaptation were made, carrying over this graphical approach could make for a uniquely stylized series that sets itself apart from others with its look, as well as with its story.\n\n  \n\n* * *\n\n## _Radical Dreamers_\n\n* * *\n\n![Radical Dreamers](https://cdn.myanimelist.net/s/common/uploaded_files/1473402864-1bfc45b28bc2bd3ba545e28939e571d5.jpeg)  \nThis 1996 visual novel is the oft forgotten, original sequel to _Chrono Trigger_. It was released only in Japan for the Super Famicom (the Japanese equivalent of the Super Nintendo) It wasn’t a retail game, but a downloadable Satellaview title that gamers could essentially download into a specialized cartridge through a satellite link.  \n  \nThe game features the characters of Serge, Kid, and Gil as they infiltrate the Viper Manor in search of a treasure known as the Frozen Flame. Unfortunately, Viper Manor is also home to a devastatingly powerful and cruel man known as Lynx, who seized the manor by force some time ago.  \n  \nIf some of these things sound familiar it’s because elements of the plot were recycled for the game _Chrono Cross_, with some of the background music being ported over as well. Chrono series director Masato Kato was unhappy with how _Radical Dreamers_ turned out and saw _Chrono Cross_ as the true sequel he wanted to make, though _Radical Dreamers_ still exists as canon in that its events are an alternate reality.  \n  \nTechnically, there was a Chrono Trigger anime project in the form of [_Jikuu Bouken Nuumamonjaa_](https://myanimelist.net/anime/1751/Jikuu_Bouken_Nuumamonjaa), an OVA short from 1996, but the events of it are completely separate from the games. _Chrono Trigger_ still has an avid fan base, and the only American fans who have had any exposure to _Radical Dreamers_ would be those who obtained a ROM of it online. Even if its story is relegated to taking place in an alternate dimension, it would still provide an interesting place to revisit in the _Chrono_ series, and give fans a proper animated feature to compliment the franchise.\n\n  \n\n* * *\n\n## _Policenauts_\n\n* * *\n\n![Policenauts](https://cdn.myanimelist.net/s/common/uploaded_files/1473402885-a1d6b66121426eb021828cfe7cfa7430.jpeg)  \nThe name Hideo Kojima is largely associated with the _Metal Gear_ franchise of video games, and for good reason considering how popular and well received the games are by fans and critics alike. But in 1994, two years before _Metal Gear Solid_, Kojima released the visual novel game _Policenauts_. The game focuses on detective Jonathan Ingram, a former astronaut and police officer who was lost in space for 24 years but managed to survive in cold sleep and eventually was rescued. Now back in society as a private investigator, he’s taken aback to find out that his ex-wife wants to hire him to investigate the sudden disappearance of her current husband. Ingram recruits the assistance of his former partner, Ed Brown, and set off to discover a case filled with all the twists, turns, danger, and intrigue that one would expect from a Kojima written story.  \n  \n_Policenauts_ was never released outside of Japan even though fan translation projects have been around for years. The game itself went through numerous console ports and the increasingly powerful technology over the years allowed for the game to receive large amounts of fully animated and voiced cut scenes. It would be a natural fit for an anime adaptation considering how the game itself is almost an interactive anime project as it is. The science-fiction/film noir setting has proven successful in the years since _Policenauts_ was originally released and the subject matter would be just as timely and enjoyable to watch today as it was back in 1994.\n\n  \n\n* * *\n\n## _Theresia_\n\n* * *\n\n![Theresia](https://cdn.myanimelist.net/s/common/uploaded_files/1473402858-0384f75f890d3f7feca105fd765b1af0.jpeg)  \nLeanne wakes up to find herself in an odd, terrifying dungeon, with no memories of herself and a paper with the name, “Theresia” written on it. This psychological horror visual novel doesn’t give its reader/player much more than that upon entering into its world, and the  \ndevelopments of its rich, twisted, grim backstory are revealed primarily in flashbacks. Leanne is alone in her journey through the desolate, decaying area in which she finds herself; her only company being the omnipresence of death in the form of deadly traps scattered everywhere.  \n  \n_Theresia_ actually consists of two stories: \"Dear Emile\" and \"Dear Martel\"; both tales are set within the same universe, but at different points in the story's timeline. An anime series could easily use both of these sections of the game to create a unified narrative - it would make for a wonderful addition to the horror genre thanks to its completely unsettling atmosphere, psychologically tormented characters, and underlying elements that are not so removed from the scope of realism. Though the game consists primarily of visual novel elements to tell its story, there's a lot of point and click adventure elements mixed with survival horror interspersed between the novel segments. Considering how difficult these can be, it can be a bit of a hindrance to enjoying the story. An anime adaptation would eliminate this potential barrier of entry to the plot while still keeping the horror elements alive and well.\n\n  \n\n* * *\n\n## _Ever 17_\n\n* * *\n\n![Ever 17](https://cdn.myanimelist.net/s/common/uploaded_files/1473402842-26fa1378af49214842bdddf6d8b0e1fb.jpeg)  \nAmusement parks are fun, right? “Amusement” is literally half of the word. Now imagine it’s an amusement park built underwater so you can really enjoy the splendor of the aquatic life around you. What could possibly ruin that sense of fun and wonder? Well if you said “a leak,” then you’d be correct. The story of Ever 17 takes place from the points of view of several visitors to the LeMU amusement park as it beings to leak, flood, and succumb to the intense water pressure that’s building up outside of it. There’s a lot more to the story than simply trying to escape from a potential watery grave; LeMU is more than just an amusement park and numerous secrets lay figuratively and literally in its depths.  \n  \nThe story quickly gets very complicated and finding the path to the novel’s true ending involves going down dead end routes, discovering new information, and using said information to change the course of events. An animated adaptation of this could sequentially go down each character’s path and in the final episodes tie everything together, similarly to how the novel does it. It’s a story that dabbles in science-fiction, romance, and tragedy that is just begging to be experienced. The game has also spawned a number of spiritual sequels that could also receive an anime treatment, but _Ever 17_ stands out as the finest in the series with an engaging story that could be viewed just as easily as it can be read and played.\n\n  \n\n* * *\n\n## _Zero Escape Trilogy_\n\n* * *\n\n![999](https://cdn.myanimelist.net/s/common/uploaded_files/1473402827-784507adab2c9d658946f002799a42a0.jpeg)  \nHere’s the big one. If there was ever a visual novel series that needs to be adapted into an anime, this is the one. Considering that as of 2016 it’s now a trilogy, there’s even more incentive to turn these stories into the full, incredible narratives that they deserve to be. The first game in the series, _Nine Hours, Nine Persons, Nine Doors_, sees nine people trapped in a slowly sinking cruise liner that has been modified with special locks, doors, and puzzles that they need to solve in order to escape.  \n  \nAll of them were kidnapped by a mysterious masked figure calling himself “Zero,” and tells them over the ship’s loudspeaker that if they want to escape, they must find a door labeled “9.” If they want to get to the door alive however, they have to play the “Nonary Game.” While all the rules aren’t revealed to them from the start, it’s made clear that failure to play by the rules will result in death. You play as a young man named Junpei as you make decisions about who to team with, where to go on the ship, and also try to solve the puzzles that come between you and your possible escape. The twists in the story come hard and heavy, ultimately leading to a satisfying conclusion if one takes the time to explore all the endings.  \n  \n\n![Virtue's Last Reward](https://cdn.myanimelist.net/s/common/uploaded_files/1473402821-7d14b1c6ab421482d08fd755de16ab71.jpeg)  \nThe series is continued in _Zero Escape: Virtue’s Last Reward_ which finds another set of characters, some of them returning from the previous story, similarly kidnapped and forced to play a version of the Nonary Game, this one being subtitled the Ambidex Edition. Along with solving puzzles and trying to escape through a door labeled “9,” the players in this game are also forced to cast votes that could result in the deaths of other players, or the potential for them to all escape alive…if they can all trust one another.  \n  \n\n![Zero Time Dilemma](https://cdn.myanimelist.net/s/common/uploaded_files/1473402813-72b4e1e3cb645df4a6fd674a71f23687.jpeg)  \nThe final title, _Zero Time Dilemma_, once again sees some returning characters and some new ones, kidnapped and forced to play a game to escape the bunker that they’re trapped in. Unlike the previous games though, this one is titled the “Decision Game” and there is no chance for everyone to survive. This go around, only three people will be permitted to leave the compound alive, as the way to open the exit requires the deaths of six people.  \n  \nThere’s a tremendous amount of material for an anime adaptation of this series to cover, but it’s definitely possible to do thanks to the trilogy of games actually telling a complete story and the characters having an anime inspired art design, especially in the first title. The puzzle sequences in the games don’t advance the plot much, meaning that these sections could easily be omitted or changed in order to tell a more cohesive story if turned into a series. Given how richly detailed the characters and their relationships are, _Zero Escape_ could prove to be a compelling psychological thriller of a series that truly gets its viewers invested in the survival of these trapped individuals.\n\n  \n\n* * *\n\n## _Hatoful Boyfriend_\n\n* * *\n\n![Hatoful Boyfriend](https://cdn.myanimelist.net/s/common/uploaded_files/1473402834-c26b2d263c2c575e8690df531c643c97.jpeg)  \nIt’s a dating sim/visual novel where you play as the only human girl that attends a school full of talking, intelligent pigeons; pigeons that you become romantically interested in. You may have heard of this game in certain internet circles because of its cult following, and its reputation is well deserved for being everything that it claims to be and more. Details will be spared to avoid revealing anything further but suffice to say, this would make for one hell of a reverse harem anime; kind of like [_Ouran High School Host Club_](https://myanimelist.net/anime/853/Ouran_Koukou_Host_Club)…but with a lot of birds. Better yet, if a company chose to adapt the alternate reality side story of \"Bad Boys Love\", it would make for a completely different genre experience utilizing the same cast. Even though Hatoful was spun off a successful web series, it’s still based in visual novel format and tells a different story altogether, meaning there’s still plenty of room for this novel to 'take flight' as an animated feature. And no, I’m not sorry for that pun. I know I should be, but I’m not."},"relations":{"anime":[{"mal_id":1751,"name":"Jikuu Bouken Nuumamonjaa","url":"https://myanimelist.net/anime/1751/Jikuu_Bouken_Nuumamonjaa"},{"mal_id":31630,"name":"Gyakuten Saiban: Sono \"Shinjitsu\", Igi Ari!","url":"https://myanimelist.net/anime/31630/Gyakuten_Saiban__Sono_Shinjitsu_Igi_Ari"}],"manga":[],"people":[],"characters":[]}}},"required":["data"]}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/articles/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/articles/1904"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/articles/1904"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/articles/1904"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Featured article with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/articles/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/articles/1904"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/articles/1904"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/articles/1904"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/articles/1904"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/articles/1904"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/articles/1904"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/articles/1904"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/articles/1904"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/articles/1904"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/articles/1904"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/articles/1904"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/articles/1904"}}}}}}},"operationId":"getArticlesById"}},"/stacks":{"get":{"summary":"Interest Stacks","tags":["Interest Stacks"],"description":"Search and browse the full interest stack catalogue with filters and sorting.\n\nInterest stacks are themed lists of anime or manga made by users.\n\n> SFW flags filter out interest stacks where non-sfw items are included.","parameters":[{"schema":{"type":"string","maxLength":300},"in":"query","name":"q","required":false,"description":"Search text. Returns stacks whose title or description contains it, ignoring case."},{"schema":{"type":"string","enum":["anime","manga"],"x-enumDescriptions":{}},"in":"query","name":"stack_type","required":false,"description":"Only stacks of anime or only stacks of manga.","examples":{"default":{"value":"anime","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler stacks (true = include, false = exclude, only = exclusive).  \nSpoiler stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"challenges","required":false,"description":"Filter challenge stacks (true = include, false = exclude, only = exclusive).  \nChallenge stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string","enum":["true","false","only",""]},"in":"query","name":"official","required":false,"description":"Filter official stacks (true = include, false = exclude, only = exclusive).  \nOfficial stacks are left out unless this is set or another of these three filters is `only`.","examples":{"default":{"value":"true","x-disabled":true}}},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."},{"schema":{"type":"string","enum":["created_at","restack_count"],"default":"created_at","x-enumDescriptions":{}},"in":"query","name":"order_by","required":false,"description":"Field to sort the results by.","examples":{"default":{"value":"created_at","x-disabled":true}}},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","x-enumDescriptions":{}},"in":"query","name":"sort","required":false,"description":"Sort direction: `asc` for ascending, `desc` for descending.","examples":{"default":{"value":"desc","x-disabled":true}}},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":20000},"in":"query","name":"page","required":false,"description":"Page number","examples":{"default":{"value":1,"x-disabled":true}}},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page","examples":{"default":{"value":25,"x-disabled":true}}}],"responses":{"200":{"description":"Successful response returning Interest Stacks.","content":{"application/json":{"schema":{"description":"Successful response returning Interest Stacks.","type":"object","required":["pagination","data"],"properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","properties":{"last_visible_page":{"type":"integer","description":"The highest page number available for this query"},"has_next_page":{"type":"boolean","description":"Whether there are more results on the next page"},"current_page":{"type":"integer","description":"The current page number requested"},"items":{"type":"object","description":"Detailed item pagination counts","properties":{"count":{"type":"integer","description":"Number of records returned on the current page"},"total":{"type":"integer","description":"Total number of matching records in the database"},"per_page":{"type":"integer","description":"Maximum number of records per page"}},"required":["count","total","per_page"]}},"required":["last_visible_page","has_next_page","current_page","items"]},"data":{"type":"array","items":{"type":"object","required":["mal_id","url","stack_type","title","description","author_username","author_url","is_official","is_challenge","is_spoiler","restack_count","entry_count","created_at"],"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"stack_type":{"type":"string","enum":["anime","manga"]},"title":{"type":"string"},"description":{"type":"string"},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"is_official":{"type":"boolean"},"is_challenge":{"type":"boolean"},"is_spoiler":{"type":"boolean"},"restack_count":{"type":"integer"},"entry_count":{"type":"integer"},"created_at":{"type":"string","format":"date-time","nullable":true}}}}},"example":{"pagination":{"last_visible_page":795,"has_next_page":true,"current_page":1,"items":{"count":25,"total":19854,"per_page":25}},"data":[{"mal_id":93790,"url":"https://myanimelist.net/stacks/93790","stack_type":"anime","title":"What the ?!#%","description":"Anime where odd things happen, and you can hardly guess what happens next because it's just... weird","author_username":"Spadookled","author_url":"https://myanimelist.net/profile/Spadookled","is_official":false,"is_challenge":false,"is_spoiler":false,"restack_count":1,"entry_count":12,"created_at":"2026-11-13T02:40:00+00:00"}]}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"querystring/limit must be <= 100","error":"Check the request parameters against the documentation and try again.","path":"/v1/stacks?limit=101"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/stacks"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/stacks"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/stacks"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/stacks"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/stacks"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/stacks"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/stacks"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/stacks"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/stacks"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/stacks"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/stacks"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/stacks"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/stacks"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/stacks"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/stacks"}}}}}}},"operationId":"getStacks"}},"/stacks/{id}":{"get":{"summary":"Interest Stack Details","tags":["Interest Stacks"],"description":"Get an interest stack by its ID.\n\n> SFW flags remove non-sfw items from the stack.","parameters":[{"schema":{"type":"integer"},"example":6512,"in":"path","name":"id","required":true,"description":"The MAL Interest Stack ID"},{"schema":{"type":"string"},"in":"query","name":"sfw","required":false,"description":"Filter adult content."},{"schema":{"type":"string"},"in":"query","name":"sfw-strict","required":false,"description":"Apply strict SFW filtering for adult content and Ecchi."}],"responses":{"200":{"description":"Successful response returning one complete Interest Stack.","content":{"application/json":{"schema":{"description":"Successful response returning one complete Interest Stack.","type":"object","required":["data"],"properties":{"data":{"type":"object","required":["mal_id","url","stack_type","title","description","author_username","author_url","is_official","is_challenge","is_spoiler","restack_count","entry_count","created_at","entries"],"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"stack_type":{"type":"string","enum":["anime","manga"]},"title":{"type":"string"},"description":{"type":"string"},"author_username":{"type":"string","nullable":true},"author_url":{"type":"string","nullable":true},"is_official":{"type":"boolean"},"is_challenge":{"type":"boolean"},"is_spoiler":{"type":"boolean"},"restack_count":{"type":"integer"},"entry_count":{"type":"integer"},"created_at":{"type":"string","format":"date-time","nullable":true},"entries":{"type":"array","items":{"type":"object","required":["position","mal_id","url","images","title","title_english","type","author_score","note"],"properties":{"position":{"type":"integer"},"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","required":["jpg","webp"],"properties":{"jpg":{"type":"object","required":["image_url","small_image_url","large_image_url"],"properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}},"webp":{"type":"object","required":["image_url","small_image_url","large_image_url"],"properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"},"large_image_url":{"type":"string"}}}}},"title":{"type":"string"},"title_english":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"episodes":{"type":"integer","nullable":true,"description":"Number of episodes. Anime stacks only."},"aired_from_year":{"type":"integer","nullable":true,"description":"Year the anime started airing. Anime stacks only."},"volumes":{"type":"integer","nullable":true,"description":"Number of volumes. Manga stacks only."},"published_from_year":{"type":"integer","nullable":true,"description":"Year the manga started publishing. Manga stacks only."},"author_score":{"type":"integer","nullable":true,"minimum":1,"maximum":10},"note":{"type":"string","nullable":true}}}}}}},"example":{"data":{"mal_id":6512,"url":"https://myanimelist.net/stacks/6512","stack_type":"anime","title":"A Summer Out of This World","description":"Anime reminiscent of summer with supernatural elements.\n\nSummer 2022 Official Challenge Stack\n---\nTo get the limited-time badge:\n1. Click the Restack button\n2. Complete at least 1 anime you haven't watched OR re-watch an anime on this list by August 31!","author_username":"MyAnimeList","author_url":null,"is_official":true,"is_challenge":true,"is_spoiler":false,"restack_count":9456,"entry_count":48,"created_at":"2022-06-06T03:39:00+00:00","entries":[{"position":1,"mal_id":101,"url":"https://myanimelist.net/anime/101/Air","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1825/146531.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1825/146531t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1825/146531l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1825/146531.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1825/146531t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1825/146531l.webp"}},"title":"Air","title_english":"Air","type":"TV","author_score":null,"note":null,"episodes":12,"aired_from_year":2005},{"position":2,"mal_id":9989,"url":"https://myanimelist.net/anime/9989/Ano_Hi_Mita_Hana_no_Namae_wo_Bokutachi_wa_Mada_Shiranai","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/5/79697.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/5/79697t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/5/79697l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/5/79697.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/5/79697t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/5/79697l.webp"}},"title":"Ano Hi Mita Hana no Namae wo Bokutachi wa Mada Shiranai.","title_english":"Anohana: The Flower We Saw That Day","type":"TV","author_score":null,"note":null,"episodes":11,"aired_from_year":2011}]}}}}}},"304":{"description":"Not Modified - the response has not changed since the ETag sent in If-None-Match","headers":{"ETag":{"description":"Identifies this version of the response. Send it in If-None-Match to check whether it has changed.","schema":{"type":"string"}}}},"400":{"description":"Bad Request - Invalid parameters or request body","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[400]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"invalidParameter":{"summary":"Invalid parameter","value":{"status":400,"type":"BadRequestException","message":"Invalid integer path parameter.","error":"The requested path parameter is invalid.","path":"/v1/stacks/abc"}},"nginx":{"summary":"Nginx ingress response","value":{"status":400,"type":"BadRequestException","message":"Bad request.","error":"The request is malformed or not shaped like a supported Tenrai API request.","path":"/v1/stacks/6512"}}}}}},"401":{"description":"Unauthorized - the supplied X-Server-Key is invalid; restricted endpoints also require a Server Key","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[401]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":401,"type":"UnauthorizedException","message":"Invalid API key.","error":"The provided API key is not recognized. Please check your X-Server-Key header.","path":"/v1/stacks/6512"}}}}}},"403":{"description":"Forbidden - Nginx temporarily blocked the request","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[403]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":403,"type":"ForbiddenException","message":"Access temporarily blocked.","error":"This IP is temporarily blocked due to abusive request patterns.","path":"/v1/stacks/6512"}}}}}},"404":{"description":"Resource Not Found - The requested record does not exist","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[404]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"unknownId":{"summary":"Unknown ID","value":{"status":404,"type":"ResourceNotFoundException","message":"Interest Stack with ID 0 not found.","error":"The requested resource does not exist in our database or the ID is invalid.","path":"/v1/stacks/0"}},"nginx":{"summary":"Nginx ingress response","value":{"status":404,"type":"NotFoundException","message":"Route not found.","error":"The requested resource could not be found.","path":"/v1/stacks/6512"}}}}}},"405":{"description":"Method Not Allowed - only GET, HEAD, and OPTIONS are accepted","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[405]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":405,"type":"MethodNotAllowedException","message":"Method not allowed.","error":"This API only accepts GET, HEAD, and OPTIONS requests.","path":"/v1/stacks/6512"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"413":{"description":"Payload Too Large - this read-only API does not accept request bodies","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[413]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":413,"type":"PayloadTooLargeException","message":"Request body not accepted.","error":"This read-only API does not accept request bodies.","path":"/v1/stacks/6512"}}}}}},"414":{"description":"URI Too Long - the request URL is longer than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[414]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":414,"type":"UriTooLongException","message":"URI too long.","error":"The request URL is larger than this API accepts.","path":"/v1/stacks/6512"}}}}}},"429":{"description":"Rate Limit Exceeded - wait for the duration in Retry-After before retrying","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[429]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Second","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 4 requests/second limit for the 'public' tier.","path":"/v1/stacks/6512"}},"nginxMinute":{"summary":"Minute","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded.","error":"You have exceeded the 120 requests/minute limit for the 'public' tier.","path":"/v1/stacks/6512"}},"applicationServerPerSecond":{"summary":"Server Key","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-second).","error":"You have exceeded the 5 requests/second limit for the 'server' tier.","path":"/v1/stacks/6512"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"1"}}}},"431":{"description":"Request Header Fields Too Large - a request header is larger than the API accepts","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[431]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":431,"type":"RequestHeaderFieldsTooLargeException","message":"Request headers too large.","error":"One or more request headers are larger than this API accepts.","path":"/v1/stacks/6512"}}}}}},"500":{"description":"Internal Server Error - Something went wrong on our end","content":{"application/json":{"schema":{"description":"Internal Server Error - Something went wrong on our end","type":"object","properties":{"status":{"type":"integer","description":"The HTTP status code of the error.","example":500},"type":{"type":"string","description":"The type/class of the exception encountered.","example":"InternalServerErrorException"},"message":{"type":"string","description":"A message explaining the cause of the error.","example":"An internal server error occurred."},"error":{"type":"string","description":"An error details summary message.","example":"An unexpected error occurred."},"path":{"type":"string","description":"The requested path that triggered the error.","example":"/your/requested/path"}}}}}},"502":{"description":"Bad Gateway - the API gateway could not reach the upstream service","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[502]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":502,"type":"BadGatewayException","message":"Bad gateway.","error":"The API gateway could not reach the upstream service. Please try again shortly.","path":"/v1/stacks/6512"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"summary":"Rate-limit accounting unavailable","value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","error":"The request could not be checked against its rate limit. Please try again shortly.","path":"/v1/stacks/6512"}},"requestTimeout":{"summary":"Request or database ran out of time","value":{"status":503,"type":"ServiceUnavailableException","message":"Request timed out.","error":"The server took too long to process this request.","path":"/v1/stacks/6512"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","enum":["1"]}}}},"504":{"description":"Gateway Timeout - the upstream service did not respond in time","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","error","path"],"properties":{"status":{"type":"integer","enum":[504]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"nginx":{"summary":"Nginx ingress response","value":{"status":504,"type":"GatewayTimeoutException","message":"Gateway timeout.","error":"The API gateway did not receive a timely response from the upstream service. Please try again shortly.","path":"/v1/stacks/6512"}}}}}}},"operationId":"getStacksById"}}},"servers":[{"url":"https://api.tenrai.org/v1"}],"security":[{},{"serverKey":[]}],"tags":[{"name":"Anime","description":"The complete MAL anime catalog."},{"name":"Manga","description":"The complete MAL manga catalog."},{"name":"Characters","description":"Character profiles with biography, kanji name, nicknames, images, and full anime/manga appearance history with voice actors."},{"name":"People","description":"Voice actor and staff profiles including anime staff roles, manga authorship credits, and voice acting roles per character."},{"name":"Producers","description":"Anime producers and studios with full production history and anime counts."},{"name":"Seasons","description":"Anime listings organized by season and year, covering every season from 1917 through current and upcoming seasons."},{"name":"Schedules","description":"Broadcast schedules for anime."},{"name":"Top","description":"Top-ranked and most popular anime, manga, characters, and people."},{"name":"Genres","description":"Genre, theme, and demographic classifications for anime and manga, each with a total entry count."},{"name":"Magazines","description":"Manga serialization magazines and publishers with entry counts."},{"name":"Reviews","description":"Reviews for anime and manga."},{"name":"Recommendations","description":"Recommendations for anime & manga."},{"name":"News","description":"Browse and retrieve news articles."},{"name":"Articles","description":"Browse and retrieve featured articles."},{"name":"Random","description":"Returns a random resource with every request."},{"name":"Interest Stacks","description":"Browse and retrieve interest stacks with entries in source order."}],"externalDocs":{"url":"https://api.tenrai.org/llms.txt","description":"llms.txt"}}