# Endpoint-Referenz lesen: GET und POST /read

> Endpoint-Referenz lesen: jeder Parameter von GET und POST /read, von format und render bis country und max_chars, mit Beispielen. Ab 0,07 $/1K Seiten, ohne KYC.

- URL: https://webreaderapi.com/de/docs/read/
- Zuletzt aktualisiert: 2026-10-22
- Herausgeber: WebReaderAPI (https://webreaderapi.com)

`/read` ruft eine öffentliche Seite ab, extrahiert ihren Hauptinhalt und gibt ihn als Markdown, reinen Text oder bereinigtes HTML zurück. Diese Seite listet jeden Parameter, seinen Standardwert und was er kostet.

**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

| Attribut | Wert |
| --- | --- |
| 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 | 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 `![alt](src)` 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`

```json
{
  "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
}
```

*curl*

```bash
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*

```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*

```javascript
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. |

*Beispiel: a JavaScript-heavy page, read from Germany, with its links*

```json
{
  "url": "https://example.com/app/pricing",
  "render": "true",
  "country": "de",
  "include_links": true,
  "max_chars": 30000
}
```

**Antwort** `200`

```json
{
  "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"
    }
  ]
}
```

*curl*

```bash
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*

```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*

```javascript
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](https://webreaderapi.com/de/docs/crawl/) einfacher als viele parallele Aufrufe.

---

WebReaderAPI: WebReaderAPI ist eine Web-Reader-API für KI-Agenten, die jede öffentliche Webseite in sauberes Markdown umwandelt und die Sie mit Krypto bezahlen – ohne ID-Upload. Prepaid-Credits ab 0,07 $/1K Seiten verfallen nie, und robots.txt wird respektiert. Ohne KYC – keine ID, kein Selfie, keine Dokumente. Mit Krypto bezahlen.
