# Referencja endpointu wyszukiwania: POST i GET /search

> Referencja endpointu wyszukiwania: każdy parametr POST i GET /search, od read i max_chars po topic, time_range i filtry domen. Bez KYC, płatność kryptowalutą.

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

`/search` uruchamia wyszukiwanie w sieci na żywo, szereguje do 20 wyników i odczytuje strony stojące za pierwszymi z nich. Ta strona wymienia każdy parametr, jego wartość domyślną, limity i wpływ na cenę.

**Szybka odpowiedź — Jakie parametry przyjmuje endpoint wyszukiwania LLMWebSearch?**

**LLMWebSearch** — endpoint `/search` wymaga tylko `q`. Parametry opcjonalne określają, ile wyników wraca (`max_results`), ile stron jest odczytywanych (`read`), format i długość treści, news lub web, zakres czasowy, kraj i język oraz domeny do zachowania lub odrzucenia. Odczyt do 3 stron kosztuje 1 kredyt, od 1,20 USD/1K wyszukiwań według stanu na październik 2026. Bez KYC; płatność kryptowalutą.

## /search at a glance

| Atrybut | Wartość |
| --- | --- |
| Metody | `POST` z ciałem JSON lub `GET` z tymi samymi nazwami w query string |
| URL | `https://llmwebsearch.com/api/v1/search` |
| Wymagane | `q`: od 1 do 400 znaków; operatory wyszukiwania są przekazywane tak, jak zostały zapisane |
| Wartości domyślne | 5 wyników, odczyt pierwszych 3, Markdown do 6 000 znaków na stronę |
| Rozliczanie | Jeden kredyt opłaca jedno wyszukiwanie: do 20 wyników z rankingiem, przy czym strony z pierwszych 3 są odczytywane i zwracane jako Markdown. Odczyt od 4 do 10 stron to 2 kredyty. Wywołanie zakończone błędem nic nie kosztuje |
| Wyniki | Wyniki pochodzą z wyszukiwania w sieci na żywo, uruchamianego w momencie Twojego wywołania, w kolejności, w jakiej szereguje je wyszukiwarka; nic nie jest serwowane ze starego indeksu |
| Filtry | Wybierz kraj i język wyników, zakres czasu (ostatni dzień, tydzień, miesiąc lub rok), wyniki web lub news oraz domeny do uwzględnienia lub wykluczenia |
| Czytnik stron | `LLMWebSearch/1.0 (+https://llmwebsearch.com/bot/)` |

## Wyszukaj w sieci i odczytaj najlepsze wyniki (POST)

`POST /api/v1/search`

Uruchamia wyszukiwanie w sieci na żywo i zwraca uszeregowane wyniki. Strony pierwszych `read` wyników są pobierane równolegle, a ich główna treść jest zwracana w `content`. Przykład pyta, jak rotować klucze API; tytuły, daty i wartości są ilustracyjne.

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

**Treść zapytania**

| Pole | Typ | Wymagane | Opis |
| --- | --- | --- | --- |
| `q` | string | Tak | Zapytanie wyszukiwania, od 1 do 400 znaków. Cudzysłowy i operatory takie jak `site:` są zachowywane tak, jak zostały zapisane. |
| `max_results` | integer | Nie | Liczba uszeregowanych wyników, od 1 do 20. Domyślnie 5. |
| `read` | integer | Nie | Ile z pierwszych wyników jest odczytywanych i zwracanych wraz z treścią, od 0 do 10. Domyślnie 3. Od 4 w górę wywołanie kosztuje 2 kredyty. |
| `format` | string | Nie | `markdown` (domyślnie) lub `text` dla treści strony. |
| `max_chars` | integer | Nie | Limit długości treści każdej strony, od 500 do 50 000 znaków. Domyślnie 6000. |
| `topic` | string | Nie | `web` (domyślnie) lub `news`. |
| `time_range` | string | Nie | `day`, `week`, `month` lub `year`. Brak wartości domyślnej: dowolna data. |
| `country` | string | Nie | Dwuliterowy kod kraju (ISO 3166-1 alpha-2) określający, gdzie uruchamiane jest wyszukiwanie. Domyślnie `us`. |
| `language` | string | Nie | Język wyników, taki jak `en`, `de` lub `pt-BR`. Domyślnie `en`. |
| `include_domains` | string[] | Nie | Do 20 domen; zachowywane są tylko wyniki z tych domen i ich subdomen. |
| `exclude_domains` | string[] | Nie | Do 20 domen, których wyniki są odrzucane. |

*Przykład: five results, the top three read as Markdown*

```json
{
  "q": "how to rotate api keys without downtime",
  "max_results": 5,
  "read": 3,
  "max_chars": 6000
}
```

*Przykład: news of the past week from two sites, nothing read*

```json
{
  "q": "open source license change",
  "topic": "news",
  "time_range": "week",
  "include_domains": [
    "news.example.com",
    "example.org"
  ],
  "read": 0
}
```

**Odpowiedź** `200`

