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

Dokumentacja · API reference

Błędy i statusy stron: co się nie udało i czy ponawiać

Istnieją dwa rodzaje problemów. Błąd HTTP oznacza, że całe wywołanie się nie powiodło i nic nie kosztuje. Status strony oznacza, że wyszukiwanie zadziałało, ale jednej strony nie udało się odczytać; znajduje się on wewnątrz normalnej odpowiedzi 200. Agenci powinni obsługiwać oba przypadki, ale inaczej.

Ostatnia aktualizacja: · 4 min czytania

Szybka odpowiedź

Jakie błędy może zwrócić API LLMWebSearch i czy są płatne?

LLMWebSearch ma sześć błędów HTTP: 400 invalid_parameter, 401 invalid_api_key, 402 insufficient_credits, 429 rate_limited, 502 search_failed i 504 search_timeout. Żaden nie jest płatny. Strony, których nie można odczytać, pokazują content_status wewnątrz 200. Działające wyszukiwanie kosztuje 1 kredyt, zgodnie z 1,20 USD/1K wyszukiwań na październik 2026. Bez KYC; płatność kryptowalutą.

Jakie błędy HTTP istnieją?

Treść odpowiedzi to zawsze {"error": {"code": "…", "message": "…"}}. Żaden błąd nie zużywa kredytu.

HTTPcodePrzyczynaPonawiać?
400invalid_parameterBrakuje wymaganego parametru lub wartość jest poza zakresemNie: popraw zapytanie
401invalid_api_keyKlucz jest nieobecny, błędny lub unieważnionyNie: sprawdź klucz
402insufficient_creditsSaldo nie pokrywa tego wywołaniaNie: kup pakiet
429rate_limitedWięcej wywołań na minutę, niż pozwala kontoTak, po przerwie
502search_failedWyszukiwania nie udało się ukończyćTak, z backoffem
504search_timeoutBrak wyniku wyszukiwania w ciągu 30 sekundTak, z backoffem

Czym status strony różni się od błędu?

Status strony opisuje jeden wynik, a nie całe zapytanie. Wyszukiwanie się wykonało, wyniki są, a credits_used jest ustawione jak zwykle. Brakuje tylko treści tej jednej strony, a content_status mówi dlaczego: blocked_by_robots, blocked_by_site_policy, target_refused, fetch_failed, fetch_timeout lub unsupported_content.

Nie traktuj ich jako błędów, po których należy ponowić całe wyszukiwanie. Wykorzystaj pozostałe wyniki, snippet brakującej strony albo inne źródło. Strona format odpowiedzi wyjaśnia każdy status w tabeli.

Dlaczego nigdy nie ponawiasz wokół odmowy?

Bo odmowa to odpowiedź strony i szanujemy ją. 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ć. Witryna, która ustawia Content-Signal: ai-input=no w swoim robots.txt, trzyma treść swoich stron poza treścią Twoich wyników. Gdy strona odrzuca nasz reader kodem 403, 429 lub stroną z wyzwaniem, zgłaszamy to jako target_refused ze statusem strony w target_status.

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. Nie ponawiamy też z inną tożsamością ani z ukrytą przeglądarką. Twój agent nie powinien zapętlać się na takiej stronie: wynik się nie zmieni, a strona powiedziała nie.

Kiedy mój kod powinien ponowić próbę?

Tylko przy 429, 502 i 504. Poczekaj, a potem spróbuj ponownie, za każdym razem podwajając czas oczekiwania i dodając odrobinę losowości, żeby równolegli pracownicy nie ponawiali w tym samym momencie. Wystarczy od trzech do pięciu prób; potem zgłoś błąd.

Nigdy nie ponawiaj 400, 401 ani 402: to samo zapytanie daje tę samą odpowiedź, dopóki czegoś nie zmienisz. Dla stron fetch_failed i fetch_timeout mogą zadziałać później, przez nowe wyszukiwanie lub wywołanie /extract. target_refused, blocked_by_robots i blocked_by_site_policy są ostateczne.

Python: ponów 429, 502 i 504 z wykładniczym backoffem
import os
import random
import time

import requests

API = "https://llmwebsearch.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}
RETRY_ON = {429, 502, 504}


def search(body, attempts=5):
    delay = 1.0
    for attempt in range(1, attempts + 1):
        resp = requests.post(API, headers=HEADERS, json=body, timeout=60)
        if resp.status_code == 200:
            return resp.json()
        err = resp.json().get("error", {})
        if resp.status_code not in RETRY_ON or attempt == attempts:
            raise RuntimeError(f"{resp.status_code} {err.get('code')}: {err.get('message')}")
        time.sleep(delay + random.uniform(0, delay / 2))
        delay = min(delay * 2, 30)


data = search({"q": "how to rotate api keys without downtime"})
unread = [r["url"] for r in data["results"] if r["content_status"] not in ("ok", "not_requested")]
print("credits:", data["credits_used"], "| pages not read:", unread)

Co zrobić przy 402 insufficient_credits?

Zatrzymaj się i doładuj saldo. Wywołanie nie zostało wykonane i nic nie kosztowało. Aby nie zatrzymywać się w środku długiego zadania, sprawdź najpierw saldo przez GET https://llmwebsearch.com/api/v1/credits, które jest darmowe, i porównaj je z liczbą planowanych wyszukiwań. Pamiętaj, że wyszukiwanie z read powyżej 3 wymaga 2 kredytów.

Kredyty pochodzą z pakietów kupowanych z Twojego salda kryptowalutowego. Kredyty na wyszukiwanie nie mają daty ważności: to, czego nie wykorzystasz w tym miesiącu, będzie tam jeszcze w przyszłym roku.

Jak utrzymać się pod rate limitem?

Ogranicz, ile wywołań działa naraz w Twoim kodzie. Każde konto ma limit wywołań na minutę, widoczny w dashboardzie; poproś support, a można go podnieść. Niewielka pula równoległych pracowników, od czterech do ośmiu dla większości agentów, utrzymuje równe tempo bez skoków. Strony Python i Node.js pokazują taką pulę.

Gdy dostaniesz 429, zrób pauzę przed następną próbą, zamiast wysyłać ją od razu. Natychmiastowe ponowienie tylko dodaje kolejne odrzucone wywołania.

Błędy: najczęstsze pytania

Czy wyszukiwanie, w którym odrzucono każdą stronę, nadal kosztuje kredyt?

Tak, jeśli samo wyszukiwanie się wykonało: nadal dostajesz wyniki w rankingu i snippety. Cena wyszukiwania nie zależy od tego, ile jego stron udało się odczytać.

Czy 401 może być spowodowany unieważnionym kluczem?

Może. Unieważniony klucz, literówka, brakujący prefiks Bearer lub nagłówek, który do nas nie dotarł, dają 401 invalid_api_key. Twórz jeden klucz API na agenta, aplikację lub członka zespołu i unieważniaj dowolny z nich z dashboardu, nie ruszając pozostałych.

Dlaczego strona zwróciła fetch_timeout?

Strony są czytane równolegle, a strona, której odczyt trwa dłużej niż 15 sekund, jest zwracana bez treści, żeby nie blokowała całej odpowiedzi. Wolne strony czasem odpowiadają przy późniejszej próbie.

Czy mogę zobaczyć swoje nieudane wywołania?

Tak. Historia w panelu wymienia Twoje wywołania z 30 dni, także nieudane, wraz ze statusem i kredytami. Nieudane wywołania pokazują 0 kredytów.

Od 1,20 USD/1K wyszukiwań · bez KYC

Pobierz klucz API