Tanpa KYC — tanpa identitas, tanpa selfie, tanpa dokumen. Bayar dengan kripto: BTC, USDT, USDC, ETH, SOL, LTC
Bahasa: Bahasa Indonesia
Dapatkan API key

Dokumentasi · respons

Format respons Read API, field demi field

Setiap panggilan /read mengembalikan satu objek JSON: konten halaman dalam format yang Anda minta, metadatanya, dan tiga field yang memberi tahu Anda apa yang terjadi dan berapa biayanya. Hasil job menggunakan objek yang sama.

Terakhir diperbarui: · 4 menit baca

Jawaban singkat

Apa saja isi respons read dari WebReaderAPI?

Respons WebReaderAPI /read memuat konten halaman dalam markdown (atau text atau html), metadatanya (title, description, author, published_at, language, site_name, word_count), dan fakta tentang pengambilan: final_url, status_code, rendered, dan credits_used. Halaman biasa memakai 1 kredit, dari US$0,07/1K halaman per Oktober 2026. Tanpa KYC; bayar dengan kripto.

Field mana yang menjelaskan proses pengambilan?

Field-field ini selalu ada dalam respons yang berhasil.

FieldTipeArti
urlstringAlamat yang Anda kirim
final_urlstringAlamat yang benar-benar dibaca, setelah redirect (maksimal 5)
status_codeintegerStatus HTTP yang dikembalikan situs untuk alamat final, biasanya 200
fetched_atstringWaktu fetch, ISO 8601 dalam UTC
renderedbooleantrue saat browser headless membangun halaman
credits_usedintegerKredit yang ditagih untuk halaman ini: 1, 2 dengan browser, ditambah 10 dengan country; PDF 1 per 10 halaman yang dimulai

Field mana yang menjelaskan halaman?

Metadata berasal dari halaman itu sendiri: tag title, meta tag, structured data, dan byline yang terlihat. Field yang tidak disediakan halaman akan absen, jadi uji dulu sebelum digunakan.

FieldTipeArti
titlestringJudul halaman atau artikel
descriptionstringRingkasan yang diberikan halaman tentang dirinya sendiri
languagestringKode bahasa konten, seperti en atau de
authorstringPenulis yang tercantum di halaman
published_atstringTanggal publikasi yang dinyatakan halaman
site_namestringNama situs itu sendiri
word_countintegerJumlah kata dalam konten yang dikembalikan, setelah ekstraksi dan sebelum max_chars

Di mana kontennya sendiri?

Satu field konten dikembalikan, dinamai sesuai format yang Anda pilih.

FieldWhenContent
markdownformat=markdown (default)Heading, paragraf, list, tabel, dan link dalam Markdown; gambar juga dengan include_images=true
textformat=textTeks biasa, paragraf dipisahkan baris kosong
htmlformat=htmlHTML bersih dari konten utama, tanpa script, style, atau iklan
linksinclude_links=trueDaftar {url, text} untuk tautan yang ditemukan di halaman, URL absolut
Respons lengkap (nilai bersifat ilustratif)
{
  "url": "https://example.com/guides/compost",
  "final_url": "https://example.com/guides/compost-at-home",
  "status_code": 200,
  "fetched_at": "2026-10-22T10:02:44Z",
  "rendered": false,
  "credits_used": 1,
  "title": "Compost at home: a beginner's guide",
  "description": "What to put in a compost bin, and what to leave out.",
  "language": "en",
  "author": "Sam Rivera",
  "published_at": "2026-09-14",
  "site_name": "Example Garden",
  "markdown": "# Compost at home: a beginner's guide\n\nA compost bin turns kitchen scraps into soil...\n\n## What goes in\n\n- Fruit and vegetable peels\n- Coffee grounds\n\nSee also [Choosing a bin](https://example.com/guides/bins).",
  "word_count": 1184,
  "links": [
    { "url": "https://example.com/guides/bins", "text": "Choosing a bin" }
  ]
}

Bagaimana cara membedakan halaman yang dirender dari halaman biasa?

