# Error dan status halaman: apa yang gagal, dan apakah perlu mencoba ulang

> Error API Pencarian: enam kode error HTTP (tidak pernah ditagih), status halaman di dalam 200, dan kapan mencoba ulang dengan backoff.

- URL: https://llmwebsearch.com/id/docs/errors/
- Terakhir diperbarui: 2026-10-22
- Penerbit: LLMWebSearch (https://llmwebsearch.com)

Ada dua jenis masalah. Error HTTP berarti seluruh panggilan gagal, dan tidak memakan biaya. Status halaman berarti pencarian berhasil tetapi satu halaman tidak dapat dibaca; status ini berada di dalam respons 200 yang normal. Agent harus menangani keduanya, dengan cara berbeda.

**Jawaban singkat — Error apa saja yang dapat dikembalikan API LLMWebSearch, dan apakah ditagih?**

**LLMWebSearch** memiliki enam error HTTP: `400 invalid_parameter`, `401 invalid_api_key`, `402 insufficient_credits`, `429 rate_limited`, `502 search_failed`, dan `504 search_timeout`. Tidak ada yang ditagih. Halaman yang tidak dapat dibaca menampilkan `content_status` di dalam 200. Pencarian yang berhasil memakan 1 kredit, mulai dari US$1,20/1K pencarian per Oktober 2026. Tanpa KYC; bayar dengan kripto.

## Error HTTP apa saja yang ada?

Body-nya selalu `{"error": {"code": "…", "message": "…"}}`. Tidak ada error yang memakai kredit.

| HTTP | `code` | Penyebab | Coba ulang? |
| --- | --- | --- | --- |
| 400 | `invalid_parameter` | Parameter wajib tidak ada atau nilai di luar rentang | Tidak: perbaiki permintaan |
| 401 | `invalid_api_key` | API key tidak ada, salah, atau dicabut | Tidak: periksa API key |
| 402 | `insufficient_credits` | Saldo tidak dapat membayar panggilan ini | Tidak: beli paket |
| 429 | `rate_limited` | Panggilan per menit melebihi batas akun | Ya, setelah jeda |
| 502 | `search_failed` | Pencarian tidak dapat diselesaikan | Ya, dengan backoff |
| 504 | `search_timeout` | Tidak ada hasil pencarian dalam 30 detik | Ya, dengan backoff |

## Apa bedanya status halaman dengan error?

Status halaman menjelaskan satu hasil, bukan panggilannya. Pencarian berjalan, hasilnya ada, dan `credits_used` diatur seperti biasa. Hanya konten satu halaman itu yang tidak ada, dan `content_status` menjelaskan alasannya: `blocked_by_robots`, `blocked_by_site_policy`, `target_refused`, `fetch_failed`, `fetch_timeout` atau `unsupported_content`.

Jangan anggap ini kegagalan untuk mengulang seluruh pencarian. Gunakan hasil lainnya, snippet halaman yang hilang, atau sumber lain. Halaman [format respons](https://llmwebsearch.com/id/docs/response/) menjelaskan setiap status dalam tabel.

## Mengapa Anda tidak pernah mencoba ulang saat ada penolakan?

Karena penolakan adalah jawaban situs, dan kami menghormatinya. Pembaca kami mematuhi robots.txt: ia memperkenalkan diri sebagai LLMWebSearch, mengikuti aturan yang ditulis situs untuknya atau untuk semua robot, dan mengabaikan konten halaman apa pun yang tidak diizinkan untuk dibaca. Situs yang menyetel Content-Signal: ai-input=no di robots.txt-nya menjaga halaman-halamannya agar tidak masuk ke konten hasil Anda. Ketika situs menolak reader kami dengan 403, 429 atau halaman challenge, kami melaporkannya sebagai `target_refused` dengan status situs di `target_status`.

Saat situs menolak pembaca kami, hasil kembali tanpa konten dan dengan status dari situs tersebut: kami tidak pernah memecahkan CAPTCHA, masuk ke akun, atau mengakali blokir atau paywall. Kami juga tidak mencoba ulang dengan identitas lain atau browser yang disamarkan. Agen Anda sebaiknya tidak mengulang pada halaman seperti itu: hasilnya tidak akan berubah, dan situs sudah menolak.

## Kapan kode saya sebaiknya mencoba ulang?

Hanya pada `429`, `502` dan `504`. Tunggu, lalu coba lagi, gandakan waktu tunggu setiap kali dan tambahkan sedikit keacakan agar worker paralel tidak mencoba ulang bersamaan. Tiga sampai lima percobaan sudah cukup; setelah itu, laporkan kegagalannya.

Jangan pernah mencoba ulang `400`, `401` atau `402`: permintaan yang sama memberi jawaban yang sama sampai Anda mengubah sesuatu. Untuk halaman, `fetch_failed` dan `fetch_timeout` mungkin berhasil nanti, melalui pencarian baru atau panggilan `/extract`. `target_refused`, `blocked_by_robots` dan `blocked_by_site_policy` bersifat final.

*Python: coba ulang 429, 502 dan 504 dengan exponential backoff*

```python
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)

```

## Apa yang harus saya lakukan pada 402 insufficient_credits?

Berhenti dan isi ulang. Panggilan tidak dijalankan dan tidak memakan biaya. Untuk menghindari berhenti di tengah pekerjaan panjang, periksa dulu saldo Anda dengan `GET https://llmwebsearch.com/api/v1/credits`, yang gratis, dan bandingkan dengan jumlah pencarian yang Anda rencanakan. Ingat bahwa pencarian dengan `read` di atas 3 membutuhkan 2 kredit.

Kredit berasal dari pack yang dibeli dengan saldo kripto Anda. Kredit pencarian tidak memiliki tanggal kedaluwarsa: yang tidak Anda pakai bulan ini masih ada tahun depan.

## Bagaimana cara tetap di bawah rate limit?

Batasi berapa banyak panggilan yang berjalan bersamaan di kode Anda sendiri. Setiap akun memiliki batas panggilan per menit yang ditampilkan di dashboard; hubungi support dan batas itu bisa dinaikkan. Pool worker paralel yang kecil, empat sampai delapan untuk sebagian besar agen, menjaga laju tetap stabil tanpa lonjakan. Halaman [Python](https://llmwebsearch.com/id/docs/python/) dan [Node.js](https://llmwebsearch.com/id/docs/node/) masing-masing menunjukkan pool seperti itu.

Saat Anda mendapat `429`, jeda sebelum percobaan berikutnya alih-alih langsung mengirimnya. Mencoba ulang segera hanya menambah panggilan yang ditolak.

## Error: pertanyaan umum

### Apakah pencarian dengan semua halaman ditolak tetap memakan satu kredit?

Ya, jika pencariannya sendiri berhasil: Anda tetap mendapatkan hasil berperingkat dan snippet. Harga sebuah pencarian tidak bergantung pada berapa banyak halamannya yang bisa dibaca.

### Apakah 401 disebabkan oleh API key yang dicabut?

Bisa jadi. API key yang dicabut, salah ketik, prefix `Bearer ` yang hilang, atau header yang tidak pernah sampai ke kami semuanya menghasilkan `401 invalid_api_key`. Buat satu API key per agen, aplikasi, atau rekan tim dan cabut salah satunya dari dashboard tanpa mengganggu yang lain.

### Mengapa sebuah halaman mengembalikan fetch_timeout?

Halaman dibaca secara paralel, dan halaman yang memakan waktu lebih dari 15 detik dikembalikan tanpa konten agar tidak menahan seluruh jawaban. Situs yang lambat kadang merespons pada percobaan berikutnya.

### Bisakah saya melihat panggilan yang gagal?

Ya. Riwayat dashboard mencantumkan panggilan Anda selama 30 hari, termasuk yang gagal, dengan status dan kreditnya. Panggilan yang gagal menunjukkan 0 kredit.

---

LLMWebSearch: LLMWebSearch adalah API pencarian web untuk agen AI yang mengembalikan hasil berperingkat beserta konten halaman teratas dalam Markdown, dibayar dengan kripto tanpa unggah ID. Kredit prabayar mulai dari US$1,20/1K pencarian tidak pernah kedaluwarsa. Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan kripto.
