# Read-API-Antwortformat, Feld für Feld

> Read-API-Antwortformat: jedes Feld, das für eine Seite zurückgegeben wird, von markdown bis final_url und rendered, plus Job-Ergebnisse.

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

Jeder Aufruf von `/read` liefert ein JSON-Objekt: den Inhalt der Seite im von Ihnen gewünschten Format, ihre Metadaten und drei Felder, die Ihnen sagen, was passiert ist und was es gekostet hat. Job-Ergebnisse verwenden dasselbe Objekt.

**Kurze Antwort — Was enthält die Read-Antwort von WebReaderAPI?**

Eine **WebReaderAPI**-`/read`-Antwort enthält den Seiteninhalt in `markdown` (oder `text` oder `html`), ihre Metadaten (`title`, `description`, `author`, `published_at`, `language`, `site_name`, `word_count`) und die Fakten des Abrufs: `final_url`, `status_code`, `rendered` und `credits_used`. Eine einfache Seite kostet 1 Credit, ab 0,07 $/1K Seiten Stand Oktober 2026. Ohne KYC; mit Krypto bezahlen.

## Welche Felder beschreiben den Abruf?

Diese Felder sind in einer erfolgreichen Antwort immer vorhanden.

| Feld | Typ | Bedeutung |
| --- | --- | --- |
| `url` | string | Die von Ihnen gesendete Adresse |
| `final_url` | string | Die tatsächlich gelesene Adresse nach Weiterleitungen (höchstens 5) |
| `status_code` | integer | Der HTTP-Status, den die Website für die endgültige Adresse zurückgegeben hat, normalerweise 200 |
| `fetched_at` | string | Zeitpunkt des Abrufs, ISO 8601 in UTC |
| `rendered` | boolean | `true`, wenn ein Headless-Browser die Seite aufgebaut hat |
| `credits_used` | integer | Für diese Seite abgerechnete Credits: 1, 2 mit einem Browser, plus 10 mit `country`; PDFs 1 pro begonnene 10 Seiten |

## Welche Felder beschreiben die Seite?

Die Metadaten stammen von der Seite selbst: aus ihrem Titel-Tag, ihren Meta-Tags, ihren strukturierten Daten und der sichtbaren Autorenzeile. Ein Feld, das die Seite nicht liefert, fehlt, prüfen Sie es also vor der Verwendung.

| Feld | Typ | Bedeutung |
| --- | --- | --- |
| `title` | string | Der Titel der Seite oder des Artikels |
| `description` | string | Die Zusammenfassung, die die Seite von sich selbst gibt |
| `language` | string | Sprachcode des Inhalts, etwa `en` oder `de` |
| `author` | string | Der auf der Seite genannte Autor |
| `published_at` | string | Vom der Seite angegebenes Veröffentlichungsdatum |
| `site_name` | string | Der eigene Name der Website |
| `word_count` | integer | Wörter im zurückgegebenen Inhalt, nach der Extraktion und vor `max_chars` |

## Wo ist der Inhalt selbst?

Es wird ein Inhaltsfeld zurückgegeben, benannt nach dem `format`, das Sie gewählt haben.

| Feld | Wann | Inhalt |
| --- | --- | --- |
| `markdown` | `format=markdown` (Standard) | Überschriften, Absätze, Listen, Tabellen und Links in Markdown; mit `include_images=true` auch Bilder |
| `text` | `format=text` | Reiner Text, Absätze durch Leerzeilen getrennt |
| `html` | `format=html` | Bereinigtes HTML des Hauptinhalts, ohne Skripte, Styles oder Werbung |
| `links` | `include_links=true` | Liste der `{url, text}` für die auf der Seite gefundenen Links, absolute URLs |

*Eine vollständige Antwort (die Werte sind beispielhaft)*

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

## Wie erkenne ich, ob eine Seite gerendert wurde oder nicht?

