Bez KYC — bez dowodu, bez selfie, bez dokumentów. Płatność kryptowalutą: BTC, USDT, USDC, ETH, SOL, LTC
Język: Polski
Uzyskaj klucz API

Dokumentacja · odpowiedź

Format odpowiedzi Read API, pole po polu

Każde wywołanie /read zwraca jeden obiekt JSON: treść strony w wybranym formacie, jej metadane i trzy pola, które mówią, co się stało i ile to kosztowało. Wyniki zadań używają tego samego obiektu.

Ostatnia aktualizacja: · 4 min czytania

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.

PoleTypZnaczenie
urlstringAdres, który wysłałeś
final_urlstringAdres faktycznie odczytany, po przekierowaniach (maksymalnie 5)
status_codeintegerKod statusu HTTP zwrócony przez witrynę dla końcowego adresu, zwykle 200
fetched_atstringCzas pobrania, ISO 8601 w UTC
renderedbooleantrue, gdy stronę zbudowała przeglądarka headless
credits_usedintegerKredyty 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.

PoleTypZnaczenie
titlestringTytuł strony lub artykułu
descriptionstringStreszczenie, które strona podaje o sobie
languagestringKod języka treści, taki jak en lub de
authorstringAutor wskazany na stronie
published_atstringData publikacji podana przez stronę
site_namestringWłasna nazwa witryny
word_countintegerSł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.

PoleKiedyTreść
markdownformat=markdown (domyślnie)Nagłówki, akapity, listy, tabele i linki w Markdown; obrazy także z include_images=true
textformat=textZwykły tekst, akapity oddzielone pustymi liniami
htmlformat=htmlOczyszczony HTML głównej treści, bez skryptów, stylów i reklam
linksinclude_links=trueLista {url, text} dla linków znalezionych na stronie, bezwzględne URL-e
Pełna odpowiedź (wartości są przykładowe)
{
  "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, gdzie error ma te same code i message co 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.

Strona wyniku zadania (wartości są przykładowe)
{
  "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.

Od 0,07 USD/1K stron · bez KYC

Uzyskaj klucz API