```json
{
  "query": "how to rotate api keys without downtime",
  "created_at": "2026-10-22T10:15:04Z",
  "credits_used": 1,
  "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.",
      "published_at": "2026-06-12",
      "content_status": "ok",
      "content": "# Secrets management basics\n\n**Never** commit keys to a repository...",
      "word_count": 1310
    },
    {
      "position": 4,
      "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"
    }
  ]
}
```

*curl*

```bash
curl -s "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "how to rotate api keys without downtime", "max_results": 5, "read": 3}'
```

*Python*

```python
import os
import requests

resp = requests.post(
    "https://llmwebsearch.com/api/v1/search",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    json={"q": "how to rotate api keys without downtime", "max_results": 5, "read": 3},
    timeout=60,
)
resp.raise_for_status()
for r in resp.json()["results"]:
    print(r["position"], r["content_status"], r["url"])
```

*Node.js*

```javascript
const res = await fetch('https://llmwebsearch.com/api/v1/search', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ q: 'how to rotate api keys without downtime', max_results: 5, read: 3 }),
});
const { results } = await res.json();
for (const r of results) console.log(r.position, r.content_status, r.url);
```

## Wyszukaj w sieci (GET)

`GET /api/v1/search`

To samo wyszukiwanie z parametrami w query string, zakodowanymi w URL. Listy takie jak `include_domains` zapisuje się jako jedną wartość oddzieloną przecinkami. Przydatne do szybkiego testu lub dla narzędzi, które wysyłają tylko żądania GET. Przykład prosi wyłącznie o wyniki (`read=0`).

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

**Parametry**

| Nazwa | W | Typ | Wymagane | Opis |
| --- | --- | --- | --- | --- |
| `q` | query | string | Tak | Zapytanie wyszukiwania zakodowane w URL, od 1 do 400 znaków. |
| `max_results` | query | integer | Nie | Od 1 do 20. Domyślnie 5. |
| `read` | query | integer | Nie | Od 0 do 10. Domyślnie 3; 4 lub więcej kosztuje 2 kredyty. |
| `format` | query | string | Nie | `markdown` (domyślnie) lub `text`. |
| `max_chars` | query | integer | Nie | Od 500 do 50 000 na stronę. Domyślnie 6000. |
| `topic` | query | string | Nie | `web` (domyślnie) lub `news`. |
| `time_range` | query | string | Nie | `day`, `week`, `month` lub `year`. |
| `country` | query | string | Nie | Kod ISO 3166-1 alpha-2. Domyślnie `us`. |
| `language` | query | string | Nie | Kod języka. Domyślnie `en`. |
| `include_domains` | query | string | Nie | Lista rozdzielona przecinkami, do 20 domen. |
| `exclude_domains` | query | string | Nie | Lista rozdzielona przecinkami, do 20 domen. |
| `api_key` | query | string | Nie | Twój klucz, gdy nie wysyłasz nagłówka `Authorization`. |

**Odpowiedź** `200`

```json
{
  "query": "postgres connection pooling",
  "created_at": "2026-10-22T10:21:47Z",
  "credits_used": 1,
  "results": [
    {
      "position": 1,
      "title": "Connection pooling explained",
      "url": "https://docs.example.com/db/pooling",
      "host": "docs.example.com",
      "snippet": "A pool keeps a few database connections open and lends them to requests.",
      "content_status": "not_requested"
    },
    {
      "position": 2,
      "title": "Sizing a connection pool",
      "url": "https://blog.example.org/pool-size",
      "host": "blog.example.org",
      "snippet": "Start small: the right size depends on cores and disk, not on traffic.",
      "published_at": "2026-03-04",
      "content_status": "not_requested"
    }
  ]
}
```

*curl*

```bash
curl -sG "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  --data-urlencode "q=postgres connection pooling" \
  -d max_results=10 -d read=0
```

*Python*

```python
import os
import requests

resp = requests.get(
    "https://llmwebsearch.com/api/v1/search",
    headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
    params={"q": "postgres connection pooling", "max_results": 10, "read": 0},
    timeout=60,
)
print([r["url"] for r in resp.json()["results"]])
```

*Node.js*

