LEADBEE DEVELOPERS · API V1

开发者接入文档

通过统一接口创建短信验证订单、获取号码、查询验证码并管理订单。新项目推荐使用带签名的正式接口;已有纯文本协议客户端可使用轻量接入方式。

HTTPSHMAC-SHA256防重放幂等保护客户级限流

概览

正式接口地址https://api.leadbee.cn/api/open/v1
数据格式JSON · UTF-8
认证方式API Key + HMAC-SHA256
当前版本v1
所有订单号均由 Leadbee 生成。接口仅返回完成业务所需的信息,不公开服务实现、资源调度或内部系统信息。

正式接口只接受 HTTPS。请求和响应中的金额均为人民币十进制字符串;产品列表按客户授权动态返回,当前默认美国短信验证产品价格为 ¥1.30。时间使用带时区的 ISO 8601 格式。客户端应保存自己的业务单号,并通过幂等键安全重试。

快速开始

1. 获取凭证

管理员为每个客户独立发放 API Key 和 API Secret。Secret 仅在创建或轮换时展示一次,请存放在服务端密钥管理系统中。

2. 查询产品

先调用产品列表获取当前账户被授权的国家和客户价;目录可能由管理员刷新,禁止把国家或产品 ID 写死在程序中。

GET /api/open/v1/products

X-API-Key: ak_live_xxx
X-Timestamp: 1785686400
X-Nonce: request_nonce_000001
X-Signature: 64位小写十六进制签名

3. 创建订单

POST /api/open/v1/orders
Content-Type: application/json
Idempotency-Key: order_20260803_customer_0001

{
  "client_order_id": "customer_order_0001",
  "product_id": "sms_verification_us",
  "quantity": 1
}

4. 查询结果

GET /api/open/v1/orders/order_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

按照响应中的 next_poll_after_seconds 等待后再查询。获得验证码或订单进入终态后停止轮询。

请求签名

正式接口使用 HMAC-SHA256。每次请求必须提供以下请求头:

请求头说明
X-API-Key客户 API Key
X-Timestamp当前 Unix 秒级时间戳,默认允许前后300秒
X-Nonce每次请求唯一的16至128位随机字符串
X-Signature使用 API Secret 计算的64位小写十六进制签名
Idempotency-Key所有写请求必填,16至128位;同一业务重试必须复用

待签名字符串按以下顺序拼接,每项之间使用一个换行符;GET 请求最后一行为空:

HTTP_METHOD
REQUEST_PATH
CANONICAL_QUERY
SHA256_HEX(REQUEST_BODY)
X_TIMESTAMP
X_NONCE
IDEMPOTENCY_KEY

正式 v1 接口不接受查询参数,因此 CANONICAL_QUERY 当前为空字符串。请求体必须使用实际发送字节计算 SHA-256,签名后不得重新格式化 JSON。

Python 签名示例

import hashlib
import hmac
import json
import secrets
import time
import requests

API_KEY = "ak_live_xxx"
API_SECRET = "仅保存在服务端"
BASE_URL = "https://api.leadbee.cn"
path = "/api/open/v1/orders"
idempotency_key = "order_20260803_customer_0001"
payload = {
    "client_order_id": "customer_order_0001",
    "product_id": "sms_verification_us",
    "quantity": 1,
}
body = json.dumps(payload, separators=(",", ":"), ensure_ascii=False).encode()
timestamp = str(int(time.time()))
nonce = secrets.token_urlsafe(18)
canonical = "\n".join([
    "POST", path, "", hashlib.sha256(body).hexdigest(),
    timestamp, nonce, idempotency_key,
])
signature = hmac.new(
    API_SECRET.encode(), canonical.encode(), hashlib.sha256
).hexdigest()

response = requests.post(
    BASE_URL + path,
    data=body,
    headers={
        "Content-Type": "application/json",
        "X-API-Key": API_KEY,
        "X-Timestamp": timestamp,
        "X-Nonce": nonce,
        "X-Signature": signature,
        "Idempotency-Key": idempotency_key,
    },
    timeout=30,
)
response.raise_for_status()

接口参考

方法路径权限用途
GET/productsproducts:read查询已开放产品、售价和可用状态
GET/balancebalance:read查询可用余额和预留余额
GET/ledgerbalance:read查询充值、冻结、扣费、释放和退款明细
GET/ordersorders:read查询本客户订单和成交价明细
POST/ordersorders:create创建一笔短信验证订单
GET/orders/{order_id}orders:read查询号码、验证码及订单状态
POST/orders/{order_id}/replaceorders:replace更换当前号码
POST/orders/{order_id}/cancelorders:cancel申请取消订单

