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
| 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. |
{
"q": "how to rotate api keys without downtime",
"max_results": 5,
"read": 3,
"max_chars": 6000
}{
"q": "open source license change",
"topic": "news",
"time_range": "week",
"include_domains": [
"news.example.com",
"example.org"
],
"read": 0
}Odpowiedź 200
{
"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"
}
]
}Przykłady kodu
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}'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"])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
{
"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"
}
]
}Przykłady kodu
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=0import 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"]])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 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.
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.