{"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\nThis API was built to satisfy the need for a more complete API, which MyAnimeList currently lacks. \n\nImplemented endpoints follow the **Jikan v4 schema**, so existing applications can point requests at this API instead of or alongside Jikan with only a base URL update. Endpoints listed as unavailable below are not part of Tenrai's compatibility surface yet.\n\nPlease note that the API is in beta. There may be some issues and there will likely be some downtime here and there, but this is expected considering how new this is. Some areas may lack some polish, but we'll get to it! 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\nThis API does not have any user data endpoints. No club endpoints. No watch endpoints and no /userupdates for anime and manga. We may offer these endpoints in future, but for now we don't have them.\n\nWe have /forum for anime but not for manga as of right now. The /forum endpoint for anime uses same schema as Jikan, however we only support episode filtering, not all or other. So you can only get the episode threads.\n\nSo to clarify. /users, /watch and /clubs along with manga/forum,  /getanimeuserupdates and /getmangauserupdates are not currently available.\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 | 40,000 |\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. Subsequent requests resume automatically after the window resets.\n\nRate limits for public unauthenticated requests are enforced per unique IP address.\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\nServer Keys are not Bearer tokens for this API, so `Authorization: Bearer YOUR_SERVER_KEY` is not supported. Keep your Server Key in server-side code and do not expose it in browser or mobile client code.\n\n---\n\n## Server Keys\n\nServer Keys are private keys reserved for **[Patreon supporters](https://www.patreon.com/TenraiAPI)**. These keys offer significantly higher rate limits, making them ideal for large-scale data operations where you need to retrieve data at faster rates than the public API allows.\n\nAlthough referred to as \"Server Keys,\" these are standard API keys that can be used for any project, not just servers. Whether you are running local scripts, or building your own personal databases, they are compatible with any environment.\n\nPlease note that Server Key rate limits are enforced per unique key, not per IP. Consequently, they cannot be used in client-side applications like mobile apps to increase rate limits for your users.\n\nUsers accessing the API through a Server Key have quicker access to recent data than public API users as Server Keys have their own separate cache. All responses are stored there for 10 mins before re-queried.\n\n> You can obtain a free temporary Server Key through our [Discord](https://discord.gg/MQ3X3sjdgK) server.\n\n---\n\n## SFW Filtering\n\nSFW filtering is content-based. Two filter modes are supported across SFW-capable endpoints:\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\n---\n\n## Caching\n\nWe use a dynamic caching algorithm to manage data updates. Popular, currently airing, or newly released entries are updated more frequently, while older and less active titles are cached longer.\n\nKey metrics, such as scores, member statistics, and rankings are refreshed daily. Newly added MAL entries are typically indexed and available via the API within a few hours.\n\nBecause our caching system is complex and actively being optimized, you may occasionally encounter edge cases with stale data. If you notice any inconsistencies, please report them so we can make refinements.\n\n---\n\n## Version 2\n\nVersion 1 (v1) is only an interim version and is not the final intended version of this API. The goal of v1 is to act as a bridge between Tenrai and Jikan. Since there is no alternative to Jikan, we want to make sure there is one available. This means that v1 will not be perfectly polished, our goal is to try and transition from v1 to v2 as quickly as possible. \n\nVersion 2 will be the real, actual API we wish to build and release. It'll be a gigantic upgrade over anything currently available. \n\nWhenever v2 is available, there will be several months of notice before we eventually discontinue v1. \n\nFor updates, join our [Discord](https://discord.gg/MQ3X3sjdgK) server.\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<table class=\"error-responses-table\">\n  <thead>\n    <tr>\n      <th>Property</th>\n      <th>Remarks</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><code>status</code></td>\n      <td>HTTP status code returned for the request</td>\n    </tr>\n    <tr>\n      <td><code>type</code></td>\n      <td>Machine-readable error category</td>\n    </tr>\n    <tr>\n      <td><code>message</code></td>\n      <td>Human-readable explanation of what happened</td>\n    </tr>\n    <tr>\n      <td><code>error</code></td>\n      <td>Additional context or recovery guidance</td>\n    </tr>\n    <tr>\n      <td><code>path</code></td>\n      <td>Request path that produced the error</td>\n    </tr>\n  </tbody>\n</table>\n\n---\n\n## User Data\n\nThis API only deals with public catalogue data. It does not have any endpoints for user-specific data such as profiles, animelists, or mangalists. \n\nIf you need user data, then 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- Educational/Learning/University projects\n- Data Science/Research\n- Mobile apps/Desktop apps\n- Unofficial MAL clients/apps\n- Browser extensions/Browser scripts\n- Bots/Robots/Discord bots\n- Personal projects\n- Media server plugins/Metadata plugins\n\nAnd much much more...\n\nHowever, 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\nTo get in touch, we recommend you [Join our Discord server](https://discord.gg/MQ3X3sjdgK).\n\nIf it's a personal matter or you for any reason feel like you can't or don't want to take things in Discord, then you can send an email to [contact@tenrai.org](mailto:contact@tenrai.org). Please note though that we cannot guarantee a response, but we'll try our best!\n\nAny security related issues are to be sent to [security@tenrai.org](mailto:security@tenrai.org).\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.18","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 for anime with comprehensive filters.","parameters":[{"schema":{"type":"string","maxLength":200},"in":"query","name":"q","required":false,"description":"Title search query (fuzzy matched against English, Japanese, and default titles)"},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":1000},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type","required":false,"description":"Filter by media type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","complete","upcoming"]},"in":"query","name":"status","required":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Filter by rating. Multiple ratings can be selected.\n\nRating clarifications in order:\n\n* G - All Ages\n* PG - Children\n* PG-13 - Teens 13 or older\n* R - 17+ (violence & profanity)\n* R+ - Mild Nudity\n* Rx - Hentai","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",""]},"in":"query","name":"unapproved","required":false,"description":"Doesn't do anything, only present for Jikan compatibility."},{"schema":{"type":"number","minimum":1,"maximum":9.99},"in":"query","name":"score","required":false},{"schema":{"type":"number","minimum":0,"maximum":10},"in":"query","name":"min_score","required":false},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"max_score","required":false},{"schema":{"type":"string"},"in":"query","name":"genres","required":false,"description":"Comma separated IDs"},{"schema":{"type":"string"},"in":"query","name":"genres_exclude","required":false,"description":"Comma separated IDs"},{"schema":{"type":"string","enum":["mal_id","title","start_date","end_date","episodes","score","scored_by","rank","popularity","members","favorites"]},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","minLength":1,"maxLength":1},"in":"query","name":"letter","required":false},{"schema":{"type":"string"},"in":"query","name":"producers","required":false,"description":"Comma separated IDs"},{"schema":{"type":"string","format":"date"},"in":"query","name":"start_date","required":false},{"schema":{"type":"string","format":"date"},"in":"query","name":"end_date","required":false}],"responses":{"200":{"description":"Successful response returning matching anime series","content":{"application/json":{"schema":{"description":"Successful response returning matching anime series","type":"object","example":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":1,"total":1,"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/mqdefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"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":"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":1064240,"rank":48,"popularity":41,"members":2062287,"favorites":89864,"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...","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...","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":[]}]},"properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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)."}}}}},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":1,"total":1,"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/mqdefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"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":"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":1064240,"rank":48,"popularity":41,"members":2062287,"favorites":89864,"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...","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...","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":[]}}}}}},"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"}}}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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/deleted":{"get":{"summary":"Anime Deleted","tags":["Anime"],"description":"Get paginated deleted anime entries.","parameters":[{"schema":{"type":"integer","default":1,"minimum":1,"maximum":1000},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["mal_id","title","score","members"]},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"in":"query","name":"sort","required":false}],"responses":{"200":{"description":"Successful response returning deleted anime entries","content":{"application/json":{"schema":{"description":"Successful response returning deleted anime entries","example":{"pagination":{"last_visible_page":1,"has_next_page":false,"current_page":1,"items":{"count":1,"total":1,"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/mqdefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"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":"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":1064240,"rank":48,"popularity":41,"members":2062287,"favorites":89864,"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...","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...","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":[]}]},"type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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)."}}}}},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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/{id}":{"get":{"summary":"Anime Details","tags":["Anime"],"description":"Get details 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 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.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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/mqdefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26818,"likes":848,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32.000Z","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":1064240,"rank":48,"popularity":41,"members":2062287,"favorites":89864,"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...","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...","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"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full detailed data for an anime","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}}}}}}}},"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}}}},"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/mqdefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26818,"likes":848,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32.000Z","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":1064240,"rank":48,"popularity":41,"members":2062287,"favorites":89864,"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...","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...","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/2/252295.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/2/252295.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.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/2/252295.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/2/252295.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.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/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"}}},{"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/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"}}}]}],"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)"]},"external":[{"name":"Official Site","url":"http://www.cowboy-bebop.net/"},{"name":"AniDB","url":"https://anidb.net/perl-bin/animedb.pl?show=anime&aid=23"}],"streaming":[{"name":"Crunchyroll","url":"http://www.crunchyroll.com/series-271225"},{"name":"Netflix","url":"https://www.netflix.com/title/80001305"}],"moreinfo":"Suggested Order of Viewing 1. TV Series (26 episodes) 2. Movie (takes place between episodes 22 and 23)"}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 recommendations for an anime","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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":38}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 character list and voice actors 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 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"}}},"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"},"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":2299,"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":2244},"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"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 staff 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 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","nullable":true}}}}},"name":{"type":"string"}}},"positions":{"type":"array","items":{"type":"string"}}}}}},"example":{"data":[{"person":{"mal_id":203,"url":"https://myanimelist.net/people/203/Justin_Cook","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/80501.jpg"}},"name":"Cook, Justin"},"positions":["Producer"]}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 episodes for an anime","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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"}}},"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},"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.33,"filler":false,"recap":false,"synopsis":"Bounty hunters Spike Spiegel and Jet Black head to the Tijuana asteroid colony to track down Asimov Solensan, a syndicate member who stole a cache of the dangerous combat drug Bloody Eye.","replies":247,"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"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 a list of news articles related to the anime entry","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"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},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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"}}},"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-10T06: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"}},"comments":0,"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"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 related to the anime","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"responses":{"200":{"description":"Successful response returning anime featured articles","content":{"application/json":{"schema":{"description":"Successful response returning anime featured articles","type":"object","example":{"pagination":{"last_visible_page":1,"has_next_page":false},"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.000+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..."}]},"properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}}},"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"}}}}},"required":["data","pagination"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 forum topics related to the anime entry. Episode discussion threads only!\n\nYou can use the official MAL API to fetch the individual threads themselves using the thread mal_id.","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","enum":["episode_number","created_on","comment_count","last_post"],"default":"episode_number"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sort","required":false,"description":"Defaults to asc for episode_number, desc for dates/counts"},{"schema":{"type":"string","enum":["episode"],"default":"episode"},"in":"query","name":"filter","required":false},{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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"}}},"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"},"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":67744,"url":"https://myanimelist.net/forum/?topicid=67744","title":"Zipang Episode 26 Discussion","date":"2009-02-14T00:00:00+00:00","author_username":"ballistique","author_url":"https://myanimelist.net/profile/ballistique","comments":25,"last_comment":{"url":"https://myanimelist.net/forum/?topicid=67744","author_username":"RKASHYAP621","author_url":"https://myanimelist.net/profile/RKASHYAP621","date":"2026-02-17T14:15:00+00:00"}}]},"required":["data","pagination"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 detail for a specific anime episode","parameters":[{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"},{"schema":{"type":"integer","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},"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","duration":1440,"aired":"1998-10-24T00:00:00+00:00","filler":false,"recap":false,"synopsis":"Bounty hunters Spike Spiegel and Jet Black head to the Tijuana asteroid colony to track down Asimov Solensan, a syndicate member who stole a cache of the dangerous combat drug Bloody Eye.","replies":247,"images":{"jpg":{"image_url":"https://img1.ak.crunchyroll.com/i/spire2-tmb/e3a45e86c597fe16f02d29efcadedcd81473268732_large.jpg"}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 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","additionalProperties":true,"nullable":true},"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","additionalProperties":true,"nullable":true},"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-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/mqdefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26818,"likes":848,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32.000Z","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"}}}],"music_videos":[]}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 episode videos for an anime","parameters":[{"schema":{"type":"integer","default":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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"}}},"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"}}}}}}}}},"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"}}}]},"required":["data","pagination"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 pictures 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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}}}},"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"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 statistics 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":189894,"completed":1197889,"on_hold":116790,"dropped":49531,"plan_to_watch":508053,"total":2062157,"scores":[{"score":10,"votes":368094,"percentage":34.6},{"score":9,"votes":300177,"percentage":28.2},{"score":8,"votes":226078,"percentage":21.2}]}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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}/moreinfo":{"get":{"summary":"Anime More Info","tags":["Anime"],"description":"Get more information 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 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 1. TV Series (26 episodes) 2. Movie (takes place between episodes 22 and 23)"}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 relations for an anime","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}}}}}}}}},"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/2/252295.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/2/252295.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.webp"}}}]}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 opening and ending themes 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 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)"]}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 external links 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 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/"}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 streaming links 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 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":"http://www.crunchyroll.com/series-271225"}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 reviews for an anime","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"most_helpful"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"]},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment"},{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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"}}},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","additionalProperties":true},"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","additionalProperties":true}}}}}}},"example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":7406,"url":"https://myanimelist.net/reviews.php?id=7406","type":"anime","reactions":{"overall":2283,"nice":2226,"love_it":25,"funny":7,"confusing":2,"informative":7,"well_written":15,"creative":1},"date":"2008-08-24T05: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...","score":10,"tags":["Recommended"],"is_spoiler":false,"is_preliminary":false,"episodes_watched":26,"user":{"url":"https://myanimelist.net/profile/TheLlama","username":"TheLlama","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/userimages/35fb5f95-6a86-498b-93a5-fcff7f402bc2_225w?s=0a831e2782dd9f3d15a987a6c3b6a9db"}}}}]},"required":["data","pagination"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 all public interest stacks for an anime","parameters":[{"schema":{"type":"string","maxLength":200},"in":"query","name":"q","required":false},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":1000},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["created_at","restack_count"],"default":"created_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler stacks (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"challenges","required":false,"description":"Filter challenge stacks (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"official","required":false,"description":"Filter official stacks (true = include, false = exclude, only = exclusive)"},{"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"},"example":1,"in":"path","name":"id","required":true,"description":"The MAL Anime ID"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"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":27,"has_next_page":true,"current_page":1,"items":{"count":2,"total":662,"per_page":25}},"data":[{"mal_id":89234,"url":"https://myanimelist.net/stacks/89234","stack_type":"anime","title":"The Ultimate Guide to Sci-Fi Anime","description":"","author_username":"xAutisticKidx","author_url":"https://myanimelist.net/profile/xAutisticKidx","is_official":false,"is_challenge":false,"is_spoiler":false,"restack_count":2,"entry_count":50,"created_at":"2026-08-11T08:13:00.000Z"},{"mal_id":89060,"url":"https://myanimelist.net/stacks/89060","stack_type":"anime","title":"Mecha anime Featured in the Iron Saga Games","description":"Iron Saga is a Chinese mobile mecha RPG that has a roster of original mechs and characters with their own stories and many guest mechs from various anime. Iron Saga also has a 2d fighting spinoff called Iron Saga VS. This stack lists the anime mechs that are part of the original mobile game and its spinoff's roster.","author_username":"GreatTeacherKen","author_url":"https://myanimelist.net/profile/GreatTeacherKen","is_official":false,"is_challenge":false,"is_spoiler":false,"restack_count":2,"entry_count":22,"created_at":"2026-08-08T12:57:00.000Z"}]}}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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/ids":{"get":{"summary":"Get All Anime IDs","tags":["Anime"],"description":"Retrieve all unique MAL anime IDs of approved entries that currently exist and are active","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":"Filter by media type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","complete","upcoming"]},"in":"query","name":"status","required":false,"description":"Filter by airing status"},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Filter by rating. Multiple ratings can be selected.\n\nRating clarifications in order:\n\n* G - All Ages\n* PG - Children\n* PG-13 - Teens 13 or older\n* R - 17+ (violence & profanity)\n* R+ - Mild Nudity\n* Rx - Hentai","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"},"in":"query","name":"include","required":false,"description":"Comma-separated fields to include per entry. Allowed: title, type"},{"schema":{"type":"string"},"in":"query","name":"updated_at","required":false,"description":"Filter entries updated on or after this ISO 8601 date-time or Unix timestamp. This is as updated on site, not API. May or may not be fully accurate."}],"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","example":{"total":30196,"data":[1,5,6,7,8,15,16,17,18,19,20,21,22,23,24,25,26,27]},"properties":{"total":{"type":"integer"},"data":{"type":"array","items":{"oneOf":[{"type":"integer"},{"type":"object","properties":{"mal_id":{"type":"integer"},"title":{"type":"string"},"type":{"type":"string"}}}]}}},"required":["data"]}}}},"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":"An unexpected error occurred.","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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 for manga with comprehensive filters.","parameters":[{"schema":{"type":"string","maxLength":200},"in":"query","name":"q","required":false,"description":"Title search query"},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":1000},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Filter by manga type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"string","enum":["publishing","complete","upcoming","discontinued","hiatus"]},"in":"query","name":"status","required":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":"number","minimum":1,"maximum":9.99},"in":"query","name":"score","required":false},{"schema":{"type":"number","minimum":0,"maximum":10},"in":"query","name":"min_score","required":false},{"schema":{"type":"number","minimum":1,"maximum":10},"in":"query","name":"max_score","required":false},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"unapproved","required":false,"description":"Doesn't do anything, only present for Jikan compatibility."},{"schema":{"type":"string"},"in":"query","name":"genres","required":false,"description":"Comma separated IDs"},{"schema":{"type":"string"},"in":"query","name":"genres_exclude","required":false,"description":"Comma separated IDs"},{"schema":{"type":"string","enum":["mal_id","title","start_date","end_date","chapters","volumes","score","scored_by","rank","popularity","members","favorites"]},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","minLength":1,"maxLength":1},"in":"query","name":"letter","required":false},{"schema":{"type":"string"},"in":"query","name":"magazines","required":false,"description":"Comma separated IDs"},{"schema":{"type":"string","format":"date"},"in":"query","name":"start_date","required":false},{"schema":{"type":"string","format":"date"},"in":"query","name":"end_date","required":false}],"responses":{"200":{"description":"Successful response returning matching manga","content":{"application/json":{"schema":{"description":"Successful response returning matching manga","type":"object","example":{"pagination":{"last_visible_page":6,"has_next_page":true,"current_page":1,"items":{"count":1,"total":133,"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":117158,"rank":6,"popularity":27,"members":290591,"favorites":23835,"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...","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...","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"}]}]},"properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","example":{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":[],"type":"Manga","chapters":364,"volumes":41,"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 Present"},"score":9.47,"scored_by":320000,"rank":1,"popularity":2,"members":640000,"favorites":120000,"synopsis":"Guts, a former mercenary now known as the 'Black Swordsman,' is out for revenge.","background":"Berserk won the Award for Excellence at the sixth installment of the Tezuka Osamu Cultural Prize in 2002.","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"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","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 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","description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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)."}}}}},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":6,"has_next_page":true,"current_page":1,"items":{"count":1,"total":133,"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":117158,"rank":6,"popularity":27,"members":290591,"favorites":23835,"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...","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...","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":[]}}}}}},"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"}}}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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/deleted":{"get":{"summary":"Manga Deleted","tags":["Manga"],"description":"Get paginated deleted manga entries.","parameters":[{"schema":{"type":"integer","default":1,"minimum":1,"maximum":1000},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["mal_id","title","score","members"]},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"in":"query","name":"sort","required":false}],"responses":{"200":{"description":"Successful response returning deleted manga entries","content":{"application/json":{"schema":{"description":"Successful response returning deleted manga entries","example":{"pagination":{"last_visible_page":6,"has_next_page":true,"current_page":1,"items":{"count":1,"total":133,"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":117158,"rank":6,"popularity":27,"members":290591,"favorites":23835,"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...","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...","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"}]}]},"type":"object","properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","example":{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":[],"type":"Manga","chapters":364,"volumes":41,"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 Present"},"score":9.47,"scored_by":320000,"rank":1,"popularity":2,"members":640000,"favorites":120000,"synopsis":"Guts, a former mercenary now known as the 'Black Swordsman,' is out for revenge.","background":"Berserk won the Award for Excellence at the sixth installment of the Tezuka Osamu Cultural Prize in 2002.","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"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","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 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","description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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)."}}}}},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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/{id}":{"get":{"summary":"Manga Details","tags":["Manga"],"description":"Get details 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 details","content":{"application/json":{"schema":{"description":"Successful response returning manga details","type":"object","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":117158,"rank":6,"popularity":27,"members":290591,"favorites":23835,"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...","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...","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"}]}},"properties":{"data":{"type":"object","description":"Core schema representing a manga series with its main metadata.","example":{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":[],"type":"Manga","chapters":364,"volumes":41,"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 Present"},"score":9.47,"scored_by":320000,"rank":1,"popularity":2,"members":640000,"favorites":120000,"synopsis":"Guts, a former mercenary now known as the 'Black Swordsman,' is out for revenge.","background":"Berserk won the Award for Excellence at the sixth installment of the Tezuka Osamu Cultural Prize in 2002.","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"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","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 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","description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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)."}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full detailed data for a manga","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning full manga details","content":{"application/json":{"schema":{"description":"Successful response returning full manga details","type":"object","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":117158,"rank":6,"popularity":27,"members":290591,"favorites":23835,"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...","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...","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"}],"moreinfo":"Monster is Naoki Urasawa's breakthrough work...","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/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"}}}]},{"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":"Novel","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/2/252295.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/2/252295.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/2/252295t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/2/252295l.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)"}]}},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","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 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","description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}}}}}}}},"external":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"moreinfo":{"type":"string","nullable":true}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 recommendations for a manga","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga recommendations","content":{"application/json":{"schema":{"description":"Successful response returning manga recommendations","type":"object","example":{"data":[{"entry":{"mal_id":21,"url":"https://myanimelist.net/manga/21/Death_Note","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"}},"title":"Death Note"},"url":"https://myanimelist.net/recommendations/manga/1-21","votes":12}]},"properties":{"data":{"type":"array","items":{"type":"object","properties":{"entry":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","additionalProperties":true},"title":{"type":"string"}}},"url":{"type":"string"},"votes":{"type":"integer"}}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 characters 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 characters","content":{"application/json":{"schema":{"description":"Successful response returning manga characters","type":"object","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","large_image_url":"https://cdn.myanimelist.net/images/characters/11/286916l.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","large_image_url":"https://cdn.myanimelist.net/images/characters/11/286916l.webp"}},"name":"Liebert, Anna"},"role":"Main","favorites":100},{"character":{"mal_id":719,"url":"https://myanimelist.net/character/719/Johan_Liebert","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/4/316522.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/4/316522t.jpg","large_image_url":"https://cdn.myanimelist.net/images/characters/4/316522l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/4/316522.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/4/316522t.webp","large_image_url":"https://cdn.myanimelist.net/images/characters/4/316522l.webp"}},"name":"Liebert, Johan"},"role":"Main"}]},"properties":{"data":{"type":"array","items":{"type":"object","properties":{"character":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","additionalProperties":true},"name":{"type":"string"}}},"role":{"type":"string"},"favorites":{"type":"integer"}}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 articles related to the manga entry","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"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},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga news","content":{"application/json":{"schema":{"description":"Successful response returning manga news","type":"object","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..."}]},"properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}}},"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","additionalProperties":true},"comments":{"type":"integer"},"excerpt":{"type":"string"}}}}},"required":["data","pagination"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 related to the manga","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga featured articles","content":{"application/json":{"schema":{"description":"Successful response returning manga featured articles","type":"object","example":{"pagination":{"last_visible_page":1,"has_next_page":false},"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.000+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..."}]},"properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}}},"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"}}}}},"required":["data","pagination"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 pictures 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","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"}}]},"properties":{"data":{"type":"array","items":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 statistics 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","example":{"data":{"reading":41776,"completed":120557,"on_hold":10698,"dropped":3399,"plan_to_read":114066,"total":290496,"scores":[{"score":10,"votes":59375,"percentage":50.7},{"score":9,"votes":32977,"percentage":28.1},{"score":8,"votes":14859,"percentage":12.7}]}},"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"}}}}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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}/moreinfo":{"get":{"summary":"Manga More Info","tags":["Manga"],"description":"Get more info 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 more info","content":{"application/json":{"schema":{"description":"Successful response returning manga more info","type":"object","example":{"data":{"moreinfo":"Monster is Naoki Urasawa's breakthrough work..."}},"properties":{"data":{"type":"object","properties":{"moreinfo":{"type":"string","nullable":true}}}},"required":["data"]}}}},"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/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/manga/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/manga/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":{"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/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/1/moreinfo"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/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/1/moreinfo"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/manga/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/manga/1/moreinfo"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/moreinfo"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/manga/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/manga/1/moreinfo"}}}}}}},"operationId":"getMangaByIdMoreinfo"}},"/manga/{id}/relations":{"get":{"summary":"Manga Relations","tags":["Manga"],"description":"Get related entries for a manga","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga relations","content":{"application/json":{"schema":{"description":"Successful response returning manga relations","type":"object","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/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"}}}]}]},"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}}}}}}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 external links 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 external links","content":{"application/json":{"schema":{"description":"Successful response returning external links","type":"object","example":{"data":[{"name":"Wikipedia","url":"https://en.wikipedia.org/wiki/Monster_(manga)"}]},"properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 reviews for a manga","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"most_helpful"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"]},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment"},{"schema":{"type":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"responses":{"200":{"description":"Successful response returning manga reviews","content":{"application/json":{"schema":{"description":"Successful response returning manga reviews","type":"object","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-24T00:00:00+00:00","review":"I rarely give tens to mangas. But this one just deserves it! Why? I'm going to tell you: Monster isn't a traditional manga. It isn't about fighting. If you are looking for an intense, well-written manga, I would recommend this certainly for you...","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/images/userimages/BorisSoad.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/userimages/BorisSoad.webp"}}}}]},"properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}}},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","additionalProperties":true},"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","additionalProperties":true}}}}},"required":["data","pagination"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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}/stacks":{"get":{"summary":"Manga Stacks","tags":["Manga"],"description":"Get all public interest stacks for a manga","parameters":[{"schema":{"type":"string","maxLength":200},"in":"query","name":"q","required":false},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":1000},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["created_at","restack_count"],"default":"created_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler stacks (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"challenges","required":false,"description":"Filter challenge stacks (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"official","required":false,"description":"Filter official stacks (true = include, false = exclude, only = exclusive)"},{"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"},"example":1,"in":"path","name":"id","required":true,"description":"The MAL Manga ID"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"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":2,"total":141,"per_page":25}},"data":[{"mal_id":85123,"url":"https://myanimelist.net/stacks/85123","stack_type":"manga","title":"Psychological Gore kinda disturbing but interesting at the same time","description":"","author_username":"rrrrik","author_url":"https://myanimelist.net/profile/rrrrik","is_official":false,"is_challenge":false,"is_spoiler":false,"restack_count":12,"entry_count":14,"created_at":"2026-06-05T10:26:00.000Z"},{"mal_id":84806,"url":"https://myanimelist.net/stacks/84806","stack_type":"manga","title":"OOP manga from the 90s and 00s and 10s","description":"These are some of the manga that went out of print but started publishing in the 90s to early 10s, either in the Japanese publisher, the Canadian/American publisher, or the Spanish publisher.","author_username":"Lightning_art7","author_url":"https://myanimelist.net/profile/Lightning_art7","is_official":false,"is_challenge":false,"is_spoiler":false,"restack_count":8,"entry_count":37,"created_at":"2026-05-30T15:44:00.000Z"}]}}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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/ids":{"get":{"summary":"Get All Manga IDs","tags":["Manga"],"description":"Retrieve all unique MAL manga IDs of approved entries that currently exist and are active","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Filter by manga type. Multiple types can be selected.","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"},{"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"},"in":"query","name":"include","required":false,"description":"Comma-separated fields to include per entry. Allowed: title, type"},{"schema":{"type":"string"},"in":"query","name":"updated_at","required":false,"description":"Filter entries updated on or after this ISO 8601 date-time or Unix timestamp. This is as updated on site, not API. May or may not be fully accurate."}],"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","example":{"total":84073,"data":[1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20]},"properties":{"total":{"type":"integer"},"data":{"type":"array","items":{"oneOf":[{"type":"integer"},{"type":"object","properties":{"mal_id":{"type":"integer"},"title":{"type":"string"},"type":{"type":"string"}}}]}}},"required":["data"]}}}},"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":"An unexpected error occurred.","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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 for characters","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"The search query"},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["mal_id","name","favorites"]},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sort","required":false},{"schema":{"type":"string","maxLength":1},"in":"query","name":"letter","required":false}],"responses":{"200":{"description":"Successful response returning matching characters","content":{"application/json":{"schema":{"description":"Successful response returning matching characters","type":"object","example":{"pagination":{"last_visible_page":223116,"has_next_page":true,"current_page":1,"items":{"count":1,"total":223116,"per_page":1}},"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":"Lelouch Lamperouge","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":179417,"about":"Lelouch Lamperouge is the main protagonist of Code Geass: Lelouch of the Rebellion. He is the Eleventh Prince of the Holy Britannian Empire and the son of the 98th Emperor of Britannia, Charles zi Britannia. After receiving the power of Geass from C.C., he becomes the leader of the Black Knights under the alter ego Zero..."}]},"properties":{"pagination":{"type":"object","description":"Standard Jikan pagination metadata showing page count, total records, and navigation state.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"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","nullable":true},"small_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true}}}}},"name":{"type":"string"},"name_kanji":{"type":"string","nullable":true},"nicknames":{"type":"array","items":{"type":"string"}},"favorites":{"type":"integer"},"about":{"type":"string","nullable":true}}}}},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":223116,"has_next_page":true,"current_page":1,"items":{"count":1,"total":223116,"per_page":1}},"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":"Lelouch Lamperouge","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":179417,"about":"Lelouch Lamperouge is the main protagonist of Code Geass: Lelouch of the Rebellion. He is the Eleventh Prince of the Holy Britannian Empire and the son of the 98th Emperor of Britannia, Charles zi Britannia. After receiving the power of Geass from C.C., he becomes the leader of the Black Knights under the alter ego Zero..."}]}},"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":[]}}}}}},"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"}}}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 details 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 details","content":{"application/json":{"schema":{"description":"Successful response returning character details","type":"object","example":{"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":"Lelouch Lamperouge","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":179417,"about":"Lelouch Lamperouge is the main protagonist of Code Geass: Lelouch of the Rebellion. He is the Eleventh Prince of the Holy Britannian Empire and the son of the 98th Emperor of Britannia, Charles zi Britannia. After receiving the power of Geass from C.C., he becomes the leader of the Black Knights under the alter ego Zero..."}},"properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true}}}}},"name":{"type":"string"},"name_kanji":{"type":"string","nullable":true},"nicknames":{"type":"array","items":{"type":"string"}},"favorites":{"type":"integer"},"about":{"type":"string","nullable":true}}}},"additionalProperties":true,"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full details for a character","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"}],"responses":{"200":{"description":"Successful response returning full character details","content":{"application/json":{"schema":{"description":"Successful response returning full character details","type":"object","example":{"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"},"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":"Lelouch Lamperouge","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":179417,"about":"Lelouch Lamperouge is the main protagonist of Code Geass: Lelouch of the Rebellion. He is the Eleventh Prince of the Holy Britannian Empire and the son of the 98th Emperor of Britannia, Charles zi Britannia. After receiving the power of Geass from C.C., he becomes the leader of the Black Knights under the alter ego Zero...","anime":[{"role":"Main","anime":{"mal_id":1575,"url":"https://myanimelist.net/anime/1575/Code_Geass__Hangyaku_no_Lelouch","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1841/133742.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1841/133742.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742l.webp"}},"title":"Code Geass: Hangyaku no Lelouch"}}],"manga":[{"role":"Main","manga":{"mal_id":1528,"url":"https://myanimelist.net/manga/1528/Code_Geass__Hangyaku_no_Lelouch","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/259546.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/259546t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/259546l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/259546.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/259546t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/259546l.webp"}},"title":"Code Geass: Hangyaku no Lelouch"}}],"voices":[{"person":{"mal_id":86,"url":"https://myanimelist.net/people/86/Jun_Fukuyama","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/73507.jpg"}},"name":"Fukuyama, Jun"},"language":"Japanese"},{"person":{"mal_id":174,"url":"https://myanimelist.net/people/174/Johnny_Yong_Bosch","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/65842.jpg"}},"name":"Bosch, Johnny Yong"},"language":"English"}]}},"properties":{"data":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true}}}}},"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","nullable":true}}}}},"name":{"type":"string"}}},"language":{"type":"string"}}}}}}},"additionalProperties":true,"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 a list of anime the character has appeared in","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"}],"responses":{"200":{"description":"Successful response returning matching anime series","content":{"application/json":{"schema":{"description":"Successful response returning matching anime series","type":"object","example":{"data":[{"role":"Main","anime":{"mal_id":1575,"url":"https://myanimelist.net/anime/1575/Code_Geass__Hangyaku_no_Lelouch","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1841/133742.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1841/133742.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1841/133742l.webp"}},"title":"Code Geass: Hangyaku no Lelouch"}}]},"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}}}}}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 a list of manga the character has appeared in","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL Character ID"}],"responses":{"200":{"description":"Successful response returning matching manga series","content":{"application/json":{"schema":{"description":"Successful response returning matching manga series","type":"object","example":{"data":[{"role":"Main","manga":{"mal_id":1528,"url":"https://myanimelist.net/manga/1528/Code_Geass__Hangyaku_no_Lelouch","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/259546.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/259546t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/259546l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/259546.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/259546t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/259546l.webp"}},"title":"Code Geass: Hangyaku no Lelouch"}}]},"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}}}}}},"additionalProperties":true,"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 list of voice actors for the character","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","example":{"data":[{"language":"Japanese","person":{"mal_id":86,"url":"https://myanimelist.net/people/86/Jun_Fukuyama","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/73507.jpg"}},"name":"Fukuyama, Jun"}},{"language":"English","person":{"mal_id":174,"url":"https://myanimelist.net/people/174/Johnny_Yong_Bosch","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/65842.jpg"}},"name":"Bosch, Johnny Yong"}}]},"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","nullable":true}}}}},"name":{"type":"string"}}}}}}},"additionalProperties":true,"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 pictures for the 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","example":{"data":[{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/8/406163.jpg"}}]},"properties":{"data":{"type":"array","items":{"type":"object","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}}}},"additionalProperties":true,"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 related to the character","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"integer","default":17},"in":"path","name":"id","required":true,"description":"The MAL Character ID"}],"responses":{"200":{"description":"Successful response returning character featured articles","content":{"application/json":{"schema":{"description":"Successful response returning character featured articles","type":"object","example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":830,"url":"https://myanimelist.net/featured/830/Naruto_vs_Goku__Battle_of_the_Minds","title":"Naruto vs Goku: Battle of the Minds","summary":"Goku comes from a race of space warriors who place heavy emphasis on brute force. Naruto is the vessel for a dangerous demon...","published_at":"2015-11-13T01:38:00.000+00:00","author_username":"Cato5","author_url":"https://myanimelist.net/profile/Cato5","views":35271,"tags":["Spoiler","Analysis","Naruto","Dragon Ball"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1447400492-a85749b35fdce059186c20422a338b87.jpeg"}},"excerpt":"Goku comes from a race of space warriors who place heavy emphasis on brute force..."}]},"properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}}},"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"}}}}},"required":["data","pagination"]}}}},"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/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/characters/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/characters/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":{"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/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/1/articles"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/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/1/articles"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/characters/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/characters/1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/articles"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/characters/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/characters/1/articles"}}}}}}},"operationId":"getCharactersByIdArticles"}},"/characters/ids":{"get":{"summary":"Get All Character IDs","tags":["Characters"],"description":"Retrieve all unique MAL character IDs that currently exist and are active","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","example":{"data":[1,2,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,21]},"properties":{"data":{"type":"array","items":{"type":"integer"}}},"required":["data"]}}}},"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":"An unexpected error occurred.","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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 for people","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Search query"},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["mal_id","name","birthday","favorites"]},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sort","required":false},{"schema":{"type":"string","maxLength":1},"in":"query","name":"letter","required":false}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a person (voice actor, staff, or author).","example":{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."},"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","description":"Portrait JPG image URLs.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"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 date in ISO 8601 format."},"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":1985,"has_next_page":true,"current_page":1,"items":{"count":25,"total":49618,"per_page":25}},"data":[{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."}]},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":1985,"has_next_page":true,"current_page":1,"items":{"count":25,"total":49618,"per_page":25}},"data":[{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."}]}},"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":[]}}}}}},"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"}}}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 details 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 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).","example":{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."},"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","description":"Portrait JPG image URLs.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"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 date in ISO 8601 format."},"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":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full details for a person","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"}],"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","description":"Portrait JPG image URLs.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"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 date in ISO 8601 format."},"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","example":{"mal_id":38707,"url":"https://myanimelist.net/anime/38707/RobiHachi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"title":"RobiHachi"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}}}}},"manga":{"type":"array","items":{"type":"object","properties":{"position":{"type":"string"},"manga":{"type":"object","example":{"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"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}}}}},"voices":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string"},"anime":{"type":"object","example":{"mal_id":38707,"url":"https://myanimelist.net/anime/38707/RobiHachi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"title":"RobiHachi"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}},"character":{"type":"object","example":{"mal_id":11,"url":"https://myanimelist.net/character/11/Rei_Ayanami","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/11/564624.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/11/564624t.jpg","large_image_url":"https://cdn.myanimelist.net/images/characters/11/564624l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/11/564624.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/11/564624t.webp","large_image_url":"https://cdn.myanimelist.net/images/characters/11/564624l.webp"}},"name":"Ayanami, Rei"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"name":{"type":"string"}}}}}}}}},"example":{"data":{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production.","anime":[{"position":"Theme Song Performance","anime":{"mal_id":38234,"url":"https://myanimelist.net/anime/38234/Owarimonogatari_Second_Season","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/6/87322.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/6/87322t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/6/87322l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/6/87322.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/6/87322t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/6/87322l.webp"}},"title":"Owarimonogatari Second Season"}}],"manga":[],"voices":[{"role":"Main","anime":{"mal_id":5081,"url":"https://myanimelist.net/anime/5081/Bakemonogatari","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/11/75274.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/11/75274t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/11/75274l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/11/75274.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/11/75274t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/11/75274l.webp"}},"title":"Bakemonogatari"},"character":{"mal_id":22003,"url":"https://myanimelist.net/character/22003/Koyomi_Araragi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/9/72223.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/9/72223t.jpg","large_image_url":"https://cdn.myanimelist.net/images/characters/9/72223l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/9/72223.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/9/72223t.webp","large_image_url":"https://cdn.myanimelist.net/images/characters/9/72223l.webp"}},"name":"Araragi, Koyomi"}}]}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 all anime staff roles for a person","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"}],"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","example":{"mal_id":38707,"url":"https://myanimelist.net/anime/38707/RobiHachi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"title":"RobiHachi"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}}}}}},"example":{"data":[{"position":"Theme Song Performance (TV OP)","anime":{"mal_id":38707,"url":"https://myanimelist.net/anime/38707/RobiHachi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"title":"RobiHachi"}}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 all manga authorship roles for a person (author, illustrator, etc.)","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"}],"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","example":{"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"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}}}}}},"example":{"data":[{"position":"Story & Artist","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"]}}}},"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/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/people/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/people/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":{"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/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/1/manga"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/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/1/manga"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/people/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/people/1/manga"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/manga"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/people/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/people/1/manga"}}}}}}},"operationId":"getPeopleByIdManga"}},"/people/{id}/voices":{"get":{"summary":"Person Voice Acting Roles","tags":["People"],"description":"Get all voice acting roles for a person","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":"integer","default":1},"in":"path","name":"id","required":true,"description":"The MAL People ID"}],"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","example":{"mal_id":38707,"url":"https://myanimelist.net/anime/38707/RobiHachi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"title":"RobiHachi"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"}}},"character":{"type":"object","example":{"mal_id":11,"url":"https://myanimelist.net/character/11/Rei_Ayanami","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/11/564624.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/11/564624t.jpg","large_image_url":"https://cdn.myanimelist.net/images/characters/11/564624l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/11/564624.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/11/564624t.webp","large_image_url":"https://cdn.myanimelist.net/images/characters/11/564624l.webp"}},"name":"Ayanami, Rei"},"properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"images":{"type":"object","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1555/100447.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1555/100447l.webp"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"name":{"type":"string"}}}}}}},"example":{"data":[{"role":"Main","anime":{"mal_id":5081,"url":"https://myanimelist.net/anime/5081/Bakemonogatari","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/11/75274.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/11/75274t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/11/75274l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/11/75274.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/11/75274t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/11/75274l.webp"}},"title":"Bakemonogatari"},"character":{"mal_id":22003,"url":"https://myanimelist.net/character/22003/Koyomi_Araragi","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/9/72223.jpg","small_image_url":"https://cdn.myanimelist.net/images/characters/9/72223t.jpg","large_image_url":"https://cdn.myanimelist.net/images/characters/9/72223l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/9/72223.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/9/72223t.webp","large_image_url":"https://cdn.myanimelist.net/images/characters/9/72223l.webp"}},"name":"Araragi, Koyomi"}}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 all available pictures 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","example":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/81054.jpg"}},"properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}}}}}},"example":{"data":[{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/85360.jpg"}},{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/1/81054.jpg"}}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 related to the person","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"integer","default":1879},"in":"path","name":"id","required":true,"description":"The MAL People ID"}],"responses":{"200":{"description":"Successful response returning person featured articles","content":{"application/json":{"schema":{"description":"Successful response returning person featured articles","type":"object","example":{"pagination":{"last_visible_page":1,"has_next_page":false},"data":[{"mal_id":830,"url":"https://myanimelist.net/featured/830/Naruto_vs_Goku__Battle_of_the_Minds","title":"Naruto vs Goku: Battle of the Minds","summary":"Goku comes from a race of space warriors who place heavy emphasis on brute force. Naruto is the vessel for a dangerous demon...","published_at":"2015-11-13T01:38:00.000+00:00","author_username":"Cato5","author_url":"https://myanimelist.net/profile/Cato5","views":35271,"tags":["Spoiler","Analysis","Naruto","Dragon Ball"],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/s/common/uploaded_files/1447400492-a85749b35fdce059186c20422a338b87.jpeg"}},"excerpt":"Goku comes from a race of space warriors who place heavy emphasis on brute force..."}]},"properties":{"pagination":{"type":"object","properties":{"last_visible_page":{"type":"integer"},"has_next_page":{"type":"boolean"}}},"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"}}}}},"required":["data","pagination"]}}}},"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/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/people/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/people/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":{"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/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/1/articles"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/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/1/articles"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/people/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/people/1/articles"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/articles"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/people/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/people/1/articles"}}}}}}},"operationId":"getPeopleByIdArticles"}},"/people/ids":{"get":{"summary":"Get All Person IDs","tags":["People"],"description":"Retrieve all unique MAL person IDs that currently exist and are active","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","example":{"data":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]},"properties":{"data":{"type":"array","items":{"type":"integer"}}},"required":["data"]}}}},"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":"An unexpected error occurred.","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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 for anime producers and studios.","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Search query"},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["mal_id","count","favorites","established"]},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["desc","asc"],"default":"asc"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","minLength":1,"maxLength":1},"in":"query","name":"letter","required":false}],"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime studio or publishing company.","example":{"mal_id":11,"url":"https://myanimelist.net/anime/producer/11/Madhouse","titles":[{"type":"Default","title":"Madhouse"}],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/company/11.png"}},"favorites":45000,"established":"1972-10-17T00:00:00+00:00","about":"Madhouse Inc. is a Japanese animation studio founded in 1972.","count":380},"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":"Establishment date in ISO 8601 format."},"about":{"type":"string","nullable":true,"description":"Historical and context background information."},"count":{"type":"integer","description":"Total count of anime produced/serialized by this studio/publisher."}}}}},"example":{"pagination":{"last_visible_page":108,"has_next_page":true,"current_page":1,"items":{"count":25,"total":2697,"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":6321,"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":328}]},"required":["data","pagination"]},"examples":{"default":{"summary":"Matches","value":{"pagination":{"last_visible_page":108,"has_next_page":true,"current_page":1,"items":{"count":25,"total":2697,"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":6321,"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":328}]}},"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":[]}}}}}},"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"}}}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 details for a producer or studio","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.","example":{"mal_id":11,"url":"https://myanimelist.net/anime/producer/11/Madhouse","titles":[{"type":"Default","title":"Madhouse"}],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/company/11.png"}},"favorites":45000,"established":"1972-10-17T00:00:00+00:00","about":"Madhouse Inc. is a Japanese animation studio founded in 1972.","count":380},"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":"Establishment date in ISO 8601 format."},"about":{"type":"string","nullable":true,"description":"Historical and context background information."},"count":{"type":"integer","description":"Total count of anime produced/serialized by this studio/publisher."}}}},"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":6321,"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":328}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full details for a producer or studio","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.","example":{"mal_id":11,"url":"https://myanimelist.net/anime/producer/11/Madhouse","titles":[{"type":"Default","title":"Madhouse"}],"images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/company/11.png"}},"favorites":45000,"established":"1972-10-17T00:00:00+00:00","about":"Madhouse Inc. is a Japanese animation studio founded in 1972.","count":380,"external":[{"name":"Official Site","url":"http://www.madhouse.co.jp/"}]},"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":"Establishment date in ISO 8601 format."},"about":{"type":"string","nullable":true,"description":"Historical and context background information."},"count":{"type":"integer","description":"Total count of anime produced/serialized by this studio/publisher."},"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":6321,"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":328,"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"}]}},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 external links for a producer or studio","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"},{"name":"Facebook","url":"https://www.facebook.com/studiopierrot"},{"name":"YouTube","url":"https://www.youtube.com/channel/UC0U2GG9WNndvt1wK41l9iqg"}]},"required":["data"]}}}},"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/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":{"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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":"Retrieve all unique MAL producer IDs that currently exist and are active","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","example":{"data":[1,2,3,4,5,6,7,8,10,11,13,14,15,16,17,18,21,22]},"properties":{"data":{"type":"array","items":{"type":"integer"}}},"required":["data"]}}}},"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":"An unexpected error occurred.","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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 genre, theme, and demographic classifications with entry counts","parameters":[{"schema":{"type":"string","enum":["genres","explicit_genres","themes","demographics"]},"in":"query","name":"filter","required":false,"description":"Filter genres by category"}],"responses":{"200":{"description":"Successful response returning anime genres","content":{"application/json":{"schema":{"description":"Successful response returning anime genres","type":"object","example":{"data":[{"mal_id":1,"name":"Action","url":"https://myanimelist.net/anime/genre/1/Action","count":4501},{"mal_id":2,"name":"Adventure","url":"https://myanimelist.net/anime/genre/2/Adventure","count":3125}]},"properties":{"data":{"type":"array","items":{"type":"object","description":"A genre, theme, or demographic classification catalog entry.","example":{"mal_id":1,"name":"Action","url":"https://myanimelist.net/anime/genre/1/Action","count":4500},"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":"Total entries classified under this genre/theme."}}}}},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 genre, theme, and demographic classifications with entry counts","parameters":[{"schema":{"type":"string","enum":["genres","explicit_genres","themes","demographics"]},"in":"query","name":"filter","required":false,"description":"Filter genres by category"}],"responses":{"200":{"description":"Successful response returning manga genres","content":{"application/json":{"schema":{"description":"Successful response returning manga genres","type":"object","example":{"data":[{"mal_id":1,"name":"Action","url":"https://myanimelist.net/manga/genre/1/Action","count":5218},{"mal_id":2,"name":"Adventure","url":"https://myanimelist.net/manga/genre/2/Adventure","count":2980}]},"properties":{"data":{"type":"array","items":{"type":"object","description":"A genre, theme, or demographic classification catalog entry.","example":{"mal_id":1,"name":"Action","url":"https://myanimelist.net/anime/genre/1/Action","count":4500},"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":"Total entries classified under this genre/theme."}}}}},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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":"Get all manga magazines with their counts.","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string"},"in":"query","name":"q","required":false,"description":"Search query"},{"schema":{"type":"string","enum":["mal_id","name","count"],"default":"mal_id"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"in":"query","name":"sort","required":false},{"schema":{"type":"string"},"in":"query","name":"letter","required":false,"description":"Filter by first letter"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"A manga serialization publisher or magazine catalog entry.","example":{"mal_id":1,"name":"Shonen Jump","url":"https://myanimelist.net/manga/magazine/1/Shonen_Jump","count":245},"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":"Total manga entries serialized in this publisher/magazine."}}}}},"example":{"pagination":{"last_visible_page":60,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1482,"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":173},{"mal_id":3,"name":"Big Comic Spirits","url":"https://myanimelist.net/manga/magazine/3/Big_Comic_Spirits","count":306}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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","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."}],"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.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[],"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/mqdefault.jpg","medium_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/hqdefault.jpg","large_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/sddefault.jpg","maximum_image_url":"https://img.youtube.com/vi/gY5nDXOtv_o/maxresdefault.jpg"},"title":"Cowboy Bebop - Available Now in HD - Trailer","views":26818,"likes":848,"dislikes":6,"comment_count":72,"published_at":"2014-12-16T16:16:32.000Z","duration":"PT1M47S","privacy_status":"public","region_restriction":{"allowed":["CA","US"]},"embeddable":true}}},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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","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."}],"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.","example":{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":[],"type":"Manga","chapters":364,"volumes":41,"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 Present"},"score":9.47,"scored_by":320000,"rank":1,"popularity":2,"members":640000,"favorites":120000,"synopsis":"Guts, a former mercenary now known as the 'Black Swordsman,' is out for revenge.","background":"Berserk won the Award for Excellence at the sixth installment of the Tezuka Osamu Cultural Prize in 2002.","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"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","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 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","description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":[],"type":"Manga","chapters":364,"volumes":41,"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 Present"},"score":9.47,"scored_by":320000,"rank":1,"popularity":2,"members":640000,"favorites":120000,"synopsis":"Guts, a former mercenary now known as the 'Black Swordsman,' is out for revenge.","background":"Berserk won the Award for Excellence at the sixth installment of the Tezuka Osamu Cultural Prize in 2002.","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"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]}},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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","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.","example":{"mal_id":40,"url":"https://myanimelist.net/character/40/Monkey_D_Luffy","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/9/310307.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/9/310307.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/9/310307t.webp"}},"name":"Luffy, Monkey D.","name_kanji":"モンキー・D・ルフィ","nicknames":["Straw Hat Luffy","Luffytarou"],"favorites":130000,"about":"Monkey D. Luffy is the main protagonist of the anime and manga One Piece."},"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","description":"JPG and WebP character headshots in various resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"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":40,"url":"https://myanimelist.net/character/40/Monkey_D_Luffy","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/9/310307.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/9/310307.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/9/310307t.webp"}},"name":"Luffy, Monkey D.","name_kanji":"モンキー・D・ルフィ","nicknames":["Straw Hat Luffy","Luffytarou"],"favorites":130000,"about":"Monkey D. Luffy is the main protagonist of the anime and manga One Piece."}},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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","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).","example":{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."},"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","description":"Portrait JPG image URLs.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"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 date in ISO 8601 format."},"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":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."}},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 recent anime recommendations","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":100,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page"},{"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 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"}}},"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","additionalProperties":true},"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":230,"has_next_page":true},"data":[{"mal_id":"1-30","entry":[{"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"},{"mal_id":30,"url":"https://myanimelist.net/anime/30/Neon_Genesis_Evangelion","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1404/98182.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1404/98182t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1404/98182l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1404/98182.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1404/98182t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1404/98182l.webp"}},"title":"Neon Genesis Evangelion"}],"content":"Both are classic, critically acclaimed 90s sci-fi anime with deep themes, memorable soundtracks, and complex characters dealing with personal trauma.","date":"2026-06-06T12:00:00+00:00","user":{"url":"https://myanimelist.net/profile/RecommendationCritic","username":"RecommendationCritic"}}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 recent manga recommendations","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":100,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page"},{"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 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"}}},"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","additionalProperties":true},"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":150,"has_next_page":true},"data":[{"mal_id":"2-13","entry":[{"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"},{"mal_id":13,"url":"https://myanimelist.net/manga/13/Claymore","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/3/178553.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/3/178553t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/3/178553l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/3/178553.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/3/178553t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/3/178553l.webp"}},"title":"Claymore"}],"content":"Both are dark fantasy manga featuring relentless action, swords, monsters, and a dark, gritty atmosphere with detailed, gorgeous art.","date":"2026-06-06T12:00:00+00:00","user":{"url":"https://myanimelist.net/profile/MangaReaderX","username":"MangaReaderX"}}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 top-ranked anime","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music","cm","pv","tv_special"]}},"in":"query","name":"type","required":false,"description":"Filter by media type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"string","enum":["airing","upcoming","bypopularity","favorite"]},"in":"query","name":"filter","required":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Filter by rating. Multiple ratings can be selected.\n\nRating clarifications in order:\n\n* G - All Ages\n* PG - Children\n* PG-13 - Teens 13 or older\n* R - 17+ (violence & profanity)\n* R+ - Mild Nudity\n* Rx - Hentai","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."}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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":1203,"has_next_page":true,"current_page":1,"items":{"count":25,"total":30070,"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":1161165,"likes":21773,"dislikes":50,"comment_count":0,"published_at":"2024-02-09T14:45:03.000Z","duration":"PT56S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Sousou no Frieren"},{"type":"Synonym","title":"Frieren at the Funeral"},{"type":"Synonym","title":"Frieren The Slayer"},{"type":"Japanese","title":"葬送のフリーレン"},{"type":"English","title":"Frieren: Beyond Journey's End"}],"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.26,"scored_by":895001,"rank":1,"popularity":104,"members":1453831,"favorites":90269,"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...","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"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 top-ranked manga","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"array","items":{"type":"string","enum":["manga","novel","lightnovel","oneshot","doujin","manhwa","manhua"]}},"in":"query","name":"type","required":false,"description":"Filter by manga type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"string","enum":["publishing","upcoming","bypopularity","favorite"]},"in":"query","name":"filter","required":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."}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a manga series with its main metadata.","example":{"mal_id":2,"url":"https://myanimelist.net/manga/2/Berserk","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.jpg","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.jpg","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/manga/1/157896.webp","small_image_url":"https://cdn.myanimelist.net/images/manga/1/157896t.webp","large_image_url":"https://cdn.myanimelist.net/images/manga/1/157896l.webp"}},"approved":true,"titles":[{"type":"Default","title":"Berserk"},{"type":"Japanese","title":"ベルセルク"}],"title":"Berserk","title_english":"Berserk","title_japanese":"ベルセルク","title_synonyms":[],"type":"Manga","chapters":364,"volumes":41,"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 Present"},"score":9.47,"scored_by":320000,"rank":1,"popularity":2,"members":640000,"favorites":120000,"synopsis":"Guts, a former mercenary now known as the 'Black Swordsman,' is out for revenge.","background":"Berserk won the Award for Excellence at the sixth installment of the Tezuka Osamu Cultural Prize in 2002.","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"}],"explicit_genres":[],"themes":[{"mal_id":58,"type":"manga","name":"Gore","url":"https://myanimelist.net/manga/genre/58/Gore"}],"demographics":[{"mal_id":41,"type":"manga","name":"Seinen","url":"https://myanimelist.net/manga/genre/41/Seinen"}]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","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 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","description":"The publication format (e.g. Manga, Novel, Light Novel, One-shot)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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":3341,"has_next_page":true,"current_page":1,"items":{"count":25,"total":83509,"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":"Synonym","title":"Berserk: The Prototype"},{"type":"Japanese","title":"ベルセルク"},{"type":"English","title":"Berserk"}],"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":399805,"rank":1,"popularity":1,"members":799030,"favorites":138241,"synopsis":"Guts, a former mercenary now known as the Black Swordsman, is out for revenge...","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...","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"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing a person (voice actor, staff, or author).","example":{"mal_id":118,"url":"https://myanimelist.net/people/118/Hiroshi_Kamiya","website_url":"http://www.aoni.co.jp/actor/ka/kamiya-hiroshi.html","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/voiceactors/3/62551.jpg"}},"name":"Kamiya, Hiroshi","given_name":"Hiroshi","family_name":"Kamiya","alternate_names":["神谷 浩史"],"birthday":"1975-01-28T00:00:00+00:00","favorites":98000,"about":"Hiroshi Kamiya is a Japanese voice actor, singer and narrator affiliated with Aoni Production."},"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","description":"Portrait JPG image URLs.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true}}}}},"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 date in ISO 8601 format."},"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":1985,"has_next_page":true,"current_page":1,"items":{"count":25,"total":49618,"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":"Hiroshi Kamiya","given_name":"浩史","family_name":"神谷","alternate_names":["ヒロC","HiroC","Kamiyan"],"birthday":"1975-01-28T00:00:00+00:00","favorites":108511,"about":"Birth place: Matsudo, Chiba Prefecture, Japan\n\nHeight: 167 cm (5'6\")\n\nWeight: 53 kg (117 lbs)\n\nBlood type: A\n\nKamiya Hiroshi went to Aoni Juku and decided to pursue voice acting..."}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime or manga character.","example":{"mal_id":40,"url":"https://myanimelist.net/character/40/Monkey_D_Luffy","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/characters/9/310307.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/characters/9/310307.webp","small_image_url":"https://cdn.myanimelist.net/images/characters/9/310307t.webp"}},"name":"Luffy, Monkey D.","name_kanji":"モンキー・D・ルフィ","nicknames":["Straw Hat Luffy","Luffytarou"],"favorites":130000,"about":"Monkey D. Luffy is the main protagonist of the anime and manga One Piece."},"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","description":"JPG and WebP character headshots in various resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string"}}},"webp":{"type":"object","properties":{"image_url":{"type":"string"},"small_image_url":{"type":"string"}}}}},"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":8925,"has_next_page":true,"current_page":1,"items":{"count":25,"total":223116,"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"},"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":"Lelouch Lamperouge","name_kanji":"ルルーシュ・ランペルージ","nicknames":["Lelouch vi Britannia","Zero","Lulu","Black Prince","The Demon Emperor","L.L."],"favorites":179417,"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\nLelouch is the main protagonist of the anime/manga series Code Geass..."}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 top reviews sorted by most reactions (helpfulness).","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["anime","manga"]},"in":"query","name":"type","required":false},{"schema":{"type":"boolean"},"in":"query","name":"preliminary","required":false,"description":"Whether the results include preliminary reviews or not. Defaults to true."},{"schema":{"type":"boolean"},"in":"query","name":"spoilers","required":false,"description":"Whether the results include reviews with spoilers or not. Defaults to 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 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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","additionalProperties":true},"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},"chapters_read":{"type":"integer","nullable":true},"entry":{"type":"object","additionalProperties":true},"user":{"type":"object","additionalProperties":true}}}}},"example":{"pagination":{"last_visible_page":14579,"has_next_page":true,"current_page":1,"items":{"count":25,"total":364468,"per_page":25}},"data":[{"mal_id":2772,"url":"https://myanimelist.net/reviews.php?id=2772","type":"anime","reactions":{"overall":6031,"nice":5613,"love_it":192,"funny":38,"confusing":133,"informative":7,"well_written":45,"creative":3},"date":"2008-02-28T00:00:00+00:00","review":"There are two responses I get, without fail, every time I try to get someone new to watch this show...","score":10,"tags":["Recommended"],"is_spoiler":false,"is_preliminary":false,"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/images/userimages/Maxine.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/userimages/Maxine.webp"}}}}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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"}},"/seasons/{year}/{season}":{"get":{"summary":"Seasonal Anime","tags":["Seasons"],"description":"Get all anime from a specific season and year","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music"]}},"in":"query","name":"filter","required":false,"description":"Filter by media type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Filter by rating. Multiple ratings can be selected.\n\nRating clarifications in order:\n\n* G - All Ages\n* PG - Children\n* PG-13 - Teens 13 or older\n* R - 17+ (violence & profanity)\n* R+ - Mild Nudity\n* Rx - Hentai","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",""]},"in":"query","name":"unapproved","required":false,"description":"Doesn't do anything, only present for Jikan compatibility."},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"continuing","required":false,"description":"Include TV series continuing from a previous season when present (flag)"},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"kids","required":false,"description":"Filter out kids entries when present (flag)"},{"schema":{"type":"string","enum":["score","members","start_date"],"default":"members"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"integer","minimum":1000,"maximum":2999,"default":2025},"in":"path","name":"year","required":true},{"schema":{"type":"string","enum":["winter","spring","summer","fall"],"default":"winter"},"in":"path","name":"season","required":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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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":144,"per_page":25}},"data":[{"mal_id":61316,"url":"https://myanimelist.net/anime/61316/Re__Zero_kara_Hajimeru_Isekai_Seikatsu_4th_Season","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1540/155824.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1540/155824.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824l.webp"}},"trailer":{"youtube_id":"jVl4bY81iIs","url":"https://www.youtube.com/watch?v=jVl4bY81iIs","embed_url":"https://www.youtube-nocookie.com/embed/jVl4bY81iIs?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/jVl4bY81iIs/default.jpg","small_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/maxresdefault.jpg"},"title":"Re:ZERO -Starting Life in Another World- Season 4 | Official Trailer 2 | Crunchyroll","views":995441,"likes":46461,"dislikes":177,"comment_count":2162,"published_at":"2026-02-14T14:01:06.000Z","duration":"PT2M8S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season"},{"type":"Synonym","title":"Re: Life in a different world from zero"},{"type":"Synonym","title":"ReZero"},{"type":"Japanese","title":"Re:ゼロから始める異世界生活 4th season"},{"type":"English","title":"Re:ZERO -Starting Life in Another World- Season 4"}],"title":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season","title_english":"Re:ZERO -Starting Life in Another World- Season 4","title_japanese":"Re:ゼロから始める異世界生活 4th season","title_synonyms":["Re: Life in a different world from zero","ReZero"],"type":"TV","source":"Light novel","episodes":19,"status":"Currently Airing","airing":true,"aired":{"from":"2026-04-08T00:00:00+00:00","to":null,"prop":{"from":{"day":8,"month":4,"year":2026},"to":{"day":null,"month":null,"year":null}},"string":"Apr 8, 2026 to ?"},"duration":"23 min per ep","rating":"R - 17+ (violence & profanity)","score":8.98,"scored_by":42320,"rank":16,"popularity":1175,"members":242617,"favorites":2863,"synopsis":"In the deadly battle at the Watergate City of Priestella, Subaru and his allies barely emerged victorious—but their triumph came at a great cost. Through the \"Authority of Gluttony,\" Rem was put into suspended animation, while Crusch's memories and even Julius’s name were devoured. As he searches for a way to save them, Subaru learns of the \"Sage\" Shaula—an all-seeing being said to possess every form of knowledge...","background":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season is comprised of two arcs. The first eleven episodes are subtitled Soushitsu-hen (Loss Arc). The latter eight, subtitled Dakkan-hen (Recapture Arc), began airing on August 12, 2026.","season":"spring","year":2026,"broadcast":{"day":"Wednesdays","time":"22:00","timezone":"Asia/Tokyo","string":"Wednesdays at 22:00 (JST)"},"producers":[{"mal_id":238,"type":"anime","name":"AT-X","url":"https://myanimelist.net/anime/producer/238/AT-X"},{"mal_id":306,"type":"anime","name":"Magic Capsule","url":"https://myanimelist.net/anime/producer/306/Magic_Capsule"},{"mal_id":647,"type":"anime","name":"Memory-Tech","url":"https://myanimelist.net/anime/producer/647/Memory-Tech"},{"mal_id":1333,"type":"anime","name":"Hakuhodo DY Music & Pictures","url":"https://myanimelist.net/anime/producer/1333/Hakuhodo_DY_Music___Pictures"},{"mal_id":1696,"type":"anime","name":"Kadokawa","url":"https://myanimelist.net/anime/producer/1696/Kadokawa"},{"mal_id":2927,"type":"anime","name":"DAXEL","url":"https://myanimelist.net/anime/producer/2927/DAXEL"}],"licensors":[],"studios":[{"mal_id":314,"type":"anime","name":"White Fox","url":"https://myanimelist.net/anime/producer/314/White_Fox"}],"genres":[{"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"},{"mal_id":41,"type":"anime","name":"Suspense","url":"https://myanimelist.net/anime/genre/41/Suspense"}],"explicit_genres":[],"themes":[{"mal_id":62,"type":"anime","name":"Isekai","url":"https://myanimelist.net/anime/genre/62/Isekai"},{"mal_id":40,"type":"anime","name":"Psychological","url":"https://myanimelist.net/anime/genre/40/Psychological"},{"mal_id":78,"type":"anime","name":"Time Travel","url":"https://myanimelist.net/anime/genre/78/Time_Travel"}],"demographics":[]}]},"required":["data","pagination"]}}}},"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/1/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/seasons/1/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/seasons/1/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":{"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/1/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/seasons/1/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/1/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/seasons/1/1"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/seasons/1/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/seasons/1/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/seasons/1/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/seasons/1/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/seasons/1/1"}}}}}}},"operationId":"getSeasonsByYearBySeason"}},"/seasons/now":{"get":{"summary":"Seasonal Anime Current","tags":["Seasons"],"description":"Get anime from the current airing season","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music"]}},"in":"query","name":"filter","required":false,"description":"Filter by media type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Filter by rating. Multiple ratings can be selected.\n\nRating clarifications in order:\n\n* G - All Ages\n* PG - Children\n* PG-13 - Teens 13 or older\n* R - 17+ (violence & profanity)\n* R+ - Mild Nudity\n* Rx - Hentai","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",""]},"in":"query","name":"unapproved","required":false,"description":"Doesn't do anything, only present for Jikan compatibility."},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"continuing","required":false,"description":"Include TV series continuing from a previous season when present (flag)"},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"kids","required":false,"description":"Filter out kids entries when present (flag)"},{"schema":{"type":"string","enum":["score","members","start_date"],"default":"members"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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":144,"per_page":25}},"data":[{"mal_id":61316,"url":"https://myanimelist.net/anime/61316/Re__Zero_kara_Hajimeru_Isekai_Seikatsu_4th_Season","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1540/155824.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1540/155824.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824l.webp"}},"trailer":{"youtube_id":"jVl4bY81iIs","url":"https://www.youtube.com/watch?v=jVl4bY81iIs","embed_url":"https://www.youtube-nocookie.com/embed/jVl4bY81iIs?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/jVl4bY81iIs/default.jpg","small_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/maxresdefault.jpg"},"title":"Re:ZERO -Starting Life in Another World- Season 4 | Official Trailer 2 | Crunchyroll","views":995441,"likes":46461,"dislikes":177,"comment_count":2162,"published_at":"2026-02-14T14:01:06.000Z","duration":"PT2M8S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season"},{"type":"Synonym","title":"Re: Life in a different world from zero"},{"type":"Synonym","title":"ReZero"},{"type":"Japanese","title":"Re:ゼロから始める異世界生活 4th season"},{"type":"English","title":"Re:ZERO -Starting Life in Another World- Season 4"}],"title":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season","title_english":"Re:ZERO -Starting Life in Another World- Season 4","title_japanese":"Re:ゼロから始める異世界生活 4th season","title_synonyms":["Re: Life in a different world from zero","ReZero"],"type":"TV","source":"Light novel","episodes":19,"status":"Currently Airing","airing":true,"aired":{"from":"2026-04-08T00:00:00+00:00","to":null,"prop":{"from":{"day":8,"month":4,"year":2026},"to":{"day":null,"month":null,"year":null}},"string":"Apr 8, 2026 to ?"},"duration":"23 min per ep","rating":"R - 17+ (violence & profanity)","score":8.98,"scored_by":42320,"rank":16,"popularity":1175,"members":242617,"favorites":2863,"synopsis":"In the deadly battle at the Watergate City of Priestella, Subaru and his allies barely emerged victorious—but their triumph came at a great cost. Through the \"Authority of Gluttony,\" Rem was put into suspended animation, while Crusch's memories and even Julius’s name were devoured. As he searches for a way to save them, Subaru learns of the \"Sage\" Shaula—an all-seeing being said to possess every form of knowledge...","background":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season is comprised of two arcs. The first eleven episodes are subtitled Soushitsu-hen (Loss Arc). The latter eight, subtitled Dakkan-hen (Recapture Arc), began airing on August 12, 2026.","season":"spring","year":2026,"broadcast":{"day":"Wednesdays","time":"22:00","timezone":"Asia/Tokyo","string":"Wednesdays at 22:00 (JST)"},"producers":[{"mal_id":238,"type":"anime","name":"AT-X","url":"https://myanimelist.net/anime/producer/238/AT-X"},{"mal_id":306,"type":"anime","name":"Magic Capsule","url":"https://myanimelist.net/anime/producer/306/Magic_Capsule"},{"mal_id":647,"type":"anime","name":"Memory-Tech","url":"https://myanimelist.net/anime/producer/647/Memory-Tech"},{"mal_id":1333,"type":"anime","name":"Hakuhodo DY Music & Pictures","url":"https://myanimelist.net/anime/producer/1333/Hakuhodo_DY_Music___Pictures"},{"mal_id":1696,"type":"anime","name":"Kadokawa","url":"https://myanimelist.net/anime/producer/1696/Kadokawa"},{"mal_id":2927,"type":"anime","name":"DAXEL","url":"https://myanimelist.net/anime/producer/2927/DAXEL"}],"licensors":[],"studios":[{"mal_id":314,"type":"anime","name":"White Fox","url":"https://myanimelist.net/anime/producer/314/White_Fox"}],"genres":[{"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"},{"mal_id":41,"type":"anime","name":"Suspense","url":"https://myanimelist.net/anime/genre/41/Suspense"}],"explicit_genres":[],"themes":[{"mal_id":62,"type":"anime","name":"Isekai","url":"https://myanimelist.net/anime/genre/62/Isekai"},{"mal_id":40,"type":"anime","name":"Psychological","url":"https://myanimelist.net/anime/genre/40/Psychological"},{"mal_id":78,"type":"anime","name":"Time Travel","url":"https://myanimelist.net/anime/genre/78/Time_Travel"}],"demographics":[]}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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/upcoming":{"get":{"summary":"Seasonal Anime Upcoming","tags":["Seasons"],"description":"Get all upcoming/announced anime that may or may not have a release date","parameters":[{"schema":{"type":"array","items":{"type":"string","enum":["tv","movie","ova","special","ona","music"]}},"in":"query","name":"filter","required":false,"description":"Filter by media type. Multiple types can be selected.","style":"form","explode":false},{"schema":{"type":"array","items":{"type":"string","enum":["g","pg","pg13","r17","r","rx"]}},"in":"query","name":"rating","required":false,"description":"Filter by rating. Multiple ratings can be selected.\n\nRating clarifications in order:\n\n* G - All Ages\n* PG - Children\n* PG-13 - Teens 13 or older\n* R - 17+ (violence & profanity)\n* R+ - Mild Nudity\n* Rx - Hentai","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",""]},"in":"query","name":"unapproved","required":false,"description":"Doesn't do anything, only present for Jikan compatibility."},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"continuing","required":false,"description":"Include TV series continuing from a previous season when present (flag)"},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"kids","required":false,"description":"Filter out kids entries when present (flag)"},{"schema":{"type":"string","enum":["score","members","start_date"],"default":"members"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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":421,"per_page":25}},"data":[{"mal_id":35853,"url":"https://myanimelist.net/anime/35853/Zero_Seiki_Movie_1__Emeraldas","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/11/86764.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/11/86764t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/11/86764l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/11/86764.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/11/86764t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/11/86764l.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":"Zero Seiki Movie 1: Emeraldas"},{"type":"Synonym","title":"The Zero Century Movie 1: Emeraldas"},{"type":"Synonym","title":"The Zero Century: Emeraldas"},{"type":"Japanese","title":"零世紀 エメラルダス"}],"title":"Zero Seiki Movie 1: Emeraldas","title_english":null,"title_japanese":"零世紀 エメラルダス","title_synonyms":["The Zero Century Movie 1: Emeraldas","The Zero Century: Emeraldas"],"type":"Movie","source":"Manga","episodes":1,"status":"Not yet aired","airing":false,"aired":{"from":null,"to":null,"prop":{"from":{"day":null,"month":null,"year":null},"to":{"day":null,"month":null,"year":null}},"string":null},"duration":"Unknown","rating":"None","score":0,"scored_by":0,"rank":null,"popularity":10912,"members":3306,"favorites":0,"synopsis":"An anime movie that was announced at Japan Expo and was supposed to be screened in 2020 before production was delayed.","background":null,"season":null,"year":null,"broadcast":{"day":null,"time":null,"timezone":null,"string":null},"producers":[],"licensors":[],"studios":[{"mal_id":1317,"type":"anime","name":"Production GoodBook","url":"https://myanimelist.net/anime/producer/1317/Production_GoodBook"}],"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":24,"type":"anime","name":"Sci-Fi","url":"https://myanimelist.net/anime/genre/24/Sci-Fi"}],"explicit_genres":[],"themes":[],"demographics":[]}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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":"Returns a list of all available seasons","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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"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":102,"total":102,"per_page":102}},"data":[{"year":2026,"seasons":["winter","spring","summer","fall"]},{"year":2025,"seasons":["winter","spring","summer","fall"]}]},"required":["data","pagination"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 recent anime reviews from all entries","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":50,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"most_helpful"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"]},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment"},{"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 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"}}},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","additionalProperties":true},"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},"chapters_read":{"type":"integer","nullable":true},"entry":{"type":"object","additionalProperties":true},"user":{"type":"object","additionalProperties":true}}}}},"example":{"pagination":{"last_visible_page":25,"has_next_page":true},"data":[{"mal_id":12345,"url":"https://myanimelist.net/reviews.php?id=12345","type":"anime","reactions":{"overall":45,"nice":30,"love_it":10,"funny":5,"confusing":0,"informative":20,"well_written":15,"creative":5},"date":"2026-06-06T12:00:00+00:00","review":"An absolute masterpiece. The animation, characters, soundtrack, and pacing are all top tier. Highly recommended for any anime fan.","score":10,"tags":["Recommended"],"is_spoiler":false,"is_preliminary":false,"episodes_watched":26,"entry":{"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"},"user":{"username":"BebopFanatic","url":"https://myanimelist.net/profile/BebopFanatic","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/userimages/BebopFanatic.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/userimages/BebopFanatic.webp"}}}}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 recent manga reviews from all entries","parameters":[{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":50,"minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["newest","oldest","most_helpful"],"default":"most_helpful"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"preliminary","required":false,"description":"Filter preliminary reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler reviews (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["recommended","mixed_feelings","not_recommended"]},"in":"query","name":"sentiment","required":false,"description":"Filter by review sentiment"},{"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 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"}}},"data":{"type":"array","items":{"type":"object","properties":{"mal_id":{"type":"integer"},"url":{"type":"string"},"type":{"type":"string"},"reactions":{"type":"object","additionalProperties":true},"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},"chapters_read":{"type":"integer","nullable":true},"entry":{"type":"object","additionalProperties":true},"user":{"type":"object","additionalProperties":true}}}}},"example":{"pagination":{"last_visible_page":18,"has_next_page":true},"data":[{"mal_id":67890,"url":"https://myanimelist.net/reviews.php?id=67890","type":"manga","reactions":{"overall":82,"nice":50,"love_it":20,"funny":2,"confusing":1,"informative":35,"well_written":30,"creative":10},"date":"2026-06-06T12:00:00+00:00","review":"A gritty, dark, and masterfully told fantasy epic. The detail in Urasawa's art and depth of storytelling is unparalleled. A must-read.","score":10,"tags":["Recommended"],"is_spoiler":false,"is_preliminary":false,"chapters_read":162,"entry":{"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"}},"title":"Monster"},"user":{"username":"MangaSeer","url":"https://myanimelist.net/profile/MangaSeer","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/userimages/MangaSeer.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/userimages/MangaSeer.webp"}}}}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 currently airing anime by their broadcast schedule","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"},{"schema":{"type":"string","enum":["true","false",""]},"in":"query","name":"kids","required":false,"description":"Filter out kids entries (flag)"},{"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":"boolean"},"in":"query","name":"unapproved","required":false,"description":"Doesn't do anything, only present for Jikan compatibility."},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"data":{"type":"array","items":{"type":"object","description":"Core schema representing an anime series with its main metadata.","example":{"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"}},"approved":true,"titles":[{"type":"Default","title":"Cowboy Bebop"},{"type":"Japanese","title":"カウボーイビバップ"}],"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":980000,"rank":28,"popularity":39,"members":1900000,"favorites":95000,"synopsis":"Crime is timeless. By the year 2071, humanity has colonized several of the planets and moons of the solar system leaving the now uninhabitable surface of planet Earth behind.","background":null,"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"}],"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"}],"explicit_genres":[],"themes":[{"mal_id":29,"type":"anime","name":"Space","url":"https://myanimelist.net/anime/genre/29/Space"}],"demographics":[]},"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","description":"JPG and WebP cover image URLs in small, default, and large resolutions.","properties":{"jpg":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"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","additionalProperties":true,"nullable":true},"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","description":"The broadcast or media type (e.g. TV, Movie, OVA, ONA, Special)."},"source":{"type":"string","description":"The source material type (e.g. Manga, Light Novel, Original)."},"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.","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":"Explicit genre classifications (e.g. Hentai, Ecchi)."},"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":144,"per_page":25}},"data":[{"mal_id":61316,"url":"https://myanimelist.net/anime/61316/Re__Zero_kara_Hajimeru_Isekai_Seikatsu_4th_Season","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/1540/155824.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/1540/155824.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/1540/155824l.webp"}},"trailer":{"youtube_id":"jVl4bY81iIs","url":"https://www.youtube.com/watch?v=jVl4bY81iIs","embed_url":"https://www.youtube-nocookie.com/embed/jVl4bY81iIs?enablejsapi=1&wmode=opaque&autoplay=1","images":{"image_url":"https://img.youtube.com/vi/jVl4bY81iIs/default.jpg","small_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/sddefault.jpg","medium_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/mqdefault.jpg","large_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/hqdefault.jpg","maximum_image_url":"https://img.youtube.com/vi/jVl4bY81iIs/maxresdefault.jpg"},"title":"Re:ZERO -Starting Life in Another World- Season 4 | Official Trailer 2 | Crunchyroll","views":995441,"likes":46461,"dislikes":177,"comment_count":2162,"published_at":"2026-02-14T14:01:06.000Z","duration":"PT2M8S","privacy_status":"public","region_restriction":null,"embeddable":true},"approved":true,"titles":[{"type":"Default","title":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season"},{"type":"Synonym","title":"Re: Life in a different world from zero"},{"type":"Synonym","title":"ReZero"},{"type":"Japanese","title":"Re:ゼロから始める異世界生活 4th season"},{"type":"English","title":"Re:ZERO -Starting Life in Another World- Season 4"}],"title":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season","title_english":"Re:ZERO -Starting Life in Another World- Season 4","title_japanese":"Re:ゼロから始める異世界生活 4th season","title_synonyms":["Re: Life in a different world from zero","ReZero"],"type":"TV","source":"Light novel","episodes":19,"status":"Currently Airing","airing":true,"aired":{"from":"2026-04-08T00:00:00+00:00","to":null,"prop":{"from":{"day":8,"month":4,"year":2026},"to":{"day":null,"month":null,"year":null}},"string":"Apr 8, 2026 to ?"},"duration":"23 min per ep","rating":"R - 17+ (violence & profanity)","score":8.98,"scored_by":42320,"rank":16,"popularity":1175,"members":242617,"favorites":2863,"synopsis":"In the deadly battle at the Watergate City of Priestella, Subaru and his allies barely emerged victorious—but their triumph came at a great cost. Through the \"Authority of Gluttony,\" Rem was put into suspended animation, while Crusch's memories and even Julius’s name were devoured. As he searches for a way to save them, Subaru learns of the \"Sage\" Shaula—an all-seeing being said to possess every form of knowledge...","background":"Re:Zero kara Hajimeru Isekai Seikatsu 4th Season is comprised of two arcs. The first eleven episodes are subtitled Soushitsu-hen (Loss Arc). The latter eight, subtitled Dakkan-hen (Recapture Arc), began airing on August 12, 2026.","season":"spring","year":2026,"broadcast":{"day":"Wednesdays","time":"22:00","timezone":"Asia/Tokyo","string":"Wednesdays at 22:00 (JST)"},"producers":[{"mal_id":238,"type":"anime","name":"AT-X","url":"https://myanimelist.net/anime/producer/238/AT-X"},{"mal_id":306,"type":"anime","name":"Magic Capsule","url":"https://myanimelist.net/anime/producer/306/Magic_Capsule"},{"mal_id":647,"type":"anime","name":"Memory-Tech","url":"https://myanimelist.net/anime/producer/647/Memory-Tech"},{"mal_id":1333,"type":"anime","name":"Hakuhodo DY Music & Pictures","url":"https://myanimelist.net/anime/producer/1333/Hakuhodo_DY_Music___Pictures"},{"mal_id":1696,"type":"anime","name":"Kadokawa","url":"https://myanimelist.net/anime/producer/1696/Kadokawa"},{"mal_id":2927,"type":"anime","name":"DAXEL","url":"https://myanimelist.net/anime/producer/2927/DAXEL"}],"licensors":[],"studios":[{"mal_id":314,"type":"anime","name":"White Fox","url":"https://myanimelist.net/anime/producer/314/White_Fox"}],"genres":[{"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"},{"mal_id":41,"type":"anime","name":"Suspense","url":"https://myanimelist.net/anime/genre/41/Suspense"}],"explicit_genres":[],"themes":[{"mal_id":62,"type":"anime","name":"Isekai","url":"https://myanimelist.net/anime/genre/62/Isekai"},{"mal_id":40,"type":"anime","name":"Psychological","url":"https://myanimelist.net/anime/genre/40/Psychological"},{"mal_id":78,"type":"anime","name":"Time Travel","url":"https://myanimelist.net/anime/genre/78/Time_Travel"}],"demographics":[]}]},"required":["data","pagination"]}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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":"Browse all available news articles","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false},{"schema":{"type":"string"},"in":"query","name":"tag","required":false},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"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":314,"has_next_page":true,"current_page":1,"items":{"count":25,"total":7850,"per_page":25}},"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, scheduled to air on TV Tokyo in 2019. The new anime will adapt the manga series in its entirety..."}]},"required":["data","pagination"]}}}},"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"}}}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 and category counts","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":4867},{"name":"Preview","count":3989},{"name":"New Anime","count":3768},{"name":"Adapts Manga","count":1483},{"name":"OP ED","count":1249}]},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full details of a specific news article by ID","parameters":[{"schema":{"type":"integer","default":56264086},"in":"path","name":"id","required":true,"description":"The MAL News ID"}],"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, scheduled to air on TV Tokyo in 2019. The new anime will adapt the manga series in its entirety...","content":{"html":"<figure><img src=\"https://cdn.myanimelist.net/s/common/uploaded_files/1542640254-66e5c9c940a2cae6533250e24a978262.jpeg\" alt=\"Manga 'Fruits Basket' Receives New TV Anime Adaptation\"></figure><p>This year's 24th issue of Hakusensha's <a href=\"https://myanimelist.net/manga/magazine/21/\">Hana to Yume</a> magazine announced a new anime adaptation of Natsuki Takaya's supernatural shoujo manga <a href=\"https://myanimelist.net/manga/102/\"><em>Fruits Basket</em></a>.</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's supernatural shoujo manga [_Fruits Basket_](https://myanimelist.net/manga/102/)."},"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"]}}}},"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/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/news/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/news/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":{"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/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/news/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/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/news/1"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/news/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/news/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/news/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/news/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/news/1"}}}}}}},"operationId":"getNewsById"}},"/articles":{"get":{"summary":"Articles","tags":["Articles"],"description":"Browse all available featured articles","parameters":[{"schema":{"type":"string"},"in":"query","name":"q","required":false},{"schema":{"type":"string"},"in":"query","name":"tag","required":false},{"schema":{"type":"integer","default":1,"minimum":1},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["published_at","views"],"default":"published_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"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":2184,"per_page":25}},"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.000+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..."}]},"required":["data","pagination"]}}}},"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"}}}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 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":"Recommendations","count":450},{"name":"Visual Novel","count":120},{"name":"Analysis","count":98}]},"required":["data"]}}}},"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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full details of a specific featured article by ID","parameters":[{"schema":{"type":"integer","default":1904},"in":"path","name":"id","required":true,"description":"The MAL Article ID"}],"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.000+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...</p>","markdown":"It’s no secret that there’s been a long history between visual novels and anime..."},"relations":{"anime":[{"mal_id":356,"name":"Fate/stay night","url":"https://myanimelist.net/anime/356/Fate_stay_night"}],"manga":[],"people":[],"characters":[]}}},"required":["data"]}}}},"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/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/articles/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/articles/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":{"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/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/articles/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/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/articles/1"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/articles/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/articles/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/articles/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/articles/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/articles/1"}}}}}}},"operationId":"getArticlesById"}},"/stacks":{"get":{"summary":"Interest Stacks","tags":["Interest Stacks"],"description":"Browse all available public interest stacks","parameters":[{"schema":{"type":"string","maxLength":200},"in":"query","name":"q","required":false},{"schema":{"type":"integer","default":1,"minimum":1,"maximum":1000},"in":"query","name":"page","required":false,"description":"Page number"},{"schema":{"type":"integer","default":25,"minimum":1,"maximum":50},"in":"query","name":"limit","required":false,"description":"Results per page"},{"schema":{"type":"string","enum":["created_at","restack_count"],"default":"created_at"},"in":"query","name":"order_by","required":false},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc"},"in":"query","name":"sort","required":false},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"spoilers","required":false,"description":"Filter spoiler stacks (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"challenges","required":false,"description":"Filter challenge stacks (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["true","false","only"]},"in":"query","name":"official","required":false,"description":"Filter official stacks (true = include, false = exclude, only = exclusive)"},{"schema":{"type":"string","enum":["anime","manga"]},"in":"query","name":"stack_type","required":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."}],"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.","example":{"last_visible_page":42,"has_next_page":true,"current_page":1,"items":{"count":25,"total":1042,"per_page":25}},"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"}}}}},"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":875,"has_next_page":true,"current_page":1,"items":{"count":25,"total":21860,"per_page":25}},"data":[{"mal_id":89273,"url":"https://myanimelist.net/stacks/89273","stack_type":"anime","title":"Romance Animes i've watched and recommends! (Shoujo and Josei)","description":"For context, Romance is my favorite genre!","author_username":"shyisanotaku","author_url":"https://myanimelist.net/profile/shyisanotaku","is_official":false,"is_challenge":false,"is_spoiler":true,"restack_count":2,"entry_count":49,"created_at":"2026-08-12T05:26:00.000Z"}]}}}}},"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/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"]}}}},"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"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","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"}}}},"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","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","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 full details of a interest stack by ID","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":"integer"},"example":6512,"in":"path","name":"id","required":true,"description":"The MAL Interest Stack ID"}],"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","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}},"webp":{"type":"object","required":["image_url","small_image_url","large_image_url"],"properties":{"image_url":{"type":"string","nullable":true},"small_image_url":{"type":"string","nullable":true},"large_image_url":{"type":"string","nullable":true}}}}},"title":{"type":"string"},"title_english":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"episodes":{"type":"integer","nullable":true},"aired_from_year":{"type":"integer","nullable":true},"volumes":{"type":"integer","nullable":true},"published_from_year":{"type":"integer","nullable":true},"author_score":{"type":"integer","nullable":true,"minimum":1,"maximum":10},"note":{"type":"string","nullable":true}},"example":{"position":1,"mal_id":21995,"url":"https://myanimelist.net/anime/21995/Ao_Haru_Ride","images":{"jpg":{"image_url":"https://cdn.myanimelist.net/images/anime/8/64813.jpg","small_image_url":"https://cdn.myanimelist.net/images/anime/8/64813t.jpg","large_image_url":"https://cdn.myanimelist.net/images/anime/8/64813l.jpg"},"webp":{"image_url":"https://cdn.myanimelist.net/images/anime/8/64813.webp","small_image_url":"https://cdn.myanimelist.net/images/anime/8/64813t.webp","large_image_url":"https://cdn.myanimelist.net/images/anime/8/64813l.webp"}},"title":"Ao Haru Ride","title_english":"Blue Spring Ride","type":"TV","episodes":12,"aired_from_year":2014,"author_score":10,"note":"my all time favorite!"}}}}}},"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":9479,"entry_count":48,"created_at":"2022-06-06T03:39:00.000Z","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","episodes":12,"aired_from_year":2005,"author_score":null,"note":null},{"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","episodes":11,"aired_from_year":2011,"author_score":null,"note":null}]}}}}}},"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/stacks/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/stacks/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/stacks/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":{"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/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/stacks/1"}}}}},"headers":{"Allow":{"description":"The supported methods for this API.","schema":{"type":"string","enum":["GET, HEAD, OPTIONS"]}}}},"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/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/stacks/1"}},"applicationPublicPerDay":{"summary":"Daily","value":{"status":429,"type":"RateLimitException","message":"Rate limit exceeded (per-day).","error":"You have exceeded the 40000 requests/day limit for the 'public' tier. Resets at midnight UTC.","path":"/v1/stacks/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/stacks/1"}}}}},"headers":{"Retry-After":{"description":"Seconds to wait before retrying the request.","schema":{"type":"string","pattern":"^[1-9][0-9]*$","example":"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/stacks/1"}}}}}},"503":{"description":"Service Unavailable - The API is temporarily offline or busy","content":{"application/json":{"schema":{"type":"object","required":["status","type","message","path"],"properties":{"status":{"type":"integer","enum":[503]},"type":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"},"path":{"type":"string"}}},"examples":{"rateLimitStore":{"value":{"status":503,"type":"ServiceUnavailableException","message":"Rate-limit accounting is temporarily unavailable.","path":"/v1/stacks/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/stacks/1"}}}}}}},"operationId":"getStacksById"}}},"servers":[{"url":"https://api.tenrai.org/v1"}],"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":"Interest Stacks","description":"Browse and retrieve interest stacks with entries in source order."},{"name":"Random","description":"Returns a random resource with every request."}],"externalDocs":{"url":"https://api.tenrai.org/llms.txt","description":"llms.txt"}}