# MangaDex — Zapi reference > Search manga titles and fetch chapter page images for offline reading. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ status, message, content }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/downloader/mangadex - Endpoint catalog: https://zpi.web.id/category/downloader - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## MangaDex **Category:** downloader · **Slug:** `mangadex` **Detail page:** https://zpi.web.id/api/downloader/mangadex Search manga titles and fetch chapter page images for offline reading. **Tags:** downloader, manga ### Chapter Return page image URLs for a given manga chapter. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/downloader:mangadex/chapter/:chapterId` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `chapterId` | string | path | yes | Chapter UUID (8-4-4-4-12 hex) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/downloader:mangadex/chapter/:chapterId" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/downloader:mangadex/chapter/:chapterId", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/downloader:mangadex/chapter/:chapterId", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "hash": "2895e9889c6fae6a6ba845d3d359a028", "pages": [ { "idx": 0, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/1-f174f57196f4482dccbe8ba1940302dce209c7d560bdf52ae9d21840b9b15828.png" }, { "idx": 1, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/2-8b4e0f3b0eab1a34092e1043d70d15760e6864f28b4b3b3d2ba378a5de6493af.png" }, { "idx": 2, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/3-f830bf17745cde239a9802529f4c2c960d505db8118202ce9d7729a0429edb34.png" }, { "idx": 3, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/4-769605d5789328d8add840c495c96f186073d4fdd3f2a4f518700a2bd6be6c93.png" }, { "idx": 4, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/5-566c2109e80273bade94646a9e8cb7359274edbd63ad8b7fd5a3984f56b79ff5.png" }, { "idx": 5, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/6-655cebeae39a3e3f375ccabd80710b7758b92529162a896c10bfd3268a94d6a3.png" }, { "idx": 6, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/7-d35c64e6d3916f1c2c30a0241839d838d83f8ec1bf0d928e7a90d1da155c847e.png" }, { "idx": 7, "url": "https://cmdxd98sb0x3yprd.mangadex.network/data/2895e9889c6fae6a6ba845d3d359a028/8-3469dd9b9f5b495816db0ce680d31f0ffe648ab496f781422f8c9bf41dc44556.png" } ], "total": 19, "chapterId": "1e11c8b5-bd2d-4bd0-8c12-431a69d6736e" } ``` --- ### Search Search manga titles and return matching results with metadata. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/downloader:mangadex/search` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `title` | string | query | yes | Manga title (partial match) | | `limit` | number | query | no | Result limit. Default 10, max 50 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/downloader:mangadex/search?title=Berserk&limit=10" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/downloader:mangadex/search?title=Berserk&limit=10", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/downloader:mangadex/search?title=Berserk&limit=10", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "query": "one piece", "total": 5, "results": [ { "id": "a1c7c817-4e59-43b7-9365-09675a149a6f", "year": 1997, "title": "One Piece", "status": "ongoing", "altTitles": [ "ワンピース", "Ван Піс", "One Piece. Большой куш", "Ван Пис", "وان پیس" ], "description": "Gol D. Roger, a man referred to as the \"Pirate King,\" is set to be executed by the World Government. But just before his demise, he confirms the existence of a great treasure, One Piece, located somewhere within the vast ocean known as the Grand Line. Announcing that One Piece can be claimed by anyone worthy enough to reach it, the Pirate King is executed and the Great Age of Pirates begins. \n \nTwenty-two years later, a young man by the name of Monkey D. Luffy is ready to embark on his own adv", "lastChapter": "", "contentRating": "suggestive", "originalLanguage": "ja" }, { "id": "a0b49136-9f4d-46d4-b5dd-d5393e015009", "year": 2014, "title": "One Piece Party", "status": "completed", "altTitles": [ "ワンピースパーティー" ], "description": "Spin-off of One Piece, which takes place post-timeskip, showing the cast in SD/chibi form and features their hilarious antics around various islands while out in the sea.", "lastChapter": "34", "contentRating": "safe", "originalLanguage": "ja" }, { "id": "b70113a5-32a3-44e8-a28f-0e88392808ba", "year": 2019, "title": "One Piece Academy", "status": "ongoing", "altTitles": [ "ONE PIECE学園", "One Piece Gakuen", "One Piece School", "One Piece Akademisi", "Học Viện One Piece" ], "description": "A spin off where the One Piece cast goes to a big academy & lives modern lives.", "lastChapter": "", "contentRating": "safe", "originalLanguage": "ja" }, { "id": "470ac1ec-c3dd-4dc2-9e5d-0104600ed1a5", "year": 2020, "title": "One Piece: Ace’s Story—The Manga", "status": "completed", "altTitles": [ "One Piece Episode Ace", "ワンピース エピソード A", "ワンピース エピソード エース", "Roronoa Zoro, Umi ni Chiru", "ロロノア・ゾロ海に散る" ], "description": "Washed up on the shores of a deserted island at the edge of the East Blue Sea, two men from different backgrounds unite in their shared thirst for adventure. One of them, Portgaz D. Ace, will follow in his infamous father’s footsteps as the fearless captain of a pirate crew. The other, Masked Deuce, becomes the reluctant first member of Ace’s Spade Pirates. Survival is not enough for these seafaring buccaneers, as together they seek treasure, excitement, and a route to the New World.\n\n---\n**Note", "lastChapter": "4", "contentRating": "safe", "originalLanguage": "ja" }, { "id": "a2c1d849-af05-4bbc-b2a7-866ebb10331f", "year": 2012, "title": "One Piece (Official Colored)", "status": "ongoing", "altTitles": [ "Ван Пис", "ون پیس", "海贼王", "원피스", "ONE PIECE カラー版" ], "description": "Gol D. Roger, a man referred to as the \"Pirate King,\" is set to be executed by the World Government. But just before his demise, he confirms the existence of a great treasure, One Piece, located somewhere within the vast ocean known as the Grand Line. \n\nAnnouncing that One Piece can be claimed by anyone worthy enough to reach it, the Pirate King is executed and the Great Age of Pirates begins. \n \nTwenty years later, a young man by the name of Monkey D. Luffy is ready to embark on his own adven", "lastChapter": "", "contentRating": "suggestive", "originalLanguage": "ja" } ] } ``` --- _Generated: 2026-08-02T14:30:06.710Z_