# Format odpowiedzi: każde pole wyszukiwania, wyjaśnione

> Format Search API: każde pole /search i /extract, osiem wartości content_status i target_status, z pełnym przykładem. Bez KYC, płatność kryptowalutą.

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

Odpowiedź wyszukiwania to jeden obiekt JSON: kilka pól o wywołaniu, a potem uszeregowana tablica `results`. Każdy wynik mówi, czy jego strona została odczytana, a jeśli tak, zawiera treść. Oto każde pole, wraz ze statusami, które agent powinien obsłużyć.

**Szybka odpowiedź — Co zwraca API LLMWebSearch dla wyszukiwania?**

**LLMWebSearch** zwraca JSON z `query`, `created_at`, `credits_used` oraz uszeregowaną tablicą `results`. Każdy wynik ma swoją pozycję, tytuł, URL, host i snippet oraz `content_status`; gdy jest to `ok`, główna treść strony znajduje się w `content` z `word_count`. Jedno wyszukiwanie z odczytem do 3 stron kosztuje 1 kredyt, od 1,20 USD/1K wyszukiwań według stanu na październik 2026. Bez KYC; płatność kryptowalutą.

## Które pola opisują wywołanie?

Najwyższy poziom odpowiedzi `/search`.

| Pole | Typ | Znaczenie |
| --- | --- | --- |
| `query` | string | Zapytanie w postaci, w jakiej je wykonano, po przycięciu spacji |
| `created_at` | string | Kiedy wykonano wyszukiwanie, ISO 8601 w UTC |
| `credits_used` | integer | Ile kosztowało wywołanie: 1 lub 2, gdy `read` wynosiło od 4 do 10 |
| `results` | array | Uszeregowane wyniki, najlepszy pierwszy, maksymalnie `max_results` pozycji |

## Jakie pola niesie każdy wynik?

Pole, którego strona lub wynik wyszukiwania nie dostarcza, jest pomijane, a nie wysyłane jako puste.

| Pole | Typ | Gdy występuje | Znaczenie |
| --- | --- | --- | --- |
| `position` | integer | Zawsze | Pozycja w wyszukiwaniu, zaczynając od 1 |
| `title` | string | Zawsze | Tytuł wyniku |
| `url` | string | Zawsze | Adres strony |
| `host` | string | Zawsze | Nazwa hosta strony, przydatna do grupowania lub cytowania |
| `snippet` | string | Zawsze | Krótki fragment pokazany przez wyszukiwanie |
| `published_at` | string | Gdy data jest znana | Data publikacji ze strony lub z wyniku wyszukiwania |
| `content_status` | string | Zawsze | Czy strona została odczytana, a jeśli nie, to dlaczego |
| `content` | string | Gdy `content_status` wynosi `ok` | Główna treść jako Markdown lub zwykły tekst, przycięta na `max_chars` |
| `word_count` | integer | Gdy `content_status` wynosi `ok` | Słowa w całym wyodrębnionym tekście, liczone przed przycięciem |
| `target_status` | integer | Z `target_refused` | Kod statusu HTTP, którym odpowiedział serwis, np. 403 lub 429 |

## Co oznacza każdy content_status?

Żadna z tych zmian nie wpływa na cenę wyszukiwania. Dotyczą jednej strony, nigdy całego zapytania.

| `content_status` | Znaczenie | Co powinien zrobić agent |
| --- | --- | --- |
| `ok` | Strona została odczytana; `content` zawiera jej główny tekst | Użyj go i zacytuj `url` |
| `not_requested` | Wynik wykracza poza liczbę `read` | Zwiększ `read` lub w razie potrzeby odczytaj go przez `/extract` |
| `blocked_by_robots` | robots.txt tego serwisu nie pozwala naszemu czytnikowi na tej stronie | Oprzyj się na snippecie lub innym źródle |
| `blocked_by_site_policy` | Serwis deklaruje `Content-Signal: ai-input=no` | Oprzyj się na snippecie lub innym źródle |
| `target_refused` | Serwis odrzucił zapytanie; zobacz `target_status` | Nie ponawiaj próby dla tej strony; użyj innego źródła |
| `fetch_failed` | Błąd DNS, TLS lub połączenia albo strona już nie istnieje | Spróbuj innego wyniku; późniejsze ponowienie może zadziałać |
| `fetch_timeout` | Strona nie odpowiedziała w ciągu 15 sekund | Spróbuj innego wyniku; późniejsze ponowienie może zadziałać |
| `unsupported_content` | Link wskazuje plik, którego nie możemy zamienić na tekst | Użyj snippetu lub innego wyniku |

## Jak wygląda pełna odpowiedź?

Poniższy przykład poprosił o 5 wyników z odczytem pierwszych 4, więc kosztował 2 kredyty. Wyniki 1 i 3 zostały odczytane. Wynik 2 należy do serwisu, którego robots.txt nie wpuszcza naszego czytnika, wynik 4 odrzucił zapytanie, a wynik 5 wykracza poza `read`. Tytuły, URL-e i wartości są przykładowe.