Lihat rendered. Dengan render=auto, API terlebih dahulu membaca HTML mentah; browser hanya dijalankan ketika HTML tersebut memuat terlalu sedikit teks, lalu menyetel rendered ke true dan credits_used ke 2. Jika situs yang sering Anda baca selalu kembali dalam keadaan dirender, kirim render=true sejak awal: biayanya sama dan Anda melewati langkah pertama yang sia-sia.

Jika halaman kembali tanpa dirender tetapi kontennya tipis, bandingkan word_count dengan apa yang Anda lihat di browser. Jumlah yang rendah biasanya berarti konten membutuhkan JavaScript; coba ulang sekali dengan render=true.

Mengapa final_url bisa berbeda dari url?

Karena situs melakukan redirect. Tautan pendek, alamat lama, garis miring di akhir yang hilang, atau pergantian bahasa semuanya mengarahkan Anda ke tempat lain. API mengikuti hingga 5 redirect dan melaporkan alamat yang akhirnya dibaca di final_url.

Simpan final_url sebagai sumber kanonik sebuah dokumen di indeks RAG. Dua nilai url berbeda yang berakhir di final_url yang sama adalah halaman yang sama, jadi Anda bisa membuang duplikatnya sebelum melakukan embedding.

Seperti apa hasil job?

GET https://webreaderapi.com/api/v1/jobs/{job_id} mengembalikan job_id, status (queued, running atau done), results, next_cursor dan credits_used job yang sedang berjalan. Setiap item results berbentuk salah satu dari dua bentuk:

  • respons /read lengkap, persis seperti yang dijelaskan di atas, untuk halaman yang berhasil dibaca;
  • {url, error} untuk halaman yang tidak berhasil dibaca, di mana error memiliki code dan message yang sama dengan API error.

next_cursor ada selama masih ada hasil lain yang siap; kirim kembali sebagai cursor untuk mengambilnya. Halaman batch dan crawl memiliki polling loop lengkap.

Halaman hasil job (nilai bersifat ilustratif)
{
  "job_id": "job_5c1e8a90d2",
  "status": "done",
  "results": [
    { "url": "https://example.com/blog/post-1", "final_url": "https://example.com/blog/post-1", "status_code": 200, "rendered": false, "credits_used": 1, "title": "Post one", "markdown": "# Post one\n\n...", "word_count": 802 },
    { "url": "https://example.org/members/area", "error": { "code": "target_refused", "message": "The site refused the request.", "target_status": 403 } }
  ],
  "credits_used": 1
}

Seperti apa respons error?

Error dikembalikan dengan status HTTP 400 atau lebih dan body JSON {"error": {"code", "message"}}. Ketika situs itu sendiri menolak permintaan, target_status memberikan status yang dikirim situs. Tidak ada error yang ditagih. Halaman errors mencantumkan setiap kode beserta penyebabnya dan apakah mencoba ulang dapat membantu.

Format respons: pertanyaan umum

Apakah Markdown terpotong saat saya menyetel max_chars?

Ya. Field content berhenti pada jumlah karakter tersebut. word_count tetap menjelaskan seluruh konten yang diekstrak, jadi Anda bisa melihat berapa banyak yang tersisa di luar.

Mengapa author atau published_at tidak ada?

Karena halaman tidak menyatakannya dengan cara yang bisa dibaca. Banyak halaman tidak mencantumkan penulis atau tanggal. Field yang tidak ada dihilangkan, bukan dikembalikan kosong.

Apakah tautan di Markdown bersifat absolut?

Tautan di daftar links bersifat absolut. Tulis kode Anda agar menerima kedua bentuk di body Markdown, dan selesaikan yang relatif terhadap final_url.

Bisakah saya mendapatkan HTML mentah dari seluruh halaman?

Yang paling mendekati adalah format=html dengan main_content=false, yang mengembalikan seluruh halaman setelah dibersihkan dari script dan style. HTML asli byte demi byte bukan bagian dari v1.

Mulai dari US$0,07/1K halaman · tanpa KYC

Dapatkan API key