Sehen Sie sich `rendered` an. Mit `render=auto` liest die API zuerst das rohe HTML; einen Browser startet sie erst, wenn dieses HTML zu wenig Text enthält, und setzt dann `rendered` auf `true` und `credits_used` auf 2. Wenn eine Seite, die Sie oft lesen, immer gerendert zurückkommt, senden Sie `render=true` von Anfang an: Die Kosten sind gleich, und Sie sparen einen unnötigen ersten Schritt.

Wenn eine Seite ungerendert, aber dünn zurückkommt, vergleichen Sie `word_count` mit dem, was Sie im Browser sehen. Ein niedriger Wert bedeutet meist, dass der Inhalt JavaScript benötigt; versuchen Sie es einmal erneut mit `render=true`.

## Warum kann final_url von url abweichen?

Weil Seiten weiterleiten. Ein Kurzlink, eine alte Adresse, ein fehlender abschließender Schrägstrich oder ein Sprachwechsel schicken Sie woandershin. Die API folgt bis zu 5 Weiterleitungen und meldet die Adresse, die sie schließlich gelesen hat, in `final_url`.

Speichern Sie `final_url` als kanonische Quelle eines Dokuments in einem RAG-Index. Zwei verschiedene `url`-Werte, die bei derselben `final_url` enden, sind dieselbe Seite, sodass Sie das Duplikat vor dem Einbetten verwerfen können.

## Wie sieht das Ergebnis eines Jobs aus?

`GET https://webreaderapi.com/api/v1/jobs/{job_id}` gibt `job_id`, `status` (`queued`, `running` oder `done`), `results`, `next_cursor` und den laufenden `credits_used` des Jobs zurück. Jedes Element von `results` hat eine von zwei Formen:

- eine vollständige `/read`-Antwort, genau wie oben beschrieben, für eine Seite, die gelesen wurde;
- `{url, error}` für eine Seite, die nicht gelesen wurde, wobei `error` dieselbe `code` und `message` wie ein [API-Fehler](https://webreaderapi.com/de/docs/errors/) hat.

`next_cursor` ist vorhanden, solange weitere Ergebnisse bereitstehen; senden Sie es als `cursor` zurück, um sie abzurufen. Die [Seite zu Batch und Crawl](https://webreaderapi.com/de/docs/crawl/) enthält eine vollständige Polling-Schleife.

*Eine Job-Ergebnisseite (die Werte sind beispielhaft)*

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

## Wie sieht eine Fehlerantwort aus?

Ein Fehler kommt mit einem HTTP-Status von 400 oder mehr und einem JSON-Body `{"error": {"code", "message"}}` zurück. Wenn die Seite selbst die Anfrage abgelehnt hat, gibt `target_status` den Status an, den die Seite gesendet hat. Kein Fehler wird berechnet. Die [Fehlerseite](https://webreaderapi.com/de/docs/errors/) listet jeden Code mit seiner Ursache und ob ein erneuter Versuch helfen kann.

## Antwortformat: häufige Fragen

### Wird das Markdown abgeschnitten, wenn ich max_chars setze?

Ja. Das Feld content endet bei dieser Zeichenzahl. `word_count` beschreibt weiterhin den gesamten extrahierten Inhalt, sodass Sie sehen, wie viel ausgelassen wurde.

### Warum fehlen author oder published_at?

Weil die Seite sie nicht in einer lesbaren Form angibt. Viele Seiten nennen keinen Autor und kein Datum. Fehlende Felder werden weggelassen statt leer zurückgegeben.

### Sind die Links im Markdown absolut?

Links in der Liste `links` sind absolut. Schreiben Sie Ihren Code so, dass er beide Formen im Markdown-Body akzeptiert, und lösen Sie relative gegen `final_url` auf.

### Kann ich das rohe HTML der ganzen Seite bekommen?

Am nächsten kommt `format=html` mit `main_content=false`, was die ganze Seite bereinigt von Skripten und Styles zurückgibt. Das byte-genaue Original-HTML ist nicht Teil von v1.

---

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.
