文档

文档

选择下方的搜索 API,查看请求示例和字段说明。通用鉴权和账户接口见本页。

Base URL:https://api.serqo.io

搜索 API

Google

Bing

接入准备

在控制台创建 API Key,然后将它存入 SERP_API_KEY 环境变量。

bash
export SERP_API_KEY='YOUR_API_KEY'

身份验证

通过 bearer token 或 x-api-key 请求头传入你的 API key。密钥在控制台中创建,且仅显示一次。

http
Authorization: Bearer YOUR_API_KEY
# or
x-api-key: YOUR_API_KEY

不要把密钥放在 URL 查询字符串中,务必保留在服务端。

接口一览

方法路径说明
POST/v1/search执行搜索,用 type 指定搜索类型。
GET/v1/search与 POST 相同,参数放在查询字符串中。
GET/v1/engines列出引擎及其支持的搜索类型。
GET/v1/me当前请求所用的账户和密钥。
GET/v1/healthAPI 健康检查,无需 API Key;不检查搜索引擎状态。
GET/healthz仅检查服务端是否响应,不测试搜索引擎。无需 API key。

支持的搜索类型

通过 type 选择搜索类型,省略时进行网页搜索。Google 支持下列全部 9 种类型;Bing 支持网页、新闻、图片、视频和地图搜索。横线表示该引擎不支持此类型。

发送搜索前,可携带 API Key 调用 GET /v1/engines,查看可用引擎及其 verticals 搜索类型列表。

搜索类型请求取值GoogleBing
网页web✓✓
新闻news✓✓
图片images✓✓
视频videos✓✓
地图maps✓✓
购物shopping✓—
论坛forums✓—
图书books✓—
专利patents✓—

GET /v1/engines

列出可用搜索引擎及各自支持的搜索类型,搜索请求中使用对应的引擎 ID 和类型值。

需要 API Key,无需查询参数或请求正文。

请求示例

bash
curl https://api.serqo.io/v1/engines \
  -H "Authorization: Bearer $SERP_API_KEY"

200 响应

JSON
{
  "success": true,
  "requestId": "req_example",
  "data": {
    "engines": [
      {
        "id": "google",
        "displayName": "Google",
        "verticals": [
          "web",
          "images",
          "videos",
          "news",
          "shopping",
          "forums",
          "books",
          "maps",
          "patents"
        ],
        "pagination": "start"
      },
      {
        "id": "bing",
        "displayName": "Bing",
        "verticals": [
          "web",
          "news",
          "images",
          "videos",
          "maps"
        ],
        "pagination": "start"
      }
    ]
  }
}
读取路径类型内容
data.enginesarray可用引擎列表。
data.engines[].idstringengine 参数值。
data.engines[].displayNamestring用于展示的引擎名称。
data.engines[].verticalsstring[]该引擎允许的 type 参数值。
data.engines[].paginationstring分页方式,当前为 start。

以上为简化示例。引擎条目还包含 requiresSession 和 captchaSolve,用于描述引擎行为,不是搜索请求参数。本接口不消耗搜索额度;Key 无效时返回 401,读取引擎列表失败时可能返回 5xx。

GET /v1/me

查看当前请求所使用的账户和 API Key,响应不包含完整 Key 或额度余额。

需要 API Key,无需查询参数或请求正文。

请求示例

bash
curl https://api.serqo.io/v1/me \
  -H "Authorization: Bearer $SERP_API_KEY"

200 响应

JSON
{
  "success": true,
  "requestId": "req_example",
  "data": {
    "account": {
      "id": "account_example",
      "email": "developer@example.com",
      "role": "user"
    },
    "key": {
      "id": "key_example",
      "prefix": "sk_example"
    }
  }
}
读取路径类型内容
data.account.idstring账户 ID。
data.account.emailstring账户邮箱。
data.account.rolestring账户角色:user 或 admin。
data.key.idstring当前使用的 API Key ID。
data.key.prefixstring用于识别 Key 的前缀。

账户信息为示例。本接口不消耗搜索额度,无效、已撤销或已过期的 Key 返回 401 UNAUTHORIZED。

GET /v1/health

检查 API 服务是否响应,不检查搜索引擎、账户权限或可用额度。

无需 API Key、查询参数或请求正文。

请求示例

bash
curl https://api.serqo.io/v1/health

200 响应

JSON
{
  "success": true,
  "data": {
    "status": "ok"
  }
}

服务正常响应时,data.status 为 ok。此接口的响应正文不包含常规的 requestId,不消耗搜索额度。

GET /healthz

查看服务器状态和进程运行时长。简单的 API 健康检查可使用 /v1/health。

无需 API Key、查询参数或请求正文。

请求示例

bash
curl https://api.serqo.io/healthz

200 响应

JSON
{
  "status": "ok",
  "uptimeMs": 12345
}

以上为简化响应,uptimeMs 是示例运行时长,单位为毫秒。响应还包含 env 和 serp.integration。此接口直接返回状态对象,没有 success 或 data 包装,不检查搜索引擎,也不消耗搜索额度。

错误

搜索失败时,可查看错误原因和重试建议;排查问题时请提供请求 ID。

JSON
{
  "success": false,
  "requestId": "req_01H…",
  "error": {
    "code": "INVALID_PARAM",
    "message": "Invalid search parameter",
    "retryable": false
  }
}

常见错误

400 · BAD_REQUEST
检查请求是否为有效 JSON,并提供非空的搜索词。
400 · UNSUPPORTED_VERTICAL
选择该引擎支持的搜索类型。
400 · GEO_CONFLICT
请求地区与搜索连接的地区不一致。检查国家代码;若仍出现此错误,请提供请求 ID 协助排查。
401 · UNAUTHORIZED
请使用有效且未过期的 API Key,并确认账户处于正常状态。无效、已撤销或已过期的 Key 均返回 UNAUTHORIZED。
402 · INSUFFICIENT_CREDITS
可用额度不足以支付本次请求。
422 · INVALID_PARAM
检查参数名称、类型和允许的取值。
429 · QUOTA_EXCEEDED / QUEUE_FULL
遇到 QUOTA_EXCEEDED 时,等待 retryAfterMs 指定的时间再重试。QUEUE_FULL 也返回 429,应按其重试提示处理。
502/503/504
上游服务失败不会扣费,请按响应中的重试建议处理。
500 · INTERNAL_ERROR
保留请求 ID,以便排查问题。

读取 JSON 前先检查 HTTP 状态。网络故障或代理返回的响应可能不包含 API 错误正文;如有请求 ID,请保留用于排查。

仅在 error.retryable 为 true 时重试;若返回 error.retryAfterMs,至少等待对应的毫秒数。若响应丢失后需要安全重试,请使用相同参数和相同的 Idempotency-Key;24 小时内会重放首次成功响应,不会重复搜索或扣费。不带此请求头时,重试会作为新请求处理并按适用费率计费。

请求 ID 同时出现在响应正文和 x-request-id 响应头中。

限流与额度

请求频率限制

每个 API Key 按账户的每秒请求上限限流,Playground 会话单独计数。管理员 API Key 不受此套餐上限限制。429 响应会给出等待时长(毫秒),请等待后再重试。

额度使用

费用由搜索类型、引擎、国家和缓存状态决定,搜索失败和超时不扣费。可在套餐与额度中查看可用余额及额度明细。

默认费率下,缓存命中不扣费。搜索开始前,可用余额仍需足够支付完整费用,即使随后命中缓存。