ไม่ต้อง KYC — ไม่ต้องใช้บัตรประชาชน ไม่ต้องเซลฟี่ ไม่ต้องใช้เอกสาร จ่ายด้วยคริปโต: BTC, USDT, USDC, ETH, SOL, LTC
ภาษา: ไทย
รับ API key

Docs · Errors · API v1

SERP API errors: รหัส สาเหตุ การแก้ไข และการ retry

หกรหัส error กฎเดียว: error ไม่ pernah ใช้เครดิต หน้านี้อธิบายว่าอะไรกระตุ้นแต่ละรหัส ควร retry หรือไม่ และให้โค้ด retry พร้อม exponential backoff ใน Python และ Node.js

อัปเดตล่าสุด: · 3 นาทีในการอ่าน

คำตอบสั้น

error ของ SERP API รหัสใดควร retry และการค้นหาที่ล้มเหลวถูกเรียกเก็บเงินหรือไม่

SerpCrypto ไม่ pernah เรียกเก็บเงินกับ error มีเพียงการค้นหาที่สำเร็จเท่านั้นที่ใช้ 1 เครดิต ให้ retry 429 concurrency_limit, 502 search_failed และ 504 search_timeout ด้วย exponential backoff อย่า retry 400, 401 หรือ 402: แก้พารามิเตอร์ key หรือยอดคงเหลือก่อน เครดิตมีราคาเริ่มต้นที่ US$0.30/1K การค้นหา และไม่หมดอายุ ชำระด้วยคริปโต ไม่ต้อง KYC

รหัส error แต่ละรหัสหมายถึงอะไร

ไม่มีแถวใดในตารางนี้ใช้เครดิต 1 เครดิต = 1 คำขอค้นหาที่สำเร็จ ซึ่งคืนผลลัพธ์หนึ่งหน้าบนเอนจินที่รองรับ คำขอที่ล้มเหลวจะไม่ถูกคิดเครดิต

HTTPcodeสาเหตุสิ่งที่ต้องทำลองใหม่หรือไม่
400invalid_parameterq หายไป หรือค่าอยู่นอกเหนือรายการที่อนุญาตแก้ไขคำขอ; ข้อความระบุชื่อพารามิเตอร์ไม่ใช่
401invalid_api_keyไม่มี key, key พิมพ์ผิด หรือ key ถูกเพิกถอนตรวจสอบ header หรือ api_key; สร้าง key ใหม่หากจำเป็นไม่ใช่
402insufficient_creditsบัญชีมี 0 เครดิตซื้อแพ็กจากยอดคงเหลือของคุณหลังจากซื้อ
429concurrency_limitมีการค้นหาพร้อมกันมากกว่าที่บัญชีของคุณอนุญาตรอ, ลดการทำงานแบบขนาน หรือติดต่อฝ่ายสนับสนุนเพื่อขอขีดจำกัดที่สูงขึ้นใช่ พร้อม backoff
502search_failedengine หรือ collection ล้มเหลวสำหรับคำขอนี้ลองคำขอเดิมอีกครั้งใช่ พร้อม backoff
504search_timeoutไม่มีการตอบกลับในเวลาที่กำหนดลองคำขอเดิมอีกครั้งใช่ พร้อม backoff

การตอบกลับแบบ error มีหน้าตาอย่างไร?

ทุก error มี JSON body ขนาดเล็กเหมือนกัน พร้อม code ที่คงที่และ message ที่อ่านได้ด้วยมนุษย์ แยกเงื่อนไขตาม code ในโปรแกรมของคุณและบันทึก message สำหรับมนุษย์ สถานะ HTTP ตรงกับตารางด้านบน

Body ของการตอบกลับ 402
{
  "error": {
    "code": "insufficient_credits",
    "message": "Your account has no search credits left."
  }
}

ทำไมฉันจึงได้ 400 invalid_parameter?

ค่าที่จำเป็นหายไป หรือค่าหนึ่งอยู่นอกเหนือรายการที่ API ยอมรับ สาเหตุที่พบบ่อยคือ q ว่าง, ชื่อ engine ที่พิมพ์ผิด เช่น google-news แทน google_news, page มากกว่า 10, หรือ device ที่ไม่ใช่ desktop หรือ mobile

message ระบุชื่อพารามิเตอร์ที่ผิดพลาด เปรียบเทียบคำขอของคุณกับ API reference; ไม่มีการเรียกเก็บเงิน ดังนั้นคุณสามารถแก้ไขและส่งใหม่ได้ทันที

ทำไมฉันจึงได้ 401 invalid_api_key?

