# Error SERP API: kode, penyebab, perbaikan dan retry

> Kode error SerpCrypto SERP API: 400, 401, 402, 429, 502 dan 504, penyebabnya, dan cara memperbaiki atau mencoba ulang, serta mengapa error tidak memakai kredit.

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

Enam kode error, satu aturan: error tidak pernah memakai kredit. Halaman ini menjelaskan apa yang memicu setiap kode, apakah perlu di-retry, dan menyediakan kode retry dengan exponential backoff di Python dan Node.js.

**Jawaban singkat — Error SERP API mana yang harus saya retry, dan apakah pencarian yang gagal dikenakan biaya?**

**SerpCrypto** tidak pernah mengenakan biaya untuk error: hanya pencarian yang berhasil memakai 1 kredit. Retry `429 concurrency_limit`, `502 search_failed` dan `504 search_timeout` dengan exponential backoff. Jangan retry `400`, `401` atau `402`: perbaiki parameter, API key atau saldo terlebih dahulu. Kredit berharga mulai US$0,30/1K pencarian dan tidak pernah kedaluwarsa; pembayaran dengan kripto, tanpa KYC.

## Apa arti setiap kode error?

Tidak ada baris di tabel ini yang memakai kredit. 1 kredit = 1 permintaan pencarian yang berhasil, yang mengembalikan satu halaman hasil di mesin mana pun yang didukung. Permintaan yang gagal tidak dikenai biaya.

| HTTP | `code` | Penyebab | Apa yang harus dilakukan | Coba lagi? |
| --- | --- | --- | --- | --- |
| 400 | `invalid_parameter` | `q` tidak ada, atau ada nilai di luar daftar yang diizinkan | Perbaiki request; pesan error menyebutkan nama parameternya | Tidak |
| 401 | `invalid_api_key` | Tidak ada API key, API key salah ketik, atau API key sudah dicabut | Periksa header atau `api_key`; buat API key baru jika perlu | Tidak |
| 402 | `insufficient_credits` | Saldo akun 0 kredit | Beli paket kredit dari saldo Anda | Setelah membeli |
| 429 | `concurrency_limit` | Jumlah pencarian bersamaan melebihi batas akun Anda | Tunggu, kurangi paralelisme, atau minta limit lebih tinggi ke support | Ya, dengan backoff |
| 502 | `search_failed` | Engine atau koleksi gagal untuk request ini | Coba lagi request yang sama | Ya, dengan backoff |
| 504 | `search_timeout` | Tidak ada jawaban tepat waktu | Coba lagi request yang sama | Ya, dengan backoff |

## Seperti apa bentuk jawaban error?

Setiap error punya body JSON kecil yang sama dengan `code` yang stabil dan `message` yang mudah dibaca manusia. Percabangkan program Anda berdasarkan `code` dan catat `message` untuk dibaca manusia. Status HTTP-nya sesuai tabel di atas.

*Body jawaban 402*

```json
{
  "error": {
    "code": "insufficient_credits",
    "message": "Your account has no search credits left."
  }
}
```

## Mengapa saya mendapat 400 invalid_parameter?

Ada nilai wajib yang tidak ada atau ada nilai di luar daftar yang diterima API. Penyebab umumnya adalah `q` kosong, nama engine yang salah ketik seperti `google-news` alih-alih `google_news`, `page` di atas 10, atau `device` selain `desktop` atau `mobile`.

`message` menyebutkan parameter yang bermasalah. Bandingkan request Anda dengan [referensi API](https://serpcrypto.com/id/docs/search/); tidak ada yang dikenakan biaya, jadi Anda bisa memperbaiki dan mengirim ulang saat itu juga.

## Mengapa saya mendapat 401 invalid_api_key?

API key tidak sampai ke API, atau tidak valid. Periksa bahwa header-nya persis `Authorization: Bearer YOUR_KEY`, dengan spasi setelah `Bearer`. Periksa juga bahwa environment variable Anda sudah diatur di shell atau service yang menjalankan kode, bukan hanya di terminal Anda. API key yang dicabut akan terus gagal: buat API key baru di dashboard.

## Apa yang harus saya lakukan dengan 402 insufficient_credits?

Beli paket kredit dari saldo Anda, lalu kirim ulang. Jika saldo terlalu rendah, top up dengan kripto dulu; top up minimum US$25. Baca `credits_remaining` dari `GET https://serpcrypto.com/api/v1/credits` sebelum job besar agar tidak berhenti di tengah jalan: panggilan itu gratis.

## Bagaimana menangani 429 concurrency_limit?

Perlambat, jangan berhenti. Limit menghitung pencarian yang berjalan bersamaan, bukan pencarian per hari. Setiap akun dapat menjalankan sejumlah pencarian secara bersamaan; batasnya ditampilkan di dashboard Anda dan dinaikkan atas permintaan. Baca `concurrency_limit` dari endpoint kredit dan sesuaikan ukuran worker pool Anda dengannya; halaman [Python](https://serpcrypto.com/id/docs/python/) dan [Node.js](https://serpcrypto.com/id/docs/node/) menunjukkan pool yang tidak pernah melewatinya.

## Kapan 502 dan 504 dikembalikan?

`502 search_failed` berarti pencarian tidak bisa diselesaikan untuk request ini; `504 search_timeout` berarti pencarian tidak selesai tepat waktu. Keduanya gratis dan keduanya layak dicoba lagi. Tunggu lebih lama sebelum setiap percobaan baru, seperti yang dilakukan kode di bawah, dan menyerah setelah lima percobaan agar job yang macet tidak berulang selamanya.

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

```python
import os
import random
import time

import requests

API_URL = "https://serpcrypto.com/api/v1/search"
RETRYABLE = {429, 502, 504}


def search(params, max_attempts=5):
    headers = {"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]}
    for attempt in range(1, max_attempts + 1):
        r = requests.get(API_URL, params=params, headers=headers, timeout=90)
        if r.status_code == 200:
            return r.json()
        error = r.json().get("error", {})
        if r.status_code not in RETRYABLE or attempt == max_attempts:
            raise RuntimeError(f"{r.status_code} {error.get('code')}: {error.get('message')}")
        # exponential backoff with jitter: about 1 s, 2 s, 4 s, 8 s
        time.sleep(2 ** (attempt - 1) + random.random())
    raise RuntimeError("unreachable")


print(search({"q": "solar panel installers", "gl": "au", "hl": "en"})["search_metadata"])
```

*Node.js: logika yang sama dengan fetch*

```javascript
// retry.mjs — Node.js 18+
const API_URL = "https://serpcrypto.com/api/v1/search";
const RETRYABLE = new Set([429, 502, 504]);
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

export async function search(params, maxAttempts = 5) {
  const url = `${API_URL}?${new URLSearchParams(params)}`;
  const headers = { Authorization: `Bearer ${process.env.SERPCRYPTO_API_KEY}` };
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
    const res = await fetch(url, { headers });
    if (res.ok) return res.json();
    const body = await res.json().catch(() => ({}));
    const code = body.error?.code ?? "unknown";
    if (!RETRYABLE.has(res.status) || attempt === maxAttempts) {
      throw new Error(`${res.status} ${code}: ${body.error?.message ?? ""}`);
    }
    // exponential backoff with jitter: about 1 s, 2 s, 4 s, 8 s
    await sleep(1000 * 2 ** (attempt - 1) + Math.random() * 1000);
  }
  throw new Error("unreachable");
}

console.log((await search({ q: "solar panel installers", gl: "au", hl: "en" })).search_metadata);
```

## Apakah timeout HTTP saya harus pendek atau panjang?

Cukup panjang agar pencarian selesai: pencarian berjalan live, jadi atur timeout client Anda ke 60 sampai 90 detik, bukan beberapa detik. Client yang menyerah terlalu cepat mengirim request kedua saat request pertama masih berjalan, yang membuang satu slot konkurensi dan, jika keduanya berhasil, dua kredit.

## Pertanyaan seputar error

### Apakah pencarian tetap dikenai biaya jika program saya crash sebelum membaca jawabannya?

Ya, jika API menyelesaikan pencarian dan mengembalikan 200: kredit terpakai saat pencarian berhasil, bukan saat Anda membacanya. Itu alasan lain untuk menyetel timeout klien yang panjang.

### Apakah percobaan ulang dikenai biaya tambahan?

Hanya percobaan yang berhasil yang memakai satu kredit. Percobaan gagal dengan 429, 502, atau 504 gratis, jadi permintaan yang berhasil pada percobaan ketiga tetap memakan total 1 kredit.

### Ke mana saya melaporkan error yang terus berulang?

Kirim email ke support@serpcrypto.com dengan `search_metadata.id` dari pencarian yang berhasil atau waktu, engine, dan parameter dari pencarian yang gagal. Balasan email dalam 12 jam, 7 hari seminggu, termasuk bantuan untuk integrasi API.

---

SerpCrypto: SerpCrypto adalah SERP API untuk developer dan AI agent yang mengembalikan hasil pencarian Google dan Bing dalam format JSON, dibayar dengan kripto tanpa unggah identitas. Kredit pencarian prabayar mulai dari US$0,30/1K pencarian tidak pernah kedaluwarsa. Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan kripto.
