跳转到内容

响应格式

所有端点都返回 application/json,编码为 UTF-8,与 Accept 请求头无关。带请求体的调用请发送 Content-Type: application/json。

集合类端点把数据包在 data 里,单对象端点则把字段直接放在顶层。这不是疏漏,写解析器之前值得先知道:

{ "data": [ { "id": 47, "slug": "wavalid-realtime" } ] }
{ "balance": "5.230000" }

GET /v1/products 属于集合类;GET /v1/balance 和 GET /v1/api-key 属于单对象类。实时端点返回的是这次调用自身的对象——request_id、status、results——直接在顶层。

错误一律使用固定的两字段结构:

{
"code": "invalid_realtime_request",
"message": "A realtime request cannot mix phone and email products."
}
字段含义
code稳定的机器可读标识,请按它分支判断
message给人看的说明,措辞可能变化,不要解析它

各端点的 code 取值连同对应的 HTTP 状态码分别写在各页;完整清单见错误码。

金额有两种形式,解析时的差别很重要:

位置类型示例
GET /v1/balance 的 balance字符串"5.230000"
实时响应里的 total_charged、charged_amount、refunded_amount数字0.004000

余额用定点小数字符串返回,这样客户端在把它和某个阈值比较时,永远不会遇到浮点误差。实时金额是保留 6 位小数的数字,超过 6 位请当作近似值。

金额一律以 USD 计价,响应里不带币种符号。请自行格式化后再展示,不要凭分隔符或前缀去猜币种。

时间是 ISO 8601 的 UTC 时间,带 Z 后缀:

2026-09-13T10:00:00Z

实时结果的 checked_at、批量任务的时间字段,都遵循这一格式。

有两种模式,都是刻意为之:

  • 实时:HTTP 200 表示调用执行了,不表示每个产品都给出了结论。请读 status 和每条 result 的 billing_status。
  • 批量:提交只返回任务受理,工作异步继续;只有任务进入终态,结果才存在。

两种情况下的规矩是一样的:状态码告诉你要不要重试,响应体告诉你发生了什么。