*Odpowiedź POST /search (przykładowa)*

```json
{
  "query": "how to rotate api keys without downtime",
  "created_at": "2026-10-22T10:15:04Z",
  "credits_used": 2,
  "results": [
    {
      "position": 1,
      "title": "Rotating API keys",
      "url": "https://docs.example.com/security/key-rotation",
      "host": "docs.example.com",
      "snippet": "Create a second key, deploy it everywhere, then revoke the first one.",
      "published_at": "2026-09-30",
      "content_status": "ok",
      "content": "# Rotating API keys\n\n## Zero-downtime rotation\n\n1. Create a second key.\n2. Deploy it to every service.\n3. Revoke the old key.",
      "word_count": 948
    },
    {
      "position": 2,
      "title": "Key rotation checklist",
      "url": "https://blog.example.org/key-rotation-checklist",
      "host": "blog.example.org",
      "snippet": "Keep two keys active during the switch and alert on the old one.",
      "content_status": "blocked_by_robots"
    },
    {
      "position": 3,
      "title": "Secrets management basics",
      "url": "https://security.example.net/secrets-basics",
      "host": "security.example.net",
      "snippet": "Never commit keys to a repository.",
      "content_status": "ok",
      "content": "# Secrets management basics\n\n**Never** commit keys to a repository.",
      "word_count": 1310
    },
    {
      "position": 4,
      "title": "Key management service guide",
      "url": "https://cloud.example.com/kms-guide",
      "host": "cloud.example.com",
      "snippet": "Store keys in a managed vault and rotate them on a schedule.",
      "content_status": "target_refused",
      "target_status": 403
    },
    {
      "position": 5,
      "title": "API key best practices",
      "url": "https://dev.example.com/api-key-best-practices",
      "host": "dev.example.com",
      "snippet": "Scope each key to one service and one environment.",
      "content_status": "not_requested"
    }
  ]
}
```

## Które wyniki otrzymują status strony inny niż not_requested?

Tylko pierwsze `read` wyników oraz każdy element wywołania `/extract`. To strony, które nasz reader faktycznie próbował odczytać. Wszystko poza liczbą `read` pozostaje `not_requested`, niezależnie od tego, co odpowiedziałby serwis.

Kolejność nigdy się nie zmienia: reader pracuje na pozycjach 1, 2, 3 i tak dalej, nigdy na późniejszym wyniku zamiast wcześniejszego, który zawiódł. Jeśli agent potrzebuje zamiennika dla odmówionej strony, może odczytać kolejny wynik przez `/extract`.

## Jak wygląda odpowiedź extract?

`/extract` zwraca `credits_used` oraz tablicę `results` w kolejności przesłanych URL-i. Każdy element ma `url` i `content_status`; z `ok` dodaje `title`, `content` i `word_count`, a z `target_refused` dodaje `target_status`. Nie ma `position`, `host` ani `snippet`, ponieważ nie uruchomiono wyszukiwania.

[Referencja extract](https://llmwebsearch.com/pl/docs/extract/) pokazuje pełny przykład i wyjaśnia, jak liczone są jej kredyty.

## Jak zamienić wyniki w kontekst dla modelu?

Numeruj źródła, trzymaj URL przy każdym z nich i przekazuj tylko to, czego potrzebuje model. Kompaktowy układ sprawdza się dobrze: `[1] title — url`, potem treść tej strony, potem kolejne źródło. Poproś model, aby cytował za pomocą tych samych numerów.

Gdy wynik nie ma treści, przekaż modelowi jego snippet i zaznacz, że to tylko snippet. To pozwala uniknąć odpowiedzi opartych na stronie, której model nigdy nie widział. [Strona Python](https://llmwebsearch.com/pl/docs/python/) zawiera krótką pętlę, która robi to wszystko w ramach budżetu tokenów.

## Format odpowiedzi: często zadawane pytania

### Czy treść zawsze jest w Markdown?

Domyślnie Markdown. Wyślij `format: "text"`, aby otrzymać zwykły tekst bez znaczników, na przykład gdy tylko liczysz słowa lub klasyfikujesz strony. Nazwa pola pozostaje `content`.

### Dlaczego w niektórych wynikach brakuje published_at?

Wiele stron nie podaje daty, a niektóre wyniki wyszukiwania też jej nie pokazują. W takim przypadku pole jest pomijane, więc sprawdź jego obecność przed użyciem.

### Czy nowe pola mogą pojawić się później?

Tak. W wersji 1 pola mogą być dodawane, ale nigdy nie są zmieniane nazwy ani usuwane. Napisz parser tak, aby ignorował pola, których nie zna.

### Czy treść jest przechowywana po Waszej stronie?

Nie. Nie trenujemy żadnego modelu na Twoich zapytaniach ani na tym, co zwraca API, i nie dodajemy własnej reguły przeciwko przechowywaniu wyników; nadal obowiązują prawa witryn, których strony czytasz. Nasz log żądań przechowuje tylko krótki ślad każdego wywołania, opisany na [stronie prywatności](https://llmwebsearch.com/pl/privacy/).

---

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ą.
