{"success":true,"data":{"name":"mangaread-api","description":"Read-only Hono API exposing Madara/WordPress manga data.","source":"https://www.mangaread.org","responseEnvelope":{"success":"{ success: true, data, meta? }","error":"{ success: false, error: { code, message, details? } }"},"sorting":{"latest":"Recently UPDATED series — newest chapter release first (default).","new-manga":"Recently ADDED series — newest series published on the site first.","alphabet":"Series title A → Z.","rating":"Highest average user review score first.","views":"Most-viewed of all time first.","trending":"Most-viewed in the last 7 days first."},"endpoints":[{"name":"API index","method":"GET","path":"/","description":"This service banner + the endpoint catalog you are reading now.","accepts":"nothing","returns":"This document."},{"name":"Health check","method":"GET","path":"/health","description":"Liveness probe.","accepts":"nothing","returns":"{ status: \"ok\", time: ISO-8601 string }"},{"name":"List / browse manga","method":"GET","path":"/api/manga","description":"Browse the whole library, 20 series per page, in the order you choose.","accepts":{"page":"query · integer >= 1 (default 1)","orderby":"query · one of the `sorting` keys above (default \"latest\")"},"returns":"data: Array<MangaSummary { slug, title, url, cover, latestChapter, rating }>. meta: { page, orderby, pageSize:20, count, hasMore (loop while true), totalManga, totalPages }.","example":"/api/manga?orderby=rating&page=1"},{"name":"Full catalog (every slug)","method":"GET","path":"/api/manga/catalog","description":"Every series on the site (slug + url), harvested from the sitemaps. Heavy; cached 12h.","accepts":{"limit":"query · integer 1–20000 (optional; omit for the entire library)"},"returns":"data: Array<{ slug, url }>. meta: { count, limit }.","example":"/api/manga/catalog?limit=500"},{"name":"Search manga","method":"GET","path":"/api/manga/search","description":"Search series by title.","accepts":{"q":"query · search text, required (1–100 chars)","page":"query · integer >= 1 (default 1)"},"returns":"data: Array<MangaSummary>. meta: { query, page, count }.","example":"/api/manga/search?q=solo+leveling"},{"name":"Manga details","method":"GET","path":"/api/manga/:slug","description":"Full metadata for one series.","accepts":{"slug":"path · series slug, e.g. solo-leveling-manhwa"},"returns":"data: MangaDetail { slug, title, url, cover, rating, latestChapter, alternativeTitles[], authors[], artists[], genres[], type, status, releaseYear, description, postId }.","example":"/api/manga/solo-leveling-manhwa"},{"name":"Chapter list","method":"GET","path":"/api/manga/:slug/chapters","description":"Every chapter of a series, in reading order.","accepts":{"slug":"path · series slug"},"returns":"data: Array<ChapterSummary { slug, title, url, releasedAt }>. meta: { slug, count }.","example":"/api/manga/solo-leveling-manhwa/chapters"},{"name":"Chapter pages (images)","method":"GET","path":"/api/manga/:slug/chapters/:chapter","description":"Ordered page-image URLs for a single chapter.","accepts":{"slug":"path · series slug","chapter":"path · chapter slug, e.g. chapter-198"},"returns":"data: ChapterImages { slug, chapter, url, pageCount, rawImageCount, pages: [{ index, url }] }. Note: image hosts require the site Referer + a browser UA — hotlinking elsewhere returns 403.","example":"/api/manga/solo-leveling-manhwa/chapters/chapter-198"},{"name":"Series comments","method":"GET","path":"/api/manga/:slug/comments","description":"Reader comments for a series (from wpDiscuz) — author, avatar, body, post time, net vote score, image attachments and inline replies.","accepts":{"slug":"path · series slug","offset":"query · integer >= 0 (default 0) — page cursor; omit for the first page","lastParentId":"query · integer >= 0 (default 0) — pass back the previous response's meta.lastParentId"},"returns":"data: Array<Comment { id, parentId, author, avatar, content, contentHtml, attachments[], date (ISO), dateLabel, votes, likes, dislikes, replyCount, hasUnloadedReplies, replies[] }>. meta: { slug, offset, count, hasMore, nextOffset, lastParentId }. Pagination is a cursor: loop while hasMore, sending nextOffset + lastParentId. votes is wpDiscuz's net score; separate likes/dislikes are not public (null). Collapsed replies are lazy (see replyCount / hasUnloadedReplies).","example":"/api/manga/solo-leveling-manhwa/comments"},{"name":"Image proxy (optional)","method":"GET","path":"/api/image","description":"Fetches an upstream image with the required Referer/UA and edge-caches it. Disabled unless IMAGE_PROXY_ENABLED=true; only allow-listed hosts may be proxied.","accepts":{"url":"query · url-encoded absolute https image URL on an allowed host"},"returns":"The image bytes (Content-Type preserved), cached at the edge.","example":"/api/image?url=https%3A%2F%2Fwww.mangaread.org%2Fwp-content%2Fuploads%2Fpage.jpg"},{"name":"List genres","method":"GET","path":"/api/genres","description":"Every genre on the site.","accepts":"nothing","returns":"data: Array<Genre { slug, name, url }>. meta: { count }.","example":"/api/genres"},{"name":"Browse genre","method":"GET","path":"/api/genres/:genre","description":"Series within a genre, 20 per page.","accepts":{"genre":"path · genre slug, e.g. romance","page":"query · integer >= 1 (default 1)"},"returns":"data: Array<MangaSummary> (same shape as list). meta: { genre, page, count }.","example":"/api/genres/romance?page=1"},{"name":"Series comment replies","method":"GET","path":"/api/manga/:slug/comments/:commentId/replies","description":"Load the replies wpDiscuz hides behind a \"View Replies (N)\" toggle on a parent comment (the parent reports replyCount + hasUnloadedReplies in the comments response).","accepts":{"slug":"path · series slug","commentId":"path · the PARENT comment id whose replies you want"},"returns":"data: Array<Comment> (same shape as the main thread; may itself be nested). meta: { slug, commentId, count }. No pagination — the whole reply subtree returns at once.","example":"/api/manga/solo-leveling-manhwa/comments/2531718/replies"}]}}