# Extract endpoint: odczytaj URL-e, które Twój agent już ma

> wyślij od 1 do 20 URL-i, które już masz, i otrzymaj główną treść każdej strony jako Markdown, 1 kredyt za każdą grupę 3 stron. Bez KYC, płatność kryptowalutą.

- URL: https://llmwebsearch.com/pl/docs/extract/
- Ostatnia aktualizacja: 2026-10-22
- Wydawca: LLMWebSearch (https://llmwebsearch.com)

Czasem agent ma już linki: użytkownik je wkleił, poprzednie wyszukiwanie je wymieniło albo dokument je cytuje. `/extract` odczytuje te strony i zwraca ich główną treść, z tym samym readerem i tymi samymi zasadami co `/search`.

**Szybka odpowiedź — Jak odczytać strony internetowe, których URL-e już mam?**

Wyślij do `POST https://llmwebsearch.com/api/v1/extract` maksymalnie 20 URL-i. **LLMWebSearch** odczytuje każdą publiczną stronę i zwraca jej główną treść jako Markdown lub zwykły tekst, ze statusem dla każdego URL-a. Rozliczenie to 1 kredyt za każdą rozpoczętą grupę 3 odczytanych stron, od 1,20 USD/1K wyszukiwań za kredyt wyszukiwania na październik 2026. robots.txt jest respektowany. Bez KYC; płatność kryptowalutą.

## /extract at a glance

| Atrybut | Wartość |
| --- | --- |
| Metoda | `POST` z ciałem JSON |
| URL | `https://llmwebsearch.com/api/v1/extract` |
| Dane wejściowe | `urls`: od 1 do 20 adresów http lub https |
| Wyjście | Główna treść dla każdego URL-a, w `markdown` (domyślnie) lub `text` |
| Rozliczanie | Odczyt stron, których adresy URL już masz, kosztuje 1 kredyt za każdą rozpoczętą grupę 3 stron zwróconych z treścią, do 20 adresów URL na wywołanie; adresy URL odrzucone lub nieudane nie są liczone |
| robots.txt | Nasz czytnik respektuje robots.txt: przedstawia się jako LLMWebSearch, przestrzega reguł, które witryna zapisuje dla niego lub dla wszystkich robotów, i pomija treść każdej strony, której nie wolno mu czytać |
| Czytnik stron | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## Odczytaj listę URL-i

`POST /api/v1/extract`

Pobiera równolegle każdy URL i zwraca jego główną treść, w kolejności, w jakiej je wysłałeś. Każdy element ma własny `content_status`, więc jedna odrzucona strona nie powoduje błędu całego wywołania. Przykład odczytuje trzy strony; tytuły i wartości są ilustracyjne.

Uwierzytelnianie: klucz API w nagłówku `Authorization: Bearer API_KEY`.

**Treść zapytania**

| Pole | Typ | Wymagane | Opis |
| --- | --- | --- | --- |
| `urls` | string[] | Tak | Od 1 do 20 adresów http lub https. Adresy prywatne, lokalne i z metadanych chmury są odrzucane. |
| `format` | string | Nie | `markdown` (domyślnie) lub `text`. |
| `max_chars` | integer | Nie | Limit długości treści każdej strony, od 500 do 50 000 znaków. Domyślnie 6000. |

*Przykład: three pages, longer content*

```json
{
  "urls": [
    "https://docs.example.com/security/key-rotation",
    "https://blog.example.org/key-rotation-checklist",
    "https://example.com/changelog"
  ],
  "max_chars": 20000
}
```

**Odpowiedź** `200`

```json
{
  "credits_used": 1,
  "results": [
    {
      "url": "https://docs.example.com/security/key-rotation",
      "title": "Rotating API keys",
      "content_status": "ok",
      "content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key...",
      "word_count": 948
    },
    {
      "url": "https://blog.example.org/key-rotation-checklist",
      "content_status": "blocked_by_robots"
    },
    {
      "url": "https://example.com/changelog",
      "title": "Changelog",
      "content_status": "ok",
      "content": "# Changelog\n\n## 2026-10-20\n\n- New export format...",
      "word_count": 2204
    }
  ]
}
```

*curl*

```bash
curl -s "https://llmwebsearch.com/api/v1/extract" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"], "max_chars": 20000}'
```

*Python*

```python
import os
import requests

resp = requests.post(
    "https://llmwebsearch.com/api/v1/extract",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    json={"urls": ["https://docs.example.com/security/key-rotation", "https://example.com/changelog"]},
    timeout=60,
)
for page in resp.json()["results"]:
    print(page["url"], page["content_status"], page.get("word_count", 0))
```

*Node.js*

```javascript
const res = await fetch('https://llmwebsearch.com/api/v1/extract', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ urls: ['https://docs.example.com/security/key-rotation', 'https://example.com/changelog'] }),
});
for (const page of (await res.json()).results) console.log(page.url, page.content_status);
```

## Kiedy użyć extract zamiast read w wyszukiwaniu?

Użyj extract, gdy URL-e nie pochodzą z wyszukiwania, które uruchamiasz. Użytkownik wkleja link, dokument cytuje trzy źródła albo pierwsze wyszukiwanie z `read=0` pozwoliło modelowi wybrać, które strony zasługują na pełny odczyt.

Użyj `read` w `/search`, gdy po prostu chcesz odczytać najlepsze wyniki w tym samym wywołaniu. To jedno zapytanie zamiast dwóch, a do 3 stron jest objętych pojedynczym kredytem wyszukiwania.

## Jak rozliczane są wywołania extract?

Jeden kredyt za każdą rozpoczętą grupę 3 odczytanych stron. Liczba uwzględnia strony, które wracają z treścią: URL odrzucony przez robots.txt lub przez stronę albo taki, który nie wczytał się, nie jest liczony.

| Odczytane strony | Kredyty |
|---|---|
| 1 do 3 | 1 |
| 4 do 6 | 2 |
| 7 do 9 | 3 |
| 19 lub 20 | 7 |

Odpowiedź zawsze podaje sumę w `credits_used`. Wywołanie, w którym nie udało się odczytać żadnej strony, nic nie kosztuje.

## Co mówi mi każdy element odpowiedzi?

Każdy element powtarza `url`, które wysłałeś, i podaje `content_status`. Z `ok` otrzymujesz także stronę `title`, jej główną `content` i jej `word_count`. W przeciwnym razie status podaje powód: `blocked_by_robots`, `blocked_by_site_policy`, `target_refused` z `target_status` strony, `fetch_failed`, `fetch_timeout` lub `unsupported_content`.

Elementy zachowują kolejność Twojej listy `urls`, więc możesz je dopasować zarówno po indeksie, jak i po URL. Strona [formatu odpowiedzi](https://llmwebsearch.com/pl/docs/response/) opisuje każdy status.

## Które URL-e są odrzucane przed jakimkolwiek pobraniem?

Adresy wskazujące na sieci prywatne, na lokalną maszynę lub na usługi metadanych w chmurze są odrzucane. Dzięki temu nikt nie może użyć naszego czytnika, aby dotrzeć do systemów wewnętrznych. Przekierowanie prowadzące do takiego adresu również jest odrzucane, a śledzimy maksymalnie 5 przekierowań.

Adres musi używać `http` lub `https`. Wywołanie, w którym `urls` jest puste, zawiera więcej niż 20 pozycji lub zawiera nieprawidłowy adres, zwraca `400 invalid_parameter`, bez opłat.

## Czy extract stosuje te same zasady co search?

Tak. To ten sam czytnik, który przedstawia się jako `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)`. Witryna, która ustawia Content-Signal: ai-input=no w swoim robots.txt, trzyma treść swoich stron poza treścią Twoich wyników. Gdy witryna odrzuca nasz czytnik, wynik wraca bez treści i ze statusem witryny: nigdy nie rozwiązujemy CAPTCHA, nie logujemy się na konta ani nie obchodzimy blokady czy paywalla.

Strony wymagające logowania lub ukryte za paywallem wracają bez treści. Wskaż agentowi inne źródło albo stronę, którą możesz odczytać we własnej sesji przeglądarki.

## Endpoint extract: najczęstsze pytania

### Jakie rodzaje plików potrafi odczytać?

Jest zbudowany do stron internetowych. Link do wideo, archiwum lub innego pliku bez czytelnego tekstu wraca jako `unsupported_content`, a ten URL nie jest wliczany do ceny.

### Czy URL wysłany dwa razy jest odczytywany dwa razy?

Wyślij każdy URL raz. Jeśli lista może zawierać duplikaty, usuń je najpierw po swojej stronie, aby wyniki odpowiadały Twojej liście jeden do jednego.

### Czy renderowanie JavaScript jest dodatkowo płatne?

Nie. Gdy strona potrzebuje przeglądarki, aby pokazać swój tekst, jest renderowana bez dodatkowych kosztów.

### Czy extract może odczytać stronę, na której jestem zalogowany?

Nie. Czytnik nigdy nie loguje się do kont i nie wysyła Twoich cookies. Gdy witryna odrzuca nasz czytnik, wynik wraca bez treści i ze statusem witryny: nigdy nie rozwiązujemy CAPTCHA, nie logujemy się na konta ani nie obchodzimy blokady czy paywalla.

---

LLMWebSearch: LLMWebSearch to web search API dla agentów AI, który zwraca uszeregowane wyniki wraz z treścią najlepszych stron w formacie Markdown, z płatnością kryptowalutą i bez przesyłania dokumentu tożsamości. Kredyty przedpłacone od 1,20 USD/1K wyszukiwań nigdy nie wygasają. Bez KYC — bez dokumentu, bez selfie, bez zaświadczeń. Płatność kryptowalutą.