成功响应

{
  "success": true,
  "request_id": "req_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "data": {
    "order_id": "order_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "status": "WAITING_CODE",
    "phone_number": "+56xxxxxxxxx",
    "verification_code": null,
    "next_poll_after_seconds": 3
  }
}

不同接口的 data 字段不同。客户端应忽略暂不认识的新增字段,并以 success、状态码和错误码作为处理依据。

订单状态

状态含义客户端处理
PROCESSING正在分配号码按建议时间继续查询
WAITING_CODE号码已就绪,等待验证码继续查询,避免高频轮询
REPLACING正在更换号码等待后查询原订单
CANCELING正在确认取消等待最终状态
COMPLETED订单完成保存结果并停止轮询
CANCELED订单已取消停止轮询
EXPIRED订单已过期停止轮询
UNKNOWN / MANUAL_REVIEW结果正在确认不得自行假定退款或重复下单

计费规则

  1. 创建订单时,系统按照公开售价预留相应余额。
  2. 订单完成后,预留余额转为正式扣费。
  3. 取消确认成功后,系统释放对应预留余额。
  4. 状态尚未确认时,客户端不得创建相同业务的重复订单。

请求限制

限制按客户凭证独立计算;公网入口同时提供单 IP 连接与突发流量保护。

类型默认限制说明
所有查询及总请求300次/分钟按客户凭证累计
创建新订单20次/分钟相同幂等键不会重复创建
取消、换号30次/分钟相同业务重试必须复用幂等键
每日新订单1000笔按客户账户累计
同时进行中的订单20笔订单进入终态后释放活动名额

超过限制时返回 HTTP 429。客户端应读取 Retry-After,并使用指数退避和少量随机抖动。

错误处理

{
  "success": false,
  "request_id": "req_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded"
  }
}
HTTP常见错误码处理建议
400INVALID_REQUEST、INVALID_JSON、IDEMPOTENCY_REQUIRED修正请求后再提交
401AUTH_REQUIRED、SIGNATURE_INVALID、TIMESTAMP_EXPIRED检查凭证、时钟和签名
403PERMISSION_DENIED、IP_NOT_ALLOWED检查权限和 IP 白名单
404PRODUCT_NOT_FOUND、ORDER_NOT_FOUND确认资源编号
409IDEMPOTENCY_CONFLICT、ORDER_NOT_CANCELABLE查询原订单,不要更换幂等键重下
429RATE_LIMITED、ACTIVE_ORDER_LIMIT_REACHED根据响应头等待后重试
503REPLAY_PROTECTION_UNAVAILABLE保持原幂等键,稍后重试

向管理员反馈问题时提供 request_id 和发生时间,不要发送完整密钥、签名或验证码。

轻量接入

面向已有纯文本协议客户端,接口地址为 https://api.leadbee.cn/api/handler_api.php。新项目建议优先使用正式 v1 接口。

密钥只能通过请求头发送,禁止放入 URL、浏览器地址栏、前端代码或日志。
Authorization: Bearer YOUR_COMPAT_API_KEY
操作请求示例成功返回
余额?action=getBalanceACCESS_BALANCE:10.000000
获取号码?action=getNumber&service=gpt&country=us&maxPrice=1.30&request_id=唯一业务标识ACCESS_NUMBER:订单号:手机号
号码状态?action=getNumberStatus&id=订单号STATUS_WAIT_NUMBER 或 ACCESS_NUMBER
验证码?action=getStatus&id=订单号STATUS_WAIT_CODE 或 STATUS_OK:验证码
取消?action=setStatus&status=8&id=订单号ACCESS_CANCEL

轻量接口错误以固定文本返回,包括 BAD_KEY、NO_BALANCE、NO_NUMBERS、BAD_REQUEST_ID、ERROR_RATE_LIMIT 和 ERROR_ACTIVE_ORDER_LIMIT。同一业务发生超时或网络重试时必须复用原 request_id。

安全规范

  • API Secret 和访问密钥只能保存在服务端,禁止进入网页、移动端安装包或公开仓库。
  • 为不同系统发放独立凭证,并按照最小权限配置接口范围。
  • 生产环境建议启用固定出口 IP 白名单。
  • 不要记录完整请求头、签名、手机号、验证码或客户敏感数据。
  • 发现凭证疑似泄露时立即停用并轮换,不要继续使用原凭证。
  • 正式接口写操作必须使用幂等键;网络超时不能直接生成新的业务单号。

更新记录

日期版本说明
2026-08-03v1统一正式接口、签名规范、订单状态、错误处理和轻量接入说明。