Docs
开发者中心控制台esimoa.com
    • 简介
    • 快速开始
    • 身份验证
    • 概览
    • 搜索 eSIM
    • eSIM 详情
    • 在售国家
    • OpenAPI 规范
    • 追踪与佣金
    • 速率限制与错误
    • 概览
    • Claude
    • ChatGPT
    • Gemini
    • 其他 MCP 客户端
    • 概览
    • 身份验证
    • 商品搜索
    • 商品详情
    • 在售国家
    • 错误与速率限制
  1. 文档
  2. 合作伙伴 API(B2B)
  3. 错误与速率限制

合作伙伴 API(B2B)

错误与速率限制

合作伙伴 API 的错误码、每密钥速率限制与 X-RateLimit 响应头,以及重试方法。

本页内容
  • 错误格式
  • 错误码
  • 速率限制
  • 重试

错误格式#

错误响应体为 { statusCode, code, message }。message 为供人阅读的英文说明且可能变化,请始终根据 code 判断。

json
// Success
{ "success": true, "data": ..., "total": 128, "page": 1, "limit": 20 }

// Error
{ "statusCode": 401, "code": "INVALID_API_KEY", "message": "The API key is invalid." }

注意

查询值校验错误(400)使用标准格式 { statusCode: 400, message: [...], error: "Bad Request" },不含 code。

错误码#

HTTPcode含义与处理
401API_KEY_REQUIRED未发送密钥 — 请添加 X-API-Key 请求头
401INVALID_API_KEY格式错误或不存在的密钥 — 检查是否复制不完整或误用了公开 API 密钥
401KEY_REVOKED已吊销的密钥 — 请签发新密钥
401KEY_EXPIRED已过期的密钥(含轮换宽限期结束后的旧密钥)— 请使用新密钥
403PARTNER_SUSPENDED账号未启用 — 请联系 esimoa
403INSUFFICIENT_SCOPE请求超出密钥权限范围
403IP_NOT_ALLOWED从允许列表以外的 IP 调用 — 请添加服务器出站 IP
404PRODUCT_NOT_FOUND商品不存在或已停售
429RATE_LIMITED超出速率限制 — 在 Retry-After 秒后重试

速率限制#

注意

B2B API 默认每个密钥每小时 20,000 次。

从首次请求起计 3,600 秒,并同时应用每分钟限制。按调用次数而非传输 MB 计算,实际配额可由运营配置调整。

X-RateLimit-Hour-Limit · X-RateLimit-Hour-Remaining · X-RateLimit-Hour-Reset

这些响应头表示每小时上限、剩余次数及重置时间(Unix 秒)。超限返回 HTTP 429 和 Retry-After 秒数。每分钟限制拒绝的请求不计入小时配额。

默认每个密钥每分钟 300 次(按 60 秒窗口计算,所有服务器共享)。esimoa 可根据合同按账号上调。通过认证的每个响应都会附带配额响应头。

  • X-RateLimit-Limit — 每分钟允许次数
  • X-RateLimit-Remaining — 当前窗口剩余次数
  • X-RateLimit-Reset — 窗口重置时间(Unix 秒)
  • Retry-After — 429 时重试前需等待的秒数
http
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1790000000

HTTP/1.1 429 Too Many Requests
Retry-After: 18
{ "statusCode": 429, "code": "RATE_LIMITED", "message": "Rate limit exceeded (300 requests per minute)." }

重试#

  • 收到 429 时,等待 Retry-After 秒后重试。
  • 5xx 请以指数退避方式少量重试。
  • 400、401、403、404 重试也不会改变结果 — 请修正原因。
  • 将目录缓存几分钟,几乎不会触及限制。
javascript
async function b2bFetch(url, attempt = 0) {
  const res = await fetch(url, { headers: { 'X-API-Key': process.env.ESIMOA_PARTNER_KEY } });
  if (res.status === 429 && attempt < 3) {
    const wait = Number(res.headers.get('Retry-After') ?? 1);
    await new Promise((r) => setTimeout(r, wait * 1000));
    return b2bFetch(url, attempt + 1);
  }
  const body = await res.json();
  if (!res.ok) throw Object.assign(new Error(body.message), { code: body.code, status: res.status });
  return body;
}

最后更新: 2026年10月1日

上一页在售国家

本页内容

  • 错误格式
  • 错误码
  • 速率限制
  • 重试

将 esimoa eSIM 接入您产品的 API 与 MCP

资源

  • 文档
  • API 参考
  • 合作伙伴 API(B2B)
  • MCP 服务器
  • OpenAPI 规范

esimoa

  • 首页
  • eSIM 套餐
  • 开发者中心
  • 控制台
  • 合作伙伴门户

公司

  • 公司介绍
  • 合作咨询
  • 服务条款
  • 隐私政策
  • 交付与退款政策

支持

  • support@esimoa.com
  • 客服聊天

NBase Korea Co., Ltd.

京畿道龙仁市水枝区新水路767号, A栋902室(东川洞,盆唐水枝U-TOWER)

美国总部: NBASE CORP. · Corporate Park, Irvine, CA 92606, USA

© 2026 esimoa. All rights reserved.