Kurze Antwort
Welche Parameter akzeptiert der read-Endpoint von WebReaderAPI?
Der /read-Endpoint von WebReaderAPI benötigt einen Parameter, url. Optionale Parameter wählen die Ausgabe (format), wie viel der Seite Sie behalten (main_content), ob ein Browser läuft (render), Links und Bilder, das Leseland, eine Zeichenbegrenzung und ein Timeout. Eine einfache Seite kostet 1 Credit, 2 mit Browser, ab 0,07 $/1K Seiten Stand Oktober 2026. Ohne KYC; mit Krypto bezahlen.
/read at a glance
| Methoden | GET mit Query-Parametern oder POST mit einem JSON-Body mit denselben Namen |
|---|---|
| URL | https://webreaderapi.com/api/v1/read |
| Erforderlich | url: eine http- oder https-Adresse, bis zu 2.048 Zeichen |
| Standardausgabe | Markdown des Hauptinhalts |
| Abrechnung | 1 Credit = 1 gelesene Seite ohne Browser; 2 Credits, wenn die Seite einen Browser braucht, um JavaScript auszuführen. Eine Suchanfrage, die fehlschlägt oder die eine robots.txt einer Website verweigert, wird nicht abgerechnet |
| Land | Wählen Sie das Land, aus dem eine Seite gelesen wird, kostet das 10 Credits zusätzlich, da die Seite dann über eine residenzielle Verbindung in diesem Land gelesen wird |
| PDF-Dateien bis 20 MB und 100 Seiten werden in Markdown umgewandelt, zu 1 Credit pro angefangenem Block von 10 Seiten | |
| Crawler-Identität | WebReaderAPI/1.0 (+https://webreaderapi.com/bot/) |
Eine Seite lesen (GET)
GET/api/v1/read
Ruft eine öffentliche Seite ab und gibt ihren Hauptinhalt als Markdown zurück, zusammen mit den Metadaten der Seite. Die Parameter kommen in den Query-String, URL-kodiert. Das Beispiel liest einen Blogbeitrag; IDs, Daten und Werte dienen der Veranschaulichung.
Authentifizierung: API-Schlüssel im Authorization: Bearer API_KEY-Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
url | query | string | Ja | Die zu lesende Seite: http oder https, höchstens 2.048 Zeichen. Private, lokale und Cloud-Metadaten-Adressen werden abgelehnt. |
format | query | string | Nein | markdown (Standard), text (reiner Text, kein Markup) oder html (bereinigtes HTML des Inhalts). |
main_content | query | boolean | Nein | true (Standard) behält nur den Artikel bzw. Hauptinhalt; false wandelt die ganze Seite um, einschließlich Menüs und Footer. |
render | query | string | Nein | auto (Standard) startet einen Browser nur, wenn das rohe HTML zu wenig Text enthält; true immer; false nie. Eine gerenderte Seite kostet 2 Credits. |
include_links | query | boolean | Nein | true fügt eine links-Liste mit {url, text} hinzu. Standard false. |
include_images | query | boolean | Nein | true behält Bilder als  im Markdown. Standard false. |
country | query | string | Nein | Zweistelliger Ländercode (ISO 3166-1 alpha-2). Die Seite wird über eine Adresse in diesem Land gelesen, für 10 zusätzliche Credits (Residential-Verbindung). |
max_chars | query | integer | Nein | Schneidet die Ausgabe bei dieser Zeichenzahl ab, von 1.000 bis 500.000. Nützlich, um in den Kontext eines Modells zu passen. |
timeout | query | integer | Nein | Wartezeit für die Seite in Sekunden, von 5 bis 60. Standard 30. |
api_key | query | string | Nein | Ihr API-Schlüssel, falls Sie den Header Authorization nicht senden. |
Antwort 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
}Codebeispiele
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));Eine Seite lesen (POST)
POST/api/v1/read
Derselbe Endpoint, dieselben Parameter, gesendet als JSON-Body. Bevorzugen Sie POST, wenn die URL sehr lang ist oder wenn Ihr HTTP-Client JSON leichter erzeugt als Query-Strings. Die Antwort ist identisch zur GET-Form.
Authentifizierung: API-Schlüssel im Authorization: Bearer API_KEY-Header.
Request-Body
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
url | string | Ja | Die zu lesende Seite. |
format, main_content, render, include_links, include_images, country, max_chars, timeout | mixed | Nein | Wie in der GET-Tabelle oben, mit JSON-Typen: Booleans als true/false, Zahlen ohne Anführungszeichen. |
{
"url": "https://example.com/app/pricing",
"render": "true",
"country": "de",
"include_links": true,
"max_chars": 30000
}Antwort 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"
}
]
}Codebeispiele
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);Welches Ausgabeformat sollte ich wählen?
Wählen Sie markdown für Sprachmodelle und RAG: Überschriften, Listen, Tabellen und Links bleiben erhalten, und der Text bleibt kompakt. Wählen Sie text, wenn Sie nur Wörter zählen, klassifizieren oder suchen und Markup nur stören würde. Wählen Sie html, wenn Ihre eigene Pipeline bereits HTML parst und Sie nur das Beiwerk entfernt haben wollen.
Die Metadaten-Felder sind in allen drei Formaten gleich. Nur der Name des Content-Felds ändert sich: markdown, text oder html.
Wann sollte ich main_content auf false setzen?
Setzen Sie es auf false, wenn Sie die Teile rund um den Artikel brauchen. Beispiele sind die Navigation einer Webseite, um ihre Bereiche zu erfassen, ein Footer mit rechtlichen Angaben oder Kontaktdaten, oder eine Produktseite, deren Spezifikationen in einer Sidebar stehen.
Mit dem Standard true behält der Extractor den Hauptinhalt-Block und verwirft Navigation, Cookie-Banner, Anzeigen, Share-Buttons und Footer. Das wollen die meisten Agenten und RAG-Pipelines, und es reduziert eine Seite oft auf einen Bruchteil ihrer HTML-Größe.
Wie entscheidet render=auto, einen Browser zu verwenden?
Zuerst wird das rohe HTML abgerufen, was schnell ist und 1 Credit kostet. Enthält dieses HTML zu wenig lesbaren Text – typischerweise eine App, die die Seite mit JavaScript aufbaut –, wird die Seite erneut in einem Headless-Browser geladen, und der Aufruf kostet 2 Credits. Die Antwort zeigt Ihnen, welcher Pfad ausgeführt wurde: rendered ist true oder false.
Setzen Sie render=false, wenn Sie wissen, dass die Webseite vollständiges HTML liefert, und feste Kosten wollen. Setzen Sie render=true für Single-Page-Apps, um den ersten Versuch zu überspringen.
Was ändern country und max_chars?
country liest die Seite über eine Adresse in dem von Ihnen genannten Land, mit demselben User-Agent. Verwenden Sie es für Seiten, deren Preise, Sprache oder Verfügbarkeit sich je nach Land ändern. Es kostet 10 Credits zusätzlich, weil die Seite dann über eine Residential-Verbindung gelesen wird, und es kann nicht mit Ländern verwendet werden, in denen der Dienst nicht tätig ist.
max_chars schneidet die Ausgabe nach dieser Anzahl Zeichen ab. Es ändert den Preis nicht, schützt aber das Kontextfenster eines Agenten: 20.000 Zeichen sind ein sinnvoller Standard für eine einzelne Seite, die an ein Modell übergeben wird.
Kann /read PDF-Dateien verarbeiten?
Ja. Wenn die URL ein PDF liefert, kommt der Text als Markdown im selben Feld markdown zurück. PDF-Dateien bis 20 MB und 100 Seiten werden in Markdown umgewandelt, zu 1 Credit pro angefangenem Block von 10 Seiten. Gescannte PDFs ohne Textebene liefern wenig oder keinen Text, weil es keinen Schritt zur Zeichenerkennung gibt.
Read-Endpoint: häufige Fragen
Folgt /read Weiterleitungen?
Ja, bis zu 5. Die Antwort gibt die angeforderte Adresse in url und die tatsächlich gelesene Adresse in final_url an. Eine Weiterleitung an eine private oder lokale Adresse wird abgelehnt.
Kann ich eine Seite lesen, die ein Login erfordert?
Nein. Wenn eine Website unsere Suchanfrage ablehnt, geben wir ihre Antwort zurück: Wir lösen nie CAPTCHAs, melden uns nie in Konten an und versuchen nie, eine Sperre oder eine Paywall zu umgehen. Seiten hinter einem Login oder einer Paywall liefern die Ablehnung der Webseite zurück, und der Aufruf ist kostenlos.
Wird die robots.txt-Prüfung bei jedem Aufruf durchgeführt?
Ja, gegen eine Kopie der robots.txt der Webseite, die höchstens 24 Stunden alt ist. Eine nicht erlaubte URL liefert 403 blocked_by_robots und verbraucht keinen Credit.
Wie viele Seiten kann ich gleichzeitig lesen?
Jedes Konto hat ein Limit dafür, wie viele Seiten es gleichzeitig liest; Ihr Dashboard zeigt es an, und der Support kann es erhöhen. Für viele URLs ist ein Batch-Job einfacher als viele parallele Aufrufe.