Szybka odpowiedź
Co zawiera odpowiedź read w WebReaderAPI?
Odpowiedź WebReaderAPI /read zawiera treść strony w markdown (lub text lub html), jej metadane (title, description, author, published_at, language, site_name, word_count) oraz fakty dotyczące pobrania: final_url, status_code, rendered i credits_used. Zwykła strona zużywa 1 kredyt, od 0,07 USD/1K stron według stanu na październik 2026. Bez KYC; płatność kryptowalutą.
Które pola opisują pobranie?
Te pola są zawsze obecne w udanej odpowiedzi.
| Pole | Typ | Znaczenie |
|---|---|---|
url | string | Adres, który wysłałeś |
final_url | string | Adres faktycznie odczytany, po przekierowaniach (maksymalnie 5) |
status_code | integer | Kod statusu HTTP zwrócony przez witrynę dla końcowego adresu, zwykle 200 |
fetched_at | string | Czas pobrania, ISO 8601 w UTC |
rendered | boolean | true, gdy stronę zbudowała przeglądarka headless |
credits_used | integer | Kredyty naliczone za tę stronę: 1, 2 z przeglądarką, plus 10 z country; PDF-y 1 za każde rozpoczęte 10 stron |
Które pola opisują stronę?
Metadane pochodzą z samej strony: jej tagu title, meta tagów, danych strukturalnych i widocznego podpisu autora. Pole, którego strona nie dostarcza, jest nieobecne, więc sprawdź je przed użyciem.
| Pole | Typ | Znaczenie |
|---|---|---|
title | string | Tytuł strony lub artykułu |
description | string | Streszczenie, które strona podaje o sobie |
language | string | Kod języka treści, taki jak en lub de |
author | string | Autor wskazany na stronie |
published_at | string | Data publikacji podana przez stronę |
site_name | string | Własna nazwa witryny |
word_count | integer | Słowa w zwróconej treści, po wyodrębnianiu głównej treści i przed max_chars |
Gdzie jest sama treść?
Zwracane jest jedno pole treści, nazwane według wybranego przez Ciebie format.
| Pole | Kiedy | Treść |
|---|---|---|
markdown | format=markdown (domyślnie) | Nagłówki, akapity, listy, tabele i linki w Markdown; obrazy także z include_images=true |
text | format=text | Zwykły tekst, akapity oddzielone pustymi liniami |
html | format=html | Oczyszczony HTML głównej treści, bez skryptów, stylów i reklam |
links | include_links=true | Lista {url, text} dla linków znalezionych na stronie, bezwzględne URL-e |
{
"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" }
]
}Jak odróżnić wyrenderowaną stronę od zwykłej?
Spójrz na rendered. W przypadku render=auto API najpierw czyta surowy HTML; przeglądarkę uruchamia dopiero, gdy ten HTML zawiera zbyt mało tekstu, a wtedy ustawia rendered na true i credits_used na 2. Jeśli strona, którą czytasz często, zawsze wraca wyrenderowana, wyślij render=true od razu: koszt jest taki sam, a pomijasz zmarnowany pierwszy krok.
Jeśli strona wraca niewyrenderowana, ale uboga w treść, porównaj word_count z tym, co widzisz w przeglądarce. Niska liczba zwykle oznacza, że treść wymaga JavaScript; ponów próbę raz z render=true.
Dlaczego final_url może różnić się od url?
Ponieważ strony przekierowują. Krótki link, stary adres, brakujący ukośnik na końcu lub przełączenie języka — wszystko to kieruje Cię gdzie indziej. API podąża za maksymalnie 5 przekierowaniami i raportuje adres, który ostatecznie odczytało, w final_url.
Przechowuj final_url jako kanoniczne źródło dokumentu w indeksie RAG. Dwie różne wartości url, które kończą na tym samym final_url, to ta sama strona, więc możesz usunąć duplikat przed embeddingiem.
Jak wygląda wynik zadania?
GET https://webreaderapi.com/api/v1/jobs/{job_id} zwraca job_id, status (queued, running lub done), results, next_cursor oraz bieżący credits_used zadania. Każdy element results ma jeden z dwóch kształtów:
- pełna odpowiedź
/read, dokładnie jak opisano powyżej, dla strony, która została odczytana; {url, error}dla strony, która nie została odczytana, gdzieerrorma te samecodeimessageco błąd API.
next_cursor jest obecne, dopóki jest więcej gotowych wyników; odeślij je jako cursor, aby je pobrać. Strona batch i crawl zawiera kompletną pętlę odpytywania.
{
"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
}Jak wygląda odpowiedź z błędem?
Błąd wraca z kodem statusu HTTP 400 lub wyższym i ciałem JSON {"error": {"code", "message"}}. Gdy sama strona odrzuciła żądanie, target_status podaje status wysłany przez stronę. Żaden błąd nie jest rozliczany. Strona błędów wymienia każdy kod wraz z jego przyczyną i informacją, czy ponowna próba może pomóc.
Format odpowiedzi: najczęstsze pytania
Czy Markdown jest ucinany, gdy ustawię max_chars?
Tak. Pole content kończy się na tej liczbie znaków. word_count nadal opisuje całą wyodrębnioną treść, więc widzisz, ile zostało pominięte.
Dlaczego brakuje author lub published_at?
Ponieważ strona nie podaje tego w sposób, który da się odczytać. Wiele stron nie podaje autora ani daty. Brakujące pola są pomijane, a nie zwracane jako puste.
Czy linki w Markdownie są bezwzględne?
Linki na liście links są bezwzględne. Napisz kod tak, aby akceptował obie formy w treści Markdown, a względne rozwiązuj względem final_url.
Czy mogę uzyskać surowy HTML całej strony?
Najbliżej jest format=html z main_content=false, co zwraca całą stronę oczyszczoną ze skryptów i stylów. Oryginalny HTML bajt po bajcie nie jest częścią v1.