# Web Tools — Zapi reference > Every Web Tools endpoint on Zapi, with parameters, request shape and an example response. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a key at https://zpi.web.id/dashboard/keys (free tier — 2,000 req/mo, no credit card). **Response envelope:** `{ status: "success" | "error", message: string, content: }` **Rate limit:** 60 req/min (free tier). Per-endpoint cache TTL is documented below. **Errors:** standard HTTP codes (`401` invalid key, `429` rate limited, `5xx` upstream). Body always has `{ status: "error", message, errors? }`. ```bash curl "https://api.zpi.web.id/v1/CATEGORY:SCRAPER/ENDPOINT?param=value" \ -H "x-api-key: $ZAPI_KEY" ``` **Category page:** https://zpi.web.id/category/web-tools **Full catalog:** https://zpi.web.id/apis · **Index:** https://zpi.web.id/llms-full.txt --- ## BIN Lookup **Category:** web-tools · **Slug:** `bin-lookup` **Detail page:** https://zpi.web.id/api/web-tools/bin-lookup Look up bank identification number details for a given card BIN prefix. **Tags:** utility, bin, card ### Lookup BIN Retrieve issuer and card metadata for a BIN prefix. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:bin-lookup/lookup` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `bin` | string | query | yes | Card BIN/IIN (6-8 digit pertama nomor kartu) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:bin-lookup/lookup?bin=45717360" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:bin-lookup/lookup?bin=45717360", { 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/web-tools:bin-lookup/lookup?bin=45717360", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "bin": "45717360", "bank": { "name": "Jyske Bank A/S" }, "type": "debit", "brand": "Visa Classic/Dankort", "scheme": "visa", "country": { "name": "Denmark", "emoji": "🇩🇰", "alpha2": "DK", "numeric": "208", "currency": "DKK", "latitude": 56, "longitude": 10 } } ``` --- ## BuiltWith Analyzer **Category:** web-tools · **Slug:** `builtwith` **Detail page:** https://zpi.web.id/api/web-tools/builtwith Tech stack detector — framework, CMS, analytics, CDN, dan lainnya. **Tags:** tools, built with, detection ### Detect - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:builtwith/detect` - **Cache TTL:** 3600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `domain` | string | query | yes | Domain atau URL target (http/https opsional, www opsional) | | `scanRobots` | boolean | query | no | Scan /robots.txt juga. Default true | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:builtwith/detect?domain=https%3A%2F%2Fcakinvestmentclub.com&scanRobots=true" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:builtwith/detect?domain=https%3A%2F%2Fcakinvestmentclub.com&scanRobots=true", { 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/web-tools:builtwith/detect?domain=https%3A%2F%2Fcakinvestmentclub.com&scanRobots=true", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "url": "https://cakinvestmentclub.com/", "title": "Cak Investment Club", "domain": "cakinvestmentclub.com", "categories": [ { "items": [ { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/CloudFlare.svg", "name": "Cloudflare Browser Insights", "version": "", "website": "https://www.cloudflare.com", "evidence": [ "scriptSrc: https://static.cloudflareinsights.com/beacon.min.js/v833ccba" ], "confidence": 100 }, { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/Facebook.svg", "name": "Facebook Pixel", "version": "", "website": "https://facebook.com", "evidence": [ "inline script" ], "confidence": 100 }, { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/Google Analytics.svg", "name": "Google Analytics", "version": "GA4", "website": "https://google.com/analytics", "evidence": [ "inline script" ], "confidence": 100 }, { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/Microsoft Clarity.svg", "name": "Microsoft Clarity", "version": "", "website": "https://clarity.microsoft.com", "evidence": [ "js prop clarity" ], "confidence": 100 } ], "category": "Analytics" }, { "items": [ { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/CloudFlare.svg", "name": "Cloudflare", "version": "", "website": "https://www.cloudflare.com", "evidence": [ "header server", "header cf-cache-status", "header cf-ray" ], "confidence": 100 } ], "category": "CDN" }, { "items": [ { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/Next.js.svg", "name": "Next.js", "version": "", "website": "https://nextjs.org", "evidence": [ "header x-powered-by" ], "confidence": 100 }, { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/React.svg", "name": "React", "implied": true, "version": "", "website": "https://reactjs.org", "evidence": [ "implied by Next.js" ], "confidence": 100 } ], "category": "JavaScript frameworks" }, { "items": [ { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/HTTP3.svg", "name": "HTTP/3", "version": "", "website": "https://httpwg.org/", "evidence": [ "header alt-svc" ], "confidence": 100 }, { "icon": "https://raw.githubusercontent.com/enthec/webappanalyzer/main/src/images/icons/Webpack.svg", "name": "Webpack", "implied": true, "version": "", "website": "https://webpack.js.org/", "evidence": [ "implied by Next.js" ], "confidence": 100 } ], "category": "Miscellaneous" } ], "statusCode": 200, "signatureCount": 7518, "totalTechnologies": 9 } ``` --- ## Cek Email Leak **Category:** web-tools · **Slug:** `cek-email-leak` **Detail page:** https://zpi.web.id/api/web-tools/cek-email-leak Cek apakah email kamu pernah bocor dalam data breach — daftar sumber kebocoran, tanggal, data yang bocor, dan jumlah yang terdampak. **Tags:** email, security, leak ### Check Email - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:cek-email-leak/check` - **Cache TTL:** 3600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `email` | string | query | yes | Alamat email yang ingin dicek kebocoran datanya | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:cek-email-leak/check?email=admin%40google.com" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:cek-email-leak/check?email=admin%40google.com", { 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/web-tools:cek-email-leak/check?email=admin%40google.com", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "email": "admin@google.com", "isSafe": false, "message": "[email protected] telah menjadi korban   107  peristiwa kebocoran data", "breaches": [ { "date": "", "source": "Adobe", "leakedData": "Email, Password hints, Password dll", "totalExposed": "152,445,165" }, { "date": "", "source": "Pokémon Creed", "leakedData": "Email, Jenis kelamin, Alamat IP dll", "totalExposed": "116,465" }, { "date": "", "source": "Domino's", "leakedData": "Email, Nama Lengkap, Password dll", "totalExposed": "648,231" }, { "date": "", "source": "Lizard Squad", "leakedData": "Email, Password, Username dll", "totalExposed": "13,451" }, { "date": "", "source": "000webhost", "leakedData": "Email, Alamat IP, Nama Lengkap dll", "totalExposed": "14,936,670" }, { "date": "", "source": "Gamigo", "leakedData": "Email, Password, dll", "totalExposed": "8,243,604" }, { "date": "", "source": "LinkedIn", "leakedData": "Email, Password, dll", "totalExposed": "164,611,595" }, { "date": "", "source": "tumblr", "leakedData": "Email, Password, dll", "totalExposed": "65,469,298" }, { "date": "", "source": "MySpace", "leakedData": "Email, Password, Username dll", "totalExposed": "359,420,698" }, { "date": "", "source": "VK", "leakedData": "Email, Nama Lengkap, Password dll", "totalExposed": "93,338,602" }, { "date": "", "source": "WHMCS", "leakedData": "Email, Pesan email, Pemberi kerja dll", "totalExposed": "134,047" }, { "date": "", "source": "Tianya", "leakedData": "Email, Nama Lengkap, Username dll", "totalExposed": "29,020,808" }, { "date": "", "source": "iMesh", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "49,467,477" }, { "date": "", "source": "Neopets", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "26,892,897" }, { "date": "", "source": "Dropbox", "leakedData": "Email, Password, dll", "totalExposed": "68,648,009" }, { "date": "", "source": "Last.fm", "leakedData": "Email, Password, Username dll", "totalExposed": "37,217,682" }, { "date": "", "source": "Leet", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "5,081,689" }, { "date": "", "source": "NetEase", "leakedData": "Email, Password, dll", "totalExposed": "234,842,089" }, { "date": "", "source": "GeekedIn", "leakedData": "Email, Lokasi geografis, Nama Lengkap dll", "totalExposed": "1,073,164" }, { "date": "", "source": "QIP", "leakedData": "Email, Password, Username dll", "totalExposed": "26,183,992" }, { "date": "", "source": "River City Media Spam List", "leakedData": "Email, Alamat IP, Nama Lengkap dll", "totalExposed": "393,430,309" }, { "date": "", "source": "Evony", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "29,396,116" }, { "date": "", "source": "Youku", "leakedData": "Email, Password, dll", "totalExposed": "91,890,110" }, { "date": "", "source": "Anti Public Combo List", "leakedData": "Email, Password, dll", "totalExposed": "457,962,538" }, { "date": "", "source": "Exploit.In", "leakedData": "Email, Password, dll", "totalExposed": "593,427,119" }, { "date": "", "source": "Programming Forums", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "707,432" }, { "date": "", "source": "Dailymotion", "leakedData": "Email, Password, Username dll", "totalExposed": "85,176,234" }, { "date": "", "source": "Onliner Spambot", "leakedData": "Email, Password, dll", "totalExposed": "711,477,622" }, { "date": "", "source": "7k7k", "leakedData": "Email, Password, Username dll", "totalExposed": "9,121,434" }, { "date": "", "source": "Bitly", "leakedData": "Email, Password, Username dll", "totalExposed": "9,313,136" }, { "date": "", "source": "Kickstarter", "leakedData": "Email, Password, dll", "totalExposed": "5,176,463" }, { "date": "", "source": "Disqus", "leakedData": "Email, Password, Username dll", "totalExposed": "17,551,044" }, { "date": "", "source": "2,844 Separate Data Breaches", "leakedData": "Email, Password, dll", "totalExposed": "80,115,532" }, { "date": "", "source": "Pemiblanc", "leakedData": "Email, Password, dll", "totalExposed": "110,964,206" }, { "date": "", "source": "League of Legends", "leakedData": "Email, Password, Username dll", "totalExposed": "339,487" }, { "date": "", "source": "Apollo", "leakedData": "Email, Pemberi kerja, Lokasi geografis dll", "totalExposed": "125,929,660" }, { "date": "", "source": "Collection #1", "leakedData": "Email, Password, dll", "totalExposed": "772,904,991" }, { "date": "", "source": "MyHeritage", "leakedData": "Email, Password, dll", "totalExposed": "91,991,358" }, { "date": "", "source": "MyFitnessPal", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "143,606,147" }, { "date": "", "source": "Dubsmash", "leakedData": "Email, Lokasi geografis, Nama Lengkap dll", "totalExposed": "161,749,950" }, { "date": "", "source": "ShareThis", "leakedData": "Tanggal lahir, Email, Nama Lengkap dll", "totalExposed": "40,960,499" }, { "date": "", "source": "Verifications.io", "leakedData": "Tanggal lahir, Email, Pemberi kerja dll", "totalExposed": "763,117,241" }, { "date": "", "source": "500px", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "14,867,999" }, { "date": "", "source": "D3Scene", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "568,827" }, { "date": "", "source": "Animoto", "leakedData": "Tanggal lahir, Email, Lokasi geografis dll", "totalExposed": "22,437,749" }, { "date": "", "source": "GameSalad", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "1,506,242" }, { "date": "", "source": "Canva", "leakedData": "Email, Lokasi geografis, Nama Lengkap dll", "totalExposed": "137,272,116" }, { "date": "", "source": "Chegg", "leakedData": "Email, Nama Lengkap, Password dll", "totalExposed": "39,721,127" }, { "date": "", "source": "Data Enrichment Exposure From PDL Customer", "leakedData": "Email, Pemberi kerja, Lokasi geografis dll", "totalExposed": "622,161,052" }, { "date": "", "source": "Zynga", "leakedData": "Email, Password, Nomor telepon dll", "totalExposed": "172,869,660" }, { "date": "", "source": "Covve", "leakedData": "Email, Pekerjaan, Nama Lengkap dll", "totalExposed": "22,802,117" }, { "date": "", "source": "Artsy", "leakedData": "Email, Alamat IP, Nama Lengkap dll", "totalExposed": "1,079,970" }, { "date": "", "source": "LiveJournal", "leakedData": "Email, Password, Username dll", "totalExposed": "26,372,781" }, { "date": "", "source": "Lead Hunter", "leakedData": "Email, Jenis kelamin, Alamat IP dll", "totalExposed": "68,693,853" }, { "date": "", "source": "Zoomcar", "leakedData": "Email, Alamat IP, Nama Lengkap dll", "totalExposed": "3,589,795" }, { "date": "", "source": "Mathway", "leakedData": "Informasi perangkat, Email, Nama Lengkap dll", "totalExposed": "25,692,862" }, { "date": "", "source": "Wattpad", "leakedData": "Bios, Tanggal lahir, Email dll", "totalExposed": "268,765,495" }, { "date": "", "source": "Appen", "leakedData": "Email, Pemberi kerja, Alamat IP dll", "totalExposed": "5,888,405" }, { "date": "", "source": "StarTribune", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "2,192,857" }, { "date": "", "source": "Animal Jam", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "7,104,998" }, { "date": "", "source": "Cit0day", "leakedData": "Email, Password, dll", "totalExposed": "226,883,414" }, { "date": "", "source": "Nitro", "leakedData": "Email, Nama Lengkap, Password dll", "totalExposed": "77,159,696" }, { "date": "", "source": "ShopBack", "leakedData": "Email, Lokasi geografis, Nama Lengkap dll", "totalExposed": "20,529,819" }, { "date": "", "source": "JD", "leakedData": "Email, Password, Nomor telepon dll", "totalExposed": "77,449,341" }, { "date": "", "source": "Domino's India", "leakedData": "Email, Nama Lengkap, Nomor telepon dll", "totalExposed": "22,527,655" }, { "date": "", "source": "Raychat", "leakedData": "User agent, Email, Alamat IP dll", "totalExposed": "938,981" }, { "date": "", "source": "SubaGames", "leakedData": "Email, Password, Username dll", "totalExposed": "6,137,666" }, { "date": "", "source": "Epik", "leakedData": "Email, Nama Lengkap, Nomor telepon dll", "totalExposed": "15,003,961" }, { "date": "", "source": "Gravatar", "leakedData": "Email, Nama Lengkap, Username dll", "totalExposed": "113,990,759" }, { "date": "", "source": "RedLine Stealer", "leakedData": "Email, Password, Username dll", "totalExposed": "441,657" }, { "date": "", "source": "CDEK", "leakedData": "Email, Nama Lengkap, Nomor telepon dll", "totalExposed": "19,218,203" }, { "date": "", "source": "PayHere", "leakedData": "Email, Alamat IP, Nama Lengkap dll", "totalExposed": "1,580,249" }, { "date": "", "source": "SitePoint", "leakedData": "Bios, Email, Alamat IP dll", "totalExposed": "1,021,790" }, { "date": "", "source": "CoinTracker", "leakedData": "Email, Partial phone numbers, dll", "totalExposed": "1,557,153" }, { "date": "", "source": "Deezer", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "229,037,936" }, { "date": "", "source": "SlideTeam", "leakedData": "Email, Nama Lengkap, Password dll", "totalExposed": "1,464,271" }, { "date": "", "source": "Instant Checkmate", "leakedData": "Email, Nama Lengkap, Password dll", "totalExposed": "11,943,887" }, { "date": "", "source": "Eye4Fraud", "leakedData": "Email, Alamat IP, Nama Lengkap dll", "totalExposed": "16,000,591" }, { "date": "", "source": "Luxottica", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "77,093,812" }, { "date": "", "source": "Duolingo", "leakedData": "Email, Nama Lengkap, Bahasa lisan dll", "totalExposed": "2,676,696" }, { "date": "", "source": "Phished Data via CERT Poland", "leakedData": "Email, Password, dll", "totalExposed": "67,943" }, { "date": "", "source": "GameSprite", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "6,164,643" }, { "date": "", "source": "Naz.API", "leakedData": "Email, Password, dll", "totalExposed": "70,840,771" }, { "date": "", "source": "Trello", "leakedData": "Email, Nama Lengkap, Username dll", "totalExposed": "15,111,945" }, { "date": "", "source": "MyPertamina", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "5,970,416" }, { "date": "", "source": "Kaspersky Club", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "55,971" }, { "date": "", "source": "Operation Endgame", "leakedData": "Email, Password, dll", "totalExposed": "16,466,858" }, { "date": "", "source": "Combolists Posted to Telegram", "leakedData": "Email, Password, Username dll", "totalExposed": "361,468,099" }, { "date": "", "source": "Stealer Logs Posted to Telegram", "leakedData": "Email, Password, dll", "totalExposed": "26,105,473" }, { "date": "", "source": "Internet Archive", "leakedData": "Email, Password, Username dll", "totalExposed": "31,081,179" }, { "date": "", "source": "VimeWorld", "leakedData": "Email, Alamat IP, Password dll", "totalExposed": "3,118,964" }, { "date": "", "source": "Z-lib", "leakedData": "Cryptocurrency wallet addresses, Email, Lokasi geografis dll", "totalExposed": "9,737,374" }, { "date": "", "source": "Stealer Logs, Jan 2025", "leakedData": "Email, Password, dll", "totalExposed": "71,039,833" }, { "date": "", "source": "Zacks (2024)", "leakedData": "Email, Alamat IP, Nama Lengkap dll", "totalExposed": "11,994,223" }, { "date": "", "source": "Storenvy", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "11,052,071" }, { "date": "", "source": "ALIEN TXTBASE Stealer Logs", "leakedData": "Email, Password, dll", "totalExposed": "284,132,969" }, { "date": "", "source": "Operation Endgame 2.0", "leakedData": "Email, Password, dll", "totalExposed": "15,436,844" }, { "date": "", "source": "Data Troll Stealer Logs", "leakedData": "Email, Password, dll", "totalExposed": "109,532,219" }, { "date": "", "source": "Synthient Stealer Log Threat Data", "leakedData": "Email, Password, dll", "totalExposed": "182,962,095" }, { "date": "", "source": "Synthient Credential Stuffing Threat Data", "leakedData": "Email, Password, dll", "totalExposed": "1,957,476,021" }, { "date": "", "source": "Operation Endgame 3.0", "leakedData": "Email, Password, dll", "totalExposed": "2,046,030" }, { "date": "", "source": "China Software Developer Network", "leakedData": "Email, Password, Username dll", "totalExposed": "6,414,990" }, { "date": "", "source": "WIRED", "leakedData": "Tanggal lahir, Display names, Email dll", "totalExposed": "2,364,431" }, { "date": "", "source": "BreachForums (2025)", "leakedData": "Email, Forum posts, Password dll", "totalExposed": "672,247" }, { "date": "", "source": "Under Armour", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "72,742,892" }, { "date": "", "source": "SoundCloud", "leakedData": "Avatar, Email, Lokasi geografis dll", "totalExposed": "29,815,722" }, { "date": "", "source": "Canadian Tire", "leakedData": "Tanggal lahir, Email, Jenis kelamin dll", "totalExposed": "38,306,562" } ], "checkedAt": "2026-05-22T23:39:24.090Z", "breachCount": 160 } ``` --- ## Jina Reader **Category:** web-tools · **Slug:** `jina-reader` **Detail page:** https://zpi.web.id/api/web-tools/jina-reader Convert any webpage ke clean Markdown via Jina Reader — ideal untuk AI/LLM ingestion. Strip nav, ads, scripts; keep title + content. **Tags:** reader, markdown, ai, extract ### Read Fetch & extract content sebagai markdown. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:jina-reader/read` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `url` | string | query | yes | URL lengkap halaman yang akan di-extract menjadi Markdown bersih | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:jina-reader/read?url=https%3A%2F%2Fexample.com" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:jina-reader/read?url=https%3A%2F%2Fexample.com", { 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/web-tools:jina-reader/read?url=https%3A%2F%2Fexample.com", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "url": "https://example.com", "title": "Example Domain", "source": "r.jina.ai", "content": "This domain is for use in documentation examples without needing permission. Avoid use in operations.\n\n[Learn more](https://iana.org/domains/example)", "finalUrl": "https://example.com/", "wordCount": 17, "publishedTime": "Fri, 22 May 2026 08:19:40 GMT" } ``` --- ## QR Generator **Category:** web-tools · **Slug:** `qr-generate` **Detail page:** https://zpi.web.id/api/web-tools/qr-generate Generate QR code images from text or URL input with size and format options. **Tags:** utility, qr ### Encode QR Encode input text into a QR code image. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:qr-generate/encode` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `data` | string | query | yes | Text/URL to encode (max 2KB) | | `size` | number | query | no | Image size in pixels (100-1000). Default 300 | | `format` | enum(png|svg|jpg) | query | no | Output format. Default png | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:qr-generate/encode?data=https%3A%2F%2Fzpi.web.id&size=500&format=png" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:qr-generate/encode?data=https%3A%2F%2Fzpi.web.id&size=500&format=png", { 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/web-tools:qr-generate/encode?data=https%3A%2F%2Fzpi.web.id&size=500&format=png", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "size": 500, "format": "png", "imageUrl": "https://api.qrserver.com/v1/create-qr-code/?data=https%3A%2F%2Fzpi.web.id&size=500x500&format=png" } ``` --- ## Domain Availability **Category:** web-tools · **Slug:** `rdap` **Detail page:** https://zpi.web.id/api/web-tools/rdap Check domain registration availability via RDAP protocol. **Tags:** utility, domain, rdap, availability ### Check Availability Check if a domain is registered or available. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:rdap/availability` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `domain` | string | query | yes | Domain name (akan di-normalize: strip protocol, www, path) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:rdap/availability?domain=google.com" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:rdap/availability?domain=google.com", { 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/web-tools:rdap/availability?domain=google.com", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "domain": "google.com", "expires": "2028-09-14T04:00:00Z", "available": false, "registrar": "MarkMonitor Inc.", "registered": "1997-09-15T04:00:00Z" } ``` --- ## Translate **Category:** web-tools · **Slug:** `translate` **Detail page:** https://zpi.web.id/api/web-tools/translate Translate text between languages. **Tags:** utility, translate, i18n ### Translate Text Translate input text from a source to a target language. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:translate/translate` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `text` | string | query | yes | Text to translate (max 5KB) | | `from` | string | query | no | Source language (ISO 639-1). Default en | | `to` | string | query | no | Target language (ISO 639-1). Default id | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:translate/translate?text=Hello%20world&from=en&to=id" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:translate/translate?text=Hello%20world&from=en&to=id", { 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/web-tools:translate/translate?text=Hello%20world&from=en&to=id", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "match": 0.99, "sourceText": "Hello world", "translatedText": "Halo dunia" } ``` --- ## Wayback Machine **Category:** web-tools · **Slug:** `wayback` **Detail page:** https://zpi.web.id/api/web-tools/wayback Lookup archived snapshot dari Internet Archive Wayback Machine — find historical version of any URL by date. **Tags:** archive, wayback, snapshot, history ### Snapshot Lookup archived snapshot. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:wayback/snapshot` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `url` | string | query | yes | URL lengkap yang ingin dicari snapshot-nya | | `timestamp` | string | query | no | Tanggal target snapshot (YYYYMMDD atau YYYYMMDDhhmmss). Kosongkan untuk snapshot terbaru | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:wayback/snapshot?url=https%3A%2F%2Fexample.com×tamp=20230101" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:wayback/snapshot?url=https%3A%2F%2Fexample.com×tamp=20230101", { 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/web-tools:wayback/snapshot?url=https%3A%2F%2Fexample.com×tamp=20230101", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "url": "https://example.com", "found": true, "source": "web.archive.org", "snapshot": { "url": "https://web.archive.org/web/20230101000811/https://example.com/", "status": "200", "available": true, "timestamp": "20230101000811", "timestampIso": "2023-01-01T00:08:11.000Z" }, "requestedTimestamp": "20230101" } ``` --- ## Weather Forecast **Category:** web-tools · **Slug:** `weather` **Detail page:** https://zpi.web.id/api/web-tools/weather Retrieve current weather conditions and forecast for a geographic location. **Tags:** utility, weather ### Weather Forecast Get current and forecast weather data for a location. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/web-tools:weather/forecast` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `lat` | number | query | yes | Latitude (-90..90) | | `lon` | number | query | yes | Longitude (-180..180) | | `days` | number | query | no | Forecast days (1-7). Default 3 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/web-tools:weather/forecast?lat=-6.2088&lon=106.8456&days=3" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/web-tools:weather/forecast?lat=-6.2088&lon=106.8456&days=3", { 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/web-tools:weather/forecast?lat=-6.2088&lon=106.8456&days=3", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "ok": true, "daily": { "time": [ "2026-05-27", "2026-05-28", "2026-05-29" ], "precipitation_sum": [ 0, 0, 0.7 ], "temperature_2m_max": [ 32.2, 32.7, 33.1 ], "temperature_2m_min": [ 24.1, 22.9, 23.9 ] }, "current": { "time": "2026-05-27T20:45", "interval": 900, "weather_code": 0, "temperature_2m": 27.6, "wind_speed_10m": 4.9, "relative_humidity_2m": 82 }, "latitude": -6.221441, "timezone": "Asia/Jakarta", "elevation": 12, "longitude": 106.856186, "daily_units": { "time": "iso8601", "precipitation_sum": "mm", "temperature_2m_max": "°C", "temperature_2m_min": "°C" }, "current_units": { "time": "iso8601", "interval": "seconds", "weather_code": "wmo code", "temperature_2m": "°C", "wind_speed_10m": "km/h", "relative_humidity_2m": "%" }, "generationtime_ms": 0.1575946807861328, "utc_offset_seconds": 25200, "timezone_abbreviation": "GMT+7" } ``` ---