key ไม่ถึง API หรือไม่ถูกต้อง ตรวจสอบว่า header เป็น Authorization: Bearer YOUR_KEY ตรง ๆ โดยมีช่องว่างหลัง Bearer ตรวจสอบด้วยว่า environment variable ของคุณถูกตั้งค่าใน shell หรือ service ที่รันโค้ด ไม่ใช่แค่ใน terminal ของคุณ key ที่ถูกเพิกถอนจะล้มเหลวต่อไป: สร้าง key ใหม่ใน dashboard

ฉันควรทำอย่างไรกับ 402 insufficient_credits?

ซื้อแพ็กเครดิตจากยอดคงเหลือของคุณ แล้วส่งใหม่ หากยอดคงเหลือต่ำเกินไป เติมด้วยคริปโตก่อน; ยอดเติมขั้นต่ำคือ US$25 อ่าน credits_remaining จาก GET https://serpcrypto.com/api/v1/credits ก่อนทำงานขนาดใหญ่เพื่อหลีกเลี่ยงการหยุดกลางทาง: การเรียกนั้นฟรี

ฉันจะจัดการ 429 concurrency_limit อย่างไร?

ชะลอความเร็วแทนที่จะหยุด ขีดจำกัดนับการค้นหาที่รันพร้อมกัน ไม่ใช่การค้นหาต่อวัน แต่ละบัญชีสามารถรันการค้นหาได้ตามจำนวนที่กำหนดในเวลาเดียวกัน; ขีดจำกัดแสดงอยู่ในแดชบอร์ดของคุณและเพิ่มได้เมื่อร้องขอ อ่าน concurrency_limit จาก endpoint เครดิตและกำหนดขนาด worker pool ของคุณให้สอดคล้อง; หน้า Python และ Node.js แสดง pool ที่ไม่เกินขีดจำกัด

502 และ 504 ถูกส่งกลับเมื่อใด?

502 search_failed หมายถึงการค้นหาไม่สามารถเสร็จสมบูรณ์สำหรับคำขอนี้; 504 search_timeout หมายถึงไม่เสร็จสมบูรณ์ในเวลาที่กำหนด ทั้งคู่ฟรีและทั้งคู่ควรลองใหม่ รอนานขึ้นเล็กน้อยก่อนแต่ละครั้งใหม่ ดังที่โค้ดด้านล่างทำ และเลิกหลังห้าครั้งเพื่อไม่ให้งานที่ค้างวนซ้ำตลอดไป

Python: ลองใหม่ 429, 502 และ 504 ด้วย exponential backoff
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: ตรรกะเดียวกันด้วย fetch
// 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);

HTTP timeout ของฉันควรสั้นหรือยาว?

ยาวพอให้การค้นหาเสร็จสมบูรณ์: การค้นหารันแบบ live ดังนั้นตั้ง client timeout เป็น 60 ถึง 90 วินาที แทนที่จะเป็นไม่กี่วินาที client ที่เลิกเร็วเกินไปจะส่งคำขอที่สองขณะที่คำขอแรกยังรันอยู่ ซึ่งเปลืองช่อง concurrency และหากทั้งคู่สำเร็จก็เสียสองเครดิต

คำถามเกี่ยวกับ error

ถ้าโปรแกรมของฉันพังก่อนที่จะอ่านคำตอบ จะยังถูกคิดเงินสำหรับการค้นหาหรือไม่

ใช่ ถ้า API ค้นหาเสร็จสิ้นและส่งคืน 200: เครดิตจะถูกใช้เมื่อการค้นหาสำเร็จ ไม่ใช่ตอนที่คุณอ่านคำตอบ นั่นเป็นอีกเหตุผลหนึ่งที่ควรตั้ง timeout ฝั่ง client ให้ยาวนาน

การลองใหม่มีค่าใช้จ่ายเพิ่มหรือไม่

เฉพาะครั้งที่สำเร็จเท่านั้นที่ใช้เครดิต ความพยายามที่ล้มเหลวด้วย 429, 502 หรือ 504 ไม่มีค่าใช้จ่าย ดังนั้นคำขอที่สำเร็จในครั้งที่สามจะใช้เครดิตทั้งหมด 1 เครดิต

ฉันจะรายงานข้อผิดพลาดที่เกิดซ้ำได้ที่ไหน

เขียนถึง [email protected] พร้อม search_metadata.id ของการค้นหาที่สำเร็จ หรือเวลา, engine และพารามิเตอร์ของการค้นหาที่ล้มเหลว ตอบกลับอีเมลภายใน 12 ชั่วโมง ทุกวัน 7 วันต่อสัปดาห์ รวมถึงช่วยเรื่องการเชื่อมต่อ API

เริ่มต้นที่ US$0.30/1K การค้นหา · ไม่ต้อง KYC

รับ API key