Jawaban singkat
Parameter apa saja yang diterima endpoint read WebReaderAPI?
Endpoint /read WebReaderAPI membutuhkan satu parameter, url. Parameter opsional memilih output (format), berapa banyak halaman yang disimpan (main_content), apakah browser dijalankan (render), tautan dan gambar, negara pembacaan, batas karakter dan timeout. Halaman biasa berbiaya 1 kredit, 2 dengan browser, mulai US$0,07/1K halaman per Oktober 2026. Tanpa KYC; bayar dengan kripto.
/read at a glance
| Metode | GET dengan parameter kueri, atau POST dengan body JSON menggunakan nama yang sama |
|---|---|
| URL | https://webreaderapi.com/api/v1/read |
| Wajib | url: alamat http atau https, hingga 2.048 karakter |
| Output default | Markdown konten utama |
| Penagihan | 1 kredit = 1 halaman dibaca tanpa browser; 2 kredit jika halaman memerlukan browser untuk merender JavaScript. Permintaan yang gagal, atau yang ditolak oleh robots.txt suatu situs, tidak dikenai biaya |
| Negara | Memilih negara asal pembacaan halaman menambah 10 kredit, karena halaman kemudian dibaca melalui koneksi residensial di negara tersebut |
| File PDF hingga 20 MB dan 100 halaman dikonversi menjadi Markdown, dengan 1 kredit per blok 10 halaman yang dimulai | |
| Identitas crawler | WebReaderAPI/1.0 (+https://webreaderapi.com/bot/) |
Baca satu halaman (GET)
GET/api/v1/read
Mengambil satu halaman publik dan mengembalikan konten utamanya sebagai Markdown, beserta metadata halaman. Parameter diletakkan di query string, di-URL-encode. Contoh membaca sebuah pos blog; ID, tanggal dan nilai bersifat ilustratif.
Autentikasi: API key di header Authorization: Bearer API_KEY.
Parameter
| Nama | Di | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
url | query | string | Ya | Halaman yang akan dibaca: http atau https, maksimal 2.048 karakter. Alamat privat, lokal dan cloud metadata ditolak. |
format | query | string | Tidak | markdown (default), text (teks biasa, tanpa markup) atau html (HTML konten yang sudah dibersihkan). |
main_content | query | boolean | Tidak | true (default) hanya menyimpan artikel atau konten utama; false mengubah seluruh halaman, termasuk menu dan footer. |
render | query | string | Tidak | auto (default) hanya menjalankan browser saat HTML mentah berisi terlalu sedikit teks; true selalu; false tidak pernah. Halaman yang dirender berbiaya 2 kredit. |
include_links | query | boolean | Tidak | true menambahkan daftar {url, text} berupa links. Default false. |
include_images | query | boolean | Tidak | true menyimpan gambar sebagai  di Markdown. Default false. |
country | query | string | Tidak | Kode negara dua huruf (ISO 3166-1 alpha-2). Halaman dibaca dari alamat di negara tersebut, dengan biaya 10 kredit tambahan (koneksi residential). |
max_chars | query | integer | Tidak | Memotong output pada jumlah karakter ini, dari 1.000 hingga 500.000. Berguna agar muat dalam konteks model. |
timeout | query | integer | Tidak | Waktu tunggu untuk situs, dari 5 hingga 60 detik. Default 30. |
api_key | query | string | Tidak | API key Anda, jika Anda tidak mengirim header Authorization. |
Response 200
{
"url": "https://example.com/blog/first-post",
"final_url": "https://example.com/blog/first-post",
"status_code": 200,
"fetched_at": "2026-10-22T09:41:12Z",
"rendered": false,
"credits_used": 1,
"title": "Our first post",
"description": "Why we started this blog and what comes next.",
"language": "en",
"author": "Jane Doe",
"published_at": "2026-10-01",
"site_name": "Example Blog",
"markdown": "# Our first post\n\nWe started this blog to share what we learn...\n\n## What comes next\n\n- A post every month\n- Notes from our team",
"word_count": 612
}Contoh kode
curl -sG "https://webreaderapi.com/api/v1/read" \
-H "Authorization: Bearer $WEBREADER_API_KEY" \
--data-urlencode "url=https://example.com/blog/first-post" \
-d format=markdown -d max_chars=20000import os
import requests
resp = requests.get(
"https://webreaderapi.com/api/v1/read",
headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
params={"url": "https://example.com/blog/first-post", "max_chars": 20000},
timeout=70,
)
resp.raise_for_status()
print(resp.json()["markdown"][:300])const params = new URLSearchParams({ url: 'https://example.com/blog/first-post', max_chars: '20000' });
const res = await fetch(`https://webreaderapi.com/api/v1/read?${params}`, {
headers: { Authorization: `Bearer ${process.env.WEBREADER_API_KEY}` },
});
const page = await res.json();
console.log(page.markdown.slice(0, 300));Membaca satu halaman (POST)
POST/api/v1/read
Endpoint yang sama, parameter yang sama, dikirim sebagai body JSON. Gunakan POST jika URL sangat panjang atau jika klien HTTP Anda lebih mudah membangun JSON daripada query string. Responsnya identik dengan bentuk GET.
Autentikasi: API key di header Authorization: Bearer API_KEY.
Request body
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
url | string | Ya | Halaman yang akan dibaca. |
format, main_content, render, include_links, include_images, country, max_chars, timeout | mixed | Tidak | Seperti pada tabel GET di atas, dengan tipe JSON: boolean sebagai true/false, angka tanpa tanda kutip. |
{
"url": "https://example.com/app/pricing",
"render": "true",
"country": "de",
"include_links": true,
"max_chars": 30000
}Response 200
{
"url": "https://example.com/app/pricing",
"final_url": "https://example.com/de/app/pricing",
"status_code": 200,
"fetched_at": "2026-10-22T09:44:03Z",
"rendered": true,
"credits_used": 3,
"title": "Pricing",
"language": "de",
"markdown": "# Pricing\n\n| Plan | Price |\n|---|---|\n| Basic | ... |",
"word_count": 214,
"links": [
{
"url": "https://example.com/de/contact",
"text": "Contact"
}
]
}Contoh kode
curl -s "https://webreaderapi.com/api/v1/read" \
-H "Authorization: Bearer $WEBREADER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/app/pricing", "render": "true", "country": "de", "include_links": true}'import os
import requests
resp = requests.post(
"https://webreaderapi.com/api/v1/read",
headers={"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]},
json={"url": "https://example.com/app/pricing", "render": "true", "country": "de", "include_links": True},
timeout=70,
)
print(resp.json()["credits_used"], "credits")const res = await fetch('https://webreaderapi.com/api/v1/read', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.WEBREADER_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ url: 'https://example.com/app/pricing', render: 'true', country: 'de', include_links: true }),
});
console.log((await res.json()).credits_used);Format output mana yang harus saya pilih?
Pilih markdown untuk model bahasa dan RAG: heading, list, tabel, dan tautan tetap terjaga, dan teksnya tetap ringkas. Pilih text jika Anda hanya menghitung kata, mengklasifikasi, atau mencari, dan markup hanya akan jadi noise. Pilih html jika pipeline Anda sendiri sudah mem-parse HTML dan Anda hanya ingin elemen pengganggunya hilang.
Field metadata sama di ketiga format. Hanya nama field konten yang berubah: markdown, text, atau html.
Kapan saya harus mengatur main_content ke false?
Atur ke false jika bagian di sekitar artikel justru yang Anda butuhkan. Contohnya navigasi situs untuk memetakan bagian-bagiannya, footer berisi detail hukum atau kontak, atau halaman produk yang spesifikasinya ada di sidebar.
Dengan default true, ekstraktor mempertahankan blok konten utama dan membuang navigasi, banner cookie, iklan, tombol share, dan footer. Itulah yang diinginkan sebagian besar agent dan pipeline RAG, dan sering kali memangkas halaman menjadi sebagian kecil dari ukuran HTML-nya.
Bagaimana render=auto memutuskan untuk memakai browser?
Pertama, ia mengambil HTML mentah, yang cepat dan memakan 1 kredit. Jika HTML tersebut berisi terlalu sedikit teks yang bisa dibaca, biasanya aplikasi yang membangun halaman dengan JavaScript, ia memuat halaman lagi di browser headless dan panggilan tersebut memakan 2 kredit. Respons memberi tahu Anda jalur mana yang berjalan: rendered bernilai true atau false.
Atur render=false jika Anda tahu situs menyajikan HTML lengkap dan ingin biaya tetap. Atur render=true untuk single-page app, agar melewati percobaan pertama.
Apa yang diubah oleh country dan max_chars?
country membaca halaman dari alamat di negara yang Anda tentukan, dengan User-Agent yang sama. Gunakan untuk halaman yang harga, bahasa, atau ketersediaannya berubah menurut negara. Ini menambah 10 kredit, karena halaman kemudian dibaca melalui koneksi residensial, dan tidak dapat digunakan untuk negara tempat layanan tidak beroperasi.
max_chars memotong output setelah sejumlah karakter tersebut. Ini tidak mengubah harga, tetapi melindungi context window milik agent: 20.000 karakter adalah default yang masuk akal untuk satu halaman yang diteruskan ke model.
Apakah /read dapat menangani file PDF?
Ya. Saat URL mengembalikan PDF, teksnya dikembalikan sebagai Markdown dalam field markdown yang sama. File PDF hingga 20 MB dan 100 halaman dikonversi menjadi Markdown, dengan 1 kredit per blok 10 halaman yang dimulai. PDF hasil pindai tanpa lapisan teks mengembalikan sedikit atau tidak ada teks, karena tidak ada langkah pengenalan karakter.
Endpoint read: pertanyaan umum
Apakah /read mengikuti redirect?
Ya, hingga 5 kali. Respons memberikan alamat yang Anda minta di url dan alamat yang benar-benar dibaca di final_url. Redirect ke alamat privat atau lokal akan ditolak.
Bisakah saya membaca halaman yang memerlukan login?
Tidak. Jika suatu situs menolak permintaan kami, kami mengembalikan jawabannya: kami tidak pernah menyelesaikan CAPTCHA, masuk ke akun, atau mencoba mengatasi blokir atau paywall. Halaman di balik login atau paywall mengembalikan penolakan dari situs, dan panggilannya gratis.
Apakah pengecekan robots.txt dilakukan pada setiap panggilan?
Ya, terhadap salinan robots.txt situs yang berumur paling lama 24 jam. URL yang dilarang mengembalikan 403 blocked_by_robots dan tidak memakai kredit.
Berapa banyak halaman yang dapat saya baca secara bersamaan?
Setiap akun memiliki batas berapa banyak halaman yang dibaca sekaligus; dashboard Anda menampilkannya, dan support dapat menaikkannya. Untuk banyak URL, batch job lebih sederhana daripada menjalankan banyak panggilan paralel.