Dokumentasi API
Dokumentasi Wisepage
Semua yang Anda butuhkan untuk memanggil Wisepage dari kode Anda: autentikasi, setiap endpoint beserta parameternya, penagihan kredit dan kode error.
Mulai cepat
Semua endpoint ada di https://api.wisepage.dev. Kirim JSON lewat POST dengan API key Anda di header. Selama beta privat, API key dikirim lewat email setelah Anda mendaftar.
curl https://api.wisepage.dev/v1/scrape \
-H "Authorization: Bearer $WISEPAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'
Mau langsung dipakai di Claude Code, Cursor atau VS Code? Lihat panduan MCP. Kredit, batas dan log pemakaiannya sama dengan REST.
Autentikasi
Kirim API key di header Authorization: Bearer wsp_live_..., atau di header x-api-key. Simpan key di variabel lingkungan atau secret manager, jangan di kode yang dibagikan. Kalau key bocor, kirim email ke hello@wisepage.dev dan kami ganti.
Format respons
Respons yang berhasil selalu berbentuk {"success": true, "credits_used": ..., "data": ...}. Respons error memakai status HTTP yang sesuai dan bentuk berikut:
{ "error": { "code": "url_not_allowed", "message": "Private and reserved IP addresses are not allowed" } }
Pakai code di kode Anda; message ditujukan untuk manusia dan bisa berubah. Daftar lengkapnya ada di Kode error.
Kredit dan harga
Sebelum request dijalankan, biaya maksimumnya ditahan dari saldo. Setelah selesai, Anda hanya membayar yang benar-benar terpakai dan sisanya langsung kembali. Request yang gagal tidak ditagih sama sekali.
| Endpoint | Biaya |
|---|---|
scrape | 1 kredit per halaman; PDF 1 kredit per 10 halaman |
batch/scrape | 1 kredit per halaman yang berhasil |
crawl | 1 kredit per halaman yang berhasil |
map | 1 kredit per panggilan |
search | 3 kredit, +1 per hasil yang di-scrape |
extract | 5 kredit + 4 per 1.000 token masuk + 20 per 1.000 token keluar (biasanya 15–30) |
usage | Gratis |
Setiap respons mencantumkan credits_used. Kalau saldo tidak cukup, API membalas 402 insufficient_credits tanpa menjalankan request.
Batas pemakaian
- 60 request per menit per API key. Sisa kuotanya ada di header
X-RateLimit-Remaining. Lewat dari itu, API membalas429 rate_limited. - Batas per domain untuk gabungan semua pelanggan, supaya situs yang dibaca tidak terbebani. Kalau tercapai, API membalas
429 domain_rate_limiteddengandetails.retry_after_ms.batch/scrapedancrawlsudah mencobanya ulang otomatis. - Ukuran: halaman web maksimal 5 MB, PDF maksimal 20 MB dan 100 halaman.
- Waktu: satu halaman maksimal 60 detik (
timeout_ms, default 20 detik);batch/scrapedancrawlpunya anggaran sekitar 60 detik per panggilan.
Cache
Halaman yang baru diambil disimpan sebentar, jadi request yang sama lebih cepat dan situs tidak diambil ulang. Atur umur salinan yang Anda terima dengan max_age (detik, default 3600, maksimal 86400). Pakai "max_age": 0 untuk selalu mengambil versi terbaru. Respons menyertakan cached dan fetched_at, dan salinan dari cache ditagih sama seperti pengambilan baru.
Endpoint
POST/v1/scrape
Mengambil satu halaman web atau file PDF dan mengembalikannya sebagai markdown bersih beserta metadata. Halaman yang butuh JavaScript dirender otomatis.
| Parameter | Tipe | Keterangan |
|---|---|---|
url wajib | string | Halaman atau PDF yang diambil (http atau https). |
formats | array | markdown, html, links. Default ["markdown"]. |
only_main_content | boolean | Buang menu, header, footer dan iklan. Default true. |
render | string | auto (hanya kalau perlu JavaScript), always atau never. Default auto. |
wait_for_ms | number | Tunggu tambahan setelah halaman dimuat saat dirender, 0–10.000. |
timeout_ms | number | 1.000–60.000. Default 20.000. |
respect_robots | boolean | Tolak URL yang dilarang robots.txt situsnya. Default false. |
max_age | number | Lihat Cache. |
{
"success": true,
"credits_used": 1,
"data": {
"url": "https://example.com/",
"status_code": 200,
"rendered": false,
"markdown": "# Example Domain\n\nThis domain is for use in ...",
"metadata": { "title": "Example Domain", "language": "en", "description": null, ... },
"cached": false,
"fetched_at": "2026-09-28T04:12:00.000Z"
}
}
POST/v1/batch/scrape
Mengambil hingga 50 URL dalam satu panggilan dengan opsi yang sama. Hasil kembali sesuai urutan input; URL yang gagal mendapat kode error tanpa menggagalkan yang lain.
| Parameter | Tipe | Keterangan |
|---|---|---|
urls wajib | array | 1–50 URL. |
Ditambah semua opsi scrape kecuali url. | ||
"data": {
"results": [
{ "url": "https://a.example/", "success": true, "data": { "markdown": "...", ... } },
{ "url": "https://b.example/", "success": false, "error": "fetch_timeout" }
],
"stats": { "succeeded": 1, "failed": 1, "stopped_reason": "done" }
}
POST/v1/crawl
Mengikuti tautan dalam satu situs mulai dari satu halaman, dan mengembalikan hingga 50 halaman sebagai markdown.
| Parameter | Tipe | Keterangan |
|---|---|---|
url wajib | string | Halaman awal. |
limit | number | Jumlah halaman maksimal, 1–50. Default 10. |
max_depth | number | Berapa tautan jauhnya dari halaman awal, 0–5. Default 2. |
include_paths, exclude_paths | array | Pola path, misalnya "/docs/*". Maksimal 20. |
include_subdomains | boolean | Ikut ke subdomain. Default false. |
use_sitemap | boolean | Tambahkan halaman dari sitemap. Default false. |
include_pdfs | boolean | Ikut membaca PDF yang ditautkan. Default false. |
respect_robots | boolean | Default true untuk crawl. |
Juga only_main_content, render dan max_age seperti scrape. | ||
Respons berisi pages (url, markdown, metadata), failed (url dan kode error) dan stats. Kredit untuk limit halaman ditahan di awal; halaman yang gagal atau tidak sempat diambil dikembalikan.
POST/v1/map
Mendaftar URL sebuah situs dari sitemap dan tautan di halamannya, tanpa membuka setiap halaman. Cocok untuk memilih halaman sebelum batch/scrape.
| Parameter | Tipe | Keterangan |
|---|---|---|
url wajib | string | Halaman mana pun di situs itu. |
limit | number | 1–5.000. Default 500. |
search | string | Hanya URL yang mengandung teks ini. |
sitemap | string | include, skip atau only. Default include. |
Juga include_subdomains, include_paths, exclude_paths dan include_pdfs seperti crawl. | ||
POST/v1/search
Mencari di web (hasil Google) dan mengembalikan judul, URL dan cuplikan. Aktifkan scrape_results untuk sekalian mendapat isi setiap halaman sebagai markdown.
| Parameter | Tipe | Keterangan |
|---|---|---|
query wajib | string | Kata kunci, maksimal 400 karakter. |
limit | number | 1–10. Default 5. |
country | string | Kode negara dua huruf, misalnya id. |
language | string | Bahasa hasil, misalnya id. |
scrape_results | boolean | Ambil juga isi setiap hasil. Default false. |
POST/v1/extract
Mengambil data terstruktur dari satu halaman atau PDF sesuai JSON Schema Anda. Responsnya selalu cocok dengan skema.
| Parameter | Tipe | Keterangan |
|---|---|---|
url wajib | string | Halaman atau PDF sumber data. |
schema wajib | object | JSON Schema dengan akar "type": "object", maksimal 20.000 karakter. |
prompt | string | Instruksi tambahan, maksimal 4.000 karakter. |
Juga render, timeout_ms dan max_age seperti scrape. | ||
curl https://api.wisepage.dev/v1/extract \
-H "Authorization: Bearer $WISEPAGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://toko.example/produk/123",
"schema": {
"type": "object",
"properties": {
"nama": { "type": "string" },
"harga": { "type": "number" },
"tersedia": { "type": "boolean" }
},
"required": ["nama", "harga"]
}
}'
Respons berisi data (hasil sesuai skema), source (url, judul, dan truncated kalau halaman lebih dari 60.000 karakter dipotong) dan usage (token yang dipakai). Anda perlu minimal 5 kredit untuk memulai; setelah halaman diambil, biaya maksimum untuk halaman itu ditahan lalu sisanya dikembalikan.
GET/v1/usage
Sisa kredit dan daftar panggilan terakhir beserta biaya dan statusnya. Parameter query limit 1–200, default 50. Gratis.
"data": {
"credits_remaining": 4812,
"recent": [ { "operation": "scrape", "credits": 1, "success": true, "duration_ms": 412, ... } ]
}
Semua endpoint yang mengambil halaman juga bisa membaca PDF, termasuk file yang dikirim server sebagai unduhan biasa. Isinya dikembalikan sebagai markdown yang rapi: judul, paragraf, daftar dan tabel disusun ulang dari tata letaknya, sedangkan header, footer dan nomor halaman yang berulang dibuang. Penanda <!-- page N --> memisahkan halaman, dan respons menyertakan pdf: { pages, pages_parsed, truncated }.
Hingga 100 halaman dan 20 MB dibaca per file, dengan biaya 1 kredit per 10 halaman. PDF hasil scan tanpa lapisan teks dibalas 422 pdf_no_text, dan PDF berpassword 422 pdf_encrypted.
Spesifikasi OpenAPI
Semua endpoint di halaman ini juga tersedia sebagai file OpenAPI (YAML). File itu ditujukan untuk program, bukan untuk dibaca langsung: impor ke Postman atau Insomnia untuk mencoba setiap endpoint, buka di Swagger UI atau Redoc untuk dokumentasi interaktif, atau pakai generator kode untuk membuat library di bahasa Anda.
https://wisepage.dev/openapi.yaml
Kode error
| Status | Kode | Artinya |
|---|---|---|
| 400 | invalid_request | Body tidak valid. details menunjukkan field mana yang salah. |
| 400 | url_not_allowed | URL bukan http(s) publik, misalnya alamat jaringan privat. |
| 400 | invalid_schema | JSON Schema untuk extract tidak valid atau tidak didukung. |
| 401 | missing_api_key, invalid_api_key | API key tidak dikirim, salah, atau sudah dicabut. |
| 402 | insufficient_credits | Saldo tidak cukup untuk request ini. |
| 403 | blocked_by_robots | robots.txt situs melarang URL ini. |
| 403 | domain_blocked | Pemilik situs meminta situsnya tidak diambil. |
| 413 | response_too_large | Halaman lebih dari 5 MB atau PDF lebih dari 20 MB. |
| 415 | unsupported_content_type | Tipe file belum didukung, misalnya gambar atau ZIP. |
| 422 | pdf_no_text, pdf_encrypted, pdf_invalid | PDF hasil scan, berpassword, atau rusak. |
| 422 | extract_refused | Model menolak mengambil data dari halaman ini. |
| 429 | rate_limited, domain_rate_limited | Terlalu banyak request; lihat Batas pemakaian. |
| 502 | fetch_failed, dns_failed, too_many_redirects, render_failed | Situs tujuan tidak bisa diambil. |
| 502 | extract_failed, extract_truncated, search_failed | Penyedia AI atau pencarian bermasalah, atau hasil extract terlalu besar. |
| 503 | browser_busy, pdf_busy, extract_busy, search_busy | Kapasitas sedang penuh; coba lagi sebentar. |
| 504 | fetch_timeout | Situs tidak merespons dalam batas waktu. |
Semua error di atas tidak ditagih. Masih ada pertanyaan? Tulis ke hello@wisepage.dev.