```javascript
const params = new URLSearchParams({ q: 'postgres connection pooling', max_results: '10', read: '0' });
const res = await fetch(`https://llmwebsearch.com/api/v1/search?${params}`, {
  headers: { Authorization: `Bearer ${process.env.LLMWEBSEARCH_API_KEY}` },
});
console.log((await res.json()).results.map((r) => r.url));
```

## Jak uzyskać wyniki bez jakiejkolwiek treści strony?

Ustaw `read` na `0`. Każdy wynik wraca wtedy z tytułem, URL, hostem, snippetem i datą oraz `content_status: "not_requested"`. Odpowiedź jest znacznie mniejsza, co pomaga, gdy agent musi tylko wybrać, które linki się liczą.

Cena pozostaje 1 kredyt, tyle samo co odczyt do 3 stron. Częsty schemat to zapytanie `read=0`, żeby zawęzić listę, a potem [wywołanie extract](https://llmwebsearch.com/pl/docs/extract/) na dwóch lub trzech URL-ach wybranych przez model.

## Kiedy wyszukiwanie kosztuje 2 kredyty?

Gdy `read` wynosi od 4 do 10. Odczyt większej liczby stron wymaga więcej pracy po naszej stronie, więc cena rośnie jednorazowo i pozostaje na poziomie 2 kredytów aż do maksimum 10 stron.

`credits_used` w każdej odpowiedzi pokazuje, ile kosztowało wywołanie. Strona, której nie udało się odczytać z powodu reguły robots.txt lub odmowy, nie obniża ani nie podnosi tej ceny. Jeśli przez większość czasu potrzebujesz tylko kilku pełnych stron, zostaw `read` na 3 i wywołaj `/extract` dla rzadkiej dodatkowej strony.

## Jak wyszukiwać najnowsze wiadomości?

Wyślij `topic: "news"` i `time_range`. Wyniki pochodzą wtedy z artykułów prasowych, a `time_range` zachowuje tylko te z ostatnich `day`, `week`, `month` lub `year`. `published_at` jest uzupełniane, gdy artykuł lub wynik wyszukiwania podaje datę.

Ten sam filtr świeżości działa z `topic: "web"`. Przydaje się przy pytaniach o ostatnie premiery lub zmiany cen, gdzie stara strona wprowadziłaby model w błąd.

*Wiadomości z ostatniego tygodnia, odczyt 3 najlepszych artykułów*

```bash
curl -s "https://llmwebsearch.com/api/v1/search" \
  -H "Authorization: Bearer $LLMWEBSEARCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "database release security fix", "topic": "news", "time_range": "week", "read": 3}'
```

## Jak ograniczyć wyniki do wybranych stron?

Wypisz je w `include_domains`, do 20 pozycji. Zachowywane są tylko wyniki, których host jest jedną z tych domen lub jedną z ich subdomen: `example.com` pasuje też do `docs.example.com`. Użyj `exclude_domains` w drugą stronę, na przykład aby usunąć własną stronę z wyników.

W treści POST oba pola są tablicami JSON. W żądaniu GET zapisz je jako jedną wartość rozdzieloną przecinkami. Samo zapytanie może też zawierać operator `site:`; jest przekazywane do wyszukiwania tak, jak zostało zapisane.

## Co zmieniają kraj i język?

`country` ustawia, gdzie odbywa się wyszukiwanie, za pomocą dwuliterowego kodu, np. `us`, `de` lub `br`. Rankingi różnią się w zależności od kraju, zwłaszcza w przypadku usług lokalnych, cen i regulacji. `language` ustawia język wyników, np. `en`, `fr` lub `pt-BR`.

Oba domyślnie ustawione są na Stany Zjednoczone i angielski. Ustaw je razem, gdy agent pracuje dla użytkowników na jednym rynku: niemiecki użytkownik pytający o przepisy podatkowe oczekuje `country: "de"` i `language: "de"`.

## Ile tekstu strony wraca?

Do `max_chars` znaków na stronę, domyślnie 6000, w zakresie od 500 do 50 000. Limit chroni okno kontekstu modelu: trzy strony po 6000 znaków to około 4500 tokenów po angielsku.

`word_count` liczy cały wyodrębniony tekst, przed przycięciem, więc możesz sprawdzić, kiedy strona została skrócona. Gdy odpowiedź wymaga jednego długiego dokumentu, najpierw wyszukaj z niskim limitem, a potem pobierz tylko tę stronę przez `/extract` z wyższym limitem. Wolna strona nie jest czekana w nieskończoność: po 15 sekundach wraca jako `fetch_timeout`, bez treści.

## Endpoint wyszukiwania: najczęstsze pytania

### Czy używać POST czy GET?

POST w kodzie, bo tablice JSON i długie zapytania są prostsze w treści żądania. GET nadaje się do szybkiego testu w terminalu lub w narzędziu, które wysyła tylko query stringi. Oba zwracają tę samą odpowiedź i kosztują tyle samo.

### Czy mogę poprosić o więcej niż 20 wyników?

Nie. 20 to maksimum na wywołanie. Agentom rzadko potrzeba więcej: drugie wyszukiwanie z przeformułowanym zapytaniem zwykle daje lepsze źródła niż długa lista.

### Czy strony są czytane jedna po drugiej?

Nie, równolegle. Strona, która nie odpowie w ciągu 15 sekund, wraca bez treści, jako `fetch_timeout`, więc jedna wolna witryna nie blokuje całej odpowiedzi.

### Która wyszukiwarka generuje wyniki?

Wyniki pochodzą z wyszukiwania w sieci na żywo, uruchamianego w momencie Twojego wywołania, w kolejności, w jakiej szereguje je wyszukiwarka; nic nie jest serwowane ze starego indeksu. Nie ujawniamy, którzy dostawcy zewnętrzni obsługują wyszukiwanie.

---

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