Zonder KYC — geen ID, geen selfie, geen documenten. Betalen met crypto: BTC, USDT, USDC, ETH, SOL, LTC
Taal: Nederlands
Vraag een API-sleutel aan

Docs · API-referentie

Lees de endpoint-referentie: GET en POST /read

/read haalt één openbare pagina op, extraheert de hoofdinhoud en geeft die terug als Markdown, platte tekst of opgeschoonde HTML. Deze pagina noemt elke parameter, de standaardwaarde en wat die kost.

Laatst bijgewerkt: · 7 min leestijd

Kort antwoord

Welke parameters heeft het read-endpoint van WebReaderAPI?

Het /read-endpoint van WebReaderAPI heeft één parameter nodig, url. Optionele parameters bepalen de output (format), hoeveel van de pagina je behoudt (main_content), of er een browser draait (render), links en afbeeldingen, het leesland, een karakterlimiet en een timeout. Een gewone pagina kost 1 credit, 2 met een browser, vanaf US$ 0,07/1K pagina's per oktober 2026. Zonder KYC; betalen met crypto.

/read at a glance

MethodenGET met queryparameters, of POST met een JSON-body met dezelfde namen
URLhttps://webreaderapi.com/api/v1/read
Vereisturl: een http- of https-adres, tot 2.048 tekens
StandaardoutputMarkdown van de hoofdinhoud
Facturering1 credit = 1 pagina lezen zonder browser; 2 credits wanneer de pagina een browser nodig heeft om JavaScript te renderen. Een verzoek dat mislukt, of dat de robots.txt van een site weigert, wordt niet in rekening gebracht
LandHet land kiezen van waaruit een pagina wordt gelezen kost 10 credits extra, omdat de pagina dan via een residential-verbinding in dat land wordt gelezen
PDFPDF-bestanden tot 20 MB en 100 pagina's worden omgezet naar Markdown, voor 1 credit per begonnen blok van 10 pagina's
Identiteit van de crawlerWebReaderAPI/1.0 (+https://webreaderapi.com/bot/)

Lees één pagina (GET)

GET/api/v1/read

Haalt één openbare pagina op en geeft de hoofdinhoud terug als Markdown, met de metadata van de pagina. Parameters gaan in de query string, URL-gecodeerd. Het voorbeeld leest een blogpost; ID's, datums en waarden zijn illustratief.

Authenticatie: API-sleutel in de Authorization: Bearer API_KEY-header.

Parameters

NaamInTypeVereistBeschrijving
urlquerystringJaDe pagina om te lezen: http of https, maximaal 2.048 tekens. Privé-, lokale en cloud-metadata-adressen worden geweigerd.
formatquerystringNeemarkdown (standaard), text (platte tekst, geen opmaak) of html (opgeschoonde HTML van de inhoud).
main_contentquerybooleanNeetrue (standaard) behoudt alleen het artikel of de hoofdinhoud; false converteert de hele pagina, inclusief menu's en footer.
renderquerystringNeeauto (standaard) start alleen een browser wanneer de ruwe HTML te weinig tekst bevat; true altijd; false nooit. Een gerenderde pagina kost 2 credits.
include_linksquerybooleanNeetrue voegt een links-lijst toe met {url, text}. Standaard false.
include_imagesquerybooleanNeetrue behoudt afbeeldingen als ![alt](src) in de Markdown. Standaard false.
countryquerystringNeeTweeletterige landcode (ISO 3166-1 alpha-2). De pagina wordt gelezen vanaf een adres in dat land, voor 10 extra credits (residential-verbinding).
max_charsqueryintegerNeeKapt de output af op dit aantal tekens, van 1.000 tot 500.000. Handig om binnen de context van een model te passen.
timeoutqueryintegerNeeSeconden om op de site te wachten, van 5 tot 60. Standaard 30.
api_keyquerystringNeeJe sleutel, als je de Authorization header niet meestuurt.

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
}

Codevoorbeelden

curl
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=20000
Python
import 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])
Node.js
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));

Eén pagina lezen (POST)

POST/api/v1/read

Zelfde endpoint, zelfde parameters, verzonden als JSON-body. Gebruik POST bij voorkeur wanneer de URL erg lang is of wanneer je HTTP-client makkelijker JSON bouwt dan query strings. De respons is identiek aan de GET-vorm.

Authenticatie: API-sleutel in de Authorization: Bearer API_KEY-header.

Request body

FieldTypeVereistBeschrijving
urlstringJaDe pagina om te lezen.
format, main_content, render, include_links, include_images, country, max_chars, timeoutmixedNeeZoals in de GET-tabel hierboven, met JSON-typen: booleans als true/false, getallen zonder aanhalingstekens.
Voorbeeld: a JavaScript-heavy page, read from Germany, with its links
{
  "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"
    }
  ]
}

Codevoorbeelden

curl
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}'
Python
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")
Node.js
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);

Welk uitvoerformaat moet ik kiezen?

Kies markdown voor taalmodellen en RAG: koppen, lijsten, tabellen en links blijven behouden en de tekst blijft compact. Kies text wanneer je alleen woorden telt, classificeert of zoekt en opmaak alleen ruis zou zijn. Kies html wanneer je eigen pipeline HTML al parseert en je alleen de rommel weg wilt hebben.

De metadata-velden zijn in alle drie de formaten hetzelfde. Alleen de naam van het contentveld verandert: markdown, text of html.

Wanneer moet ik main_content op false zetten?

Zet het op false wanneer je juist de delen rond het artikel nodig hebt. Voorbeelden zijn de navigatie van een site om de secties in kaart te brengen, een footer met juridische of contactgegevens, of een productpagina waarvan de specificaties in een zijbalk staan.

Met de standaardwaarde true houdt de extractor het blok met de hoofdinhoud en laat hij navigatie, cookiebanners, advertenties, deelknoppen en footers weg. Dat is wat de meeste agents en RAG-pipelines willen, en het reduceert een pagina vaak tot een fractie van de HTML-grootte.

Hoe beslist render=auto om een browser te gebruiken?

Eerst haalt het de ruwe HTML op, wat snel is en 1 credit kost. Bevat die HTML te weinig leesbare tekst, meestal een app die de pagina met JavaScript opbouwt, dan laadt het de pagina opnieuw in een headless browser en kost de aanroep 2 credits. De respons vertelt je welk pad is gelopen: rendered is true of false.

Zet render=false wanneer je weet dat de site volledige HTML levert en je een vaste prijs wilt. Zet render=true voor single-page apps, om de eerste poging over te slaan.

Wat veranderen country en max_chars?

country leest de pagina vanaf een adres in het land dat je opgeeft, met dezelfde User-Agent. Gebruik het voor pagina's waarvan de prijzen, taal of beschikbaarheid per land verschillen. Het kost 10 credits extra, omdat de pagina dan via een residential-verbinding wordt gelezen, en het kan niet worden gebruikt met de landen waar de dienst niet actief is.

max_chars kapt de uitvoer af na dat aantal tekens. Het verandert de prijs niet, maar het beschermt het contextvenster van een agent: 20.000 tekens is een verstandige standaard voor één pagina die je aan een model geeft.

Kan /read PDF-bestanden verwerken?

Ja. Wanneer de URL een PDF teruggeeft, komt de tekst terug als Markdown in hetzelfde markdown-veld. PDF-bestanden tot 20 MB en 100 pagina's worden omgezet naar Markdown, voor 1 credit per begonnen blok van 10 pagina's. Gescande PDF's zonder tekstlaag leveren weinig of geen tekst op, omdat er geen stap voor karakterherkenning is.

Read-endpoint: veelgestelde vragen

Volgt /read redirects?

Ja, tot 5. De respons geeft het adres dat je hebt opgevraagd in url en het adres dat daadwerkelijk is gelezen in final_url. Een redirect naar een privé- of lokaal adres wordt geweigerd.

Kan ik een pagina lezen waarvoor een login nodig is?

Nee. Als een site ons verzoek weigert, geven we het antwoord terug: we lossen nooit CAPTCHA's op, loggen niet in op accounts en proberen nooit een blokkade of paywall te omzeilen. Pagina's achter een login of paywall geven de weigering van de site terug en de aanroep is gratis.

Wordt de robots.txt-check bij elke aanroep gedaan?

Ja, tegen een kopie van de robots.txt van de site die maximaal 24 uur oud is. Een niet-toegestane URL geeft 403 blocked_by_robots terug en kost geen credit.

Hoeveel pagina's kan ik tegelijk lezen?

Elk account heeft een limiet voor het aantal pagina's dat het tegelijk leest; je dashboard toont die, en support kan hem verhogen. Voor veel URL's is een batchjob eenvoudiger dan veel parallelle aanroepen.

Vanaf US$ 0,07/1K pagina's · zonder KYC

Vraag een API-sleutel aan