Snel antwoord
Welke SERP API-fouten moet ik retryen, en worden mislukte zoekopdrachten in rekening gebracht?
SerpCrypto rekent nooit een fout aan: alleen een geslaagde zoekopdracht gebruikt 1 credit. Retry 429 concurrency_limit, 502 search_failed en 504 search_timeout met exponentiële backoff. Retry 400, 401 of 402 niet: herstel eerst de parameter, de sleutel of het saldo. Credits kosten vanaf US$ 0,30/1K zoekopdrachten en verlopen nooit; betaling is in crypto, zonder KYC.
Wat betekent elke foutcode?
Geen enkele rij in deze tabel gebruikt een credit. 1 credit = 1 geslaagde zoekopdracht, die één pagina met resultaten oplevert op elke ondersteunde engine. Een mislukte zoekopdracht wordt niet in rekening gebracht.
| HTTP | code | Oorzaak | Wat te doen | Opnieuw proberen? |
|---|---|---|---|---|
| 400 | invalid_parameter | q ontbreekt, of een waarde valt buiten de toegestane lijst | Corrigeer de aanvraag; het bericht noemt de parameter | Nee |
| 401 | invalid_api_key | Geen API-sleutel, een verkeerd getypte API-sleutel of een ingetrokken API-sleutel | Controleer de header of api_key; maak zo nodig een nieuwe API-sleutel aan | Nee |
| 402 | insufficient_credits | Het account heeft 0 credits | Koop een pack vanuit je saldo | Na aankoop |
| 429 | concurrency_limit | Meer zoekopdrachten tegelijk dan je account toestaat | Wacht, verlaag de paralleliteit of vraag support om een hogere limiet | Ja, met backoff |
| 502 | search_failed | De engine of de collection is mislukt voor deze aanvraag | Probeer dezelfde aanvraag opnieuw | Ja, met backoff |
| 504 | search_timeout | Geen antwoord op tijd | Probeer dezelfde aanvraag opnieuw | Ja, met backoff |
Hoe ziet een foutantwoord eruit?
Elke fout heeft dezelfde kleine JSON-body met een stabiele code en een leesbare message. Vertak in je programma op code en log message voor mensen. De HTTP-status komt overeen met de tabel hierboven.
{
"error": {
"code": "insufficient_credits",
"message": "Your account has no search credits left."
}
}Waarom krijg ik 400 invalid_parameter?
Een vereiste waarde ontbreekt of een waarde valt buiten de lijst die de API accepteert. De gebruikelijke oorzaken zijn een lege q, een engine-naam met een typefout zoals google-news in plaats van google_news, een page boven 10, of een device anders dan desktop of mobile.
De message noemt de parameter die fout is. Vergelijk je aanvraag met de API-referentie; er wordt niets in rekening gebracht, dus je kunt meteen corrigeren en opnieuw versturen.
Waarom krijg ik 401 invalid_api_key?
De API-sleutel bereikte de API niet, of is niet geldig. Controleer dat de header precies Authorization: Bearer YOUR_KEY is, met een spatie na Bearer. Controleer ook dat je environment variable is ingesteld in de shell of service die de code uitvoert, niet alleen in je terminal. Een ingetrokken API-sleutel blijft falen: maak een nieuwe aan in het dashboard.
Wat moet ik doen aan 402 insufficient_credits?
Koop een creditpack vanuit je saldo en verstuur opnieuw. Is je saldo te laag, waardeer dan eerst op met crypto; de minimale opwaardering is US$ 25. Lees credits_remaining uit GET https://serpcrypto.com/api/v1/credits vóór een grote klus om te voorkomen dat je halverwege moet stoppen: die call is gratis.
Hoe ga ik om met 429 concurrency_limit?
Doe het rustiger aan in plaats van te stoppen. De limiet telt zoekopdrachten die tegelijk lopen, niet zoekopdrachten per dag. Elk account kan een vast aantal zoekopdrachten tegelijk uitvoeren; de limiet staat in je dashboard en wordt op aanvraag verhoogd. Lees concurrency_limit uit het credits-endpoint en stem je worker pool daarop af; de Python- en Node.js-pagina's tonen een pool die die nooit overschrijdt.
Wanneer worden 502 en 504 teruggegeven?
502 search_failed betekent dat de zoekopdracht niet kon worden voltooid voor deze aanvraag; 504 search_timeout betekent dat die niet op tijd werd voltooid. Beide zijn gratis en beide zijn het waard om opnieuw te proberen. Wacht iets langer voor elke nieuwe poging, zoals de code hieronder doet, en geef na vijf pogingen op zodat een vastgelopen job niet eindeloos blijft loopen.
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"])// 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);Moet mijn HTTP-timeout kort of lang zijn?
Lang genoeg om een zoekopdracht te laten afronden: een zoekopdracht loopt live, dus zet je client-timeout op 60 tot 90 seconden in plaats van een paar seconden. Een client die te vroeg opgeeft, stuurt een tweede aanvraag terwijl de eerste nog loopt, wat een concurrency-slot verspilt en, als beide slagen, twee credits.
Vragen over fouten
Wordt een zoekopdracht in rekening gebracht als mijn programma crasht voordat het antwoord is gelezen?
Ja, als de API de zoekopdracht heeft voltooid en 200 heeft geretourneerd: de credit wordt gebruikt wanneer de zoekopdracht slaagt, niet wanneer je die leest. Dat is nog een reden om een lange client-timeout in te stellen.
Kosten nieuwe pogingen extra?
Alleen de poging die slaagt, gebruikt een credit. Mislukte pogingen met 429, 502 of 504 zijn gratis, dus een verzoek dat bij de derde poging slaagt, kost in totaal 1 credit.
Waar meld ik een fout die blijft terugkomen?
Mail naar [email protected] met de search_metadata.id van een geslaagde zoekopdracht of het tijdstip, de engine en de parameters van de mislukte zoekopdracht. E-mailreacties binnen 12 uur, 7 dagen per week, inclusief hulp bij API-integratie.