批量提交单号进入自动跟踪,单次最多 100 条。
POST https://frogtracking.com/api/openapi/v1/trackings/register
Headers:
Authorization: Bearer ak_xxxx.yyyyyyyyyyyy
Content-Type: application/json
Body:
{
"items": [
{"tracking_number": "9300110990413251585279"},
{"tracking_number": "UUS123ABC456DEF78", "carrier": "uniuni"}
]
}
规则
- 单号会自动去除首尾空格并转为大写。
carrier 可选,不传自动识别。传入时单号必须符合该承运商的格式(取值见「承运商列表」),否则该条失败; 不传且单号同时命中多家承运商时该条返回 carrier_ambiguous,请从 candidates 里选一家带 carrier 重新注册。- 同一凭证重复注册同一单号是幂等的:不会重复扣积分,已停止的订阅会自动恢复跟踪。
成功响应
HTTP/1.1 200 OK
{
"successes": [
{"tracking_number": "9300110990413251585279", "carrier": "usps"},
{"tracking_number": "UUS123ABC456DEF78", "carrier": "uniuni"}
],
"failures": []
}
未传 carrier 的单号,successes[].carrier 返回系统识别出的承运商。
失败响应
部分单号校验失败
HTTP/1.1 200 OK
{
"successes": [
{"tracking_number": "9300110990413251585279", "carrier": "usps"}
],
"failures": [
{"tracking_number": "UUS123ABC456DEF78", "carrier": "uniuni", "message": "carrier_mismatch", "candidates": []},
{"tracking_number": "ABC123", "carrier": null, "message": "unsupported_carrier", "candidates": []},
{"tracking_number": "EXAMPLE000000000001", "carrier": null, "message": "carrier_ambiguous", "candidates": ["usps", "fedex"]}
]
}
failures[].candidates 只在 carrier_ambiguous 时非空,按识别优先级排列、第一个是系统默认候选;其余失败为空数组。
积分余额不足(本批全部失败,不扣分)
HTTP/1.1 200 OK
{
"successes": [],
"failures": [
{"tracking_number": "9300110990413251585279", "carrier": "usps", "message": "billing_failed:USER_WALLET_BALANCE_INSUFFICIENT", "candidates": []}
]
}
部分失败时 HTTP 状态码仍是 200单条校验失败与计费失败都不会让整个请求报错,请务必检查响应里的 failures 数组。
鉴权失败
HTTP/1.1 401 Unauthorized
{
"detail": "Unauthorized"
}
参数校验失败(整个请求不处理)
HTTP/1.1 422 Unprocessable Entity
{
"detail": [
{
"type": "value_error",
"loc": ["body", "items", 0, "carrier"],
"msg": "Value error, unknown or disabled carrier: dhl",
"input": "dhl",
"ctx": {"error": {}}
}
]
}
| 触发条件 | detail[].type | detail[].loc |
|---|
| items 为空 | too_short | ["body", "items"] |
| items 超过 100 条 | too_long | ["body", "items"] |
| 缺少 tracking_number | missing | ["body", "items", 0, "tracking_number"] |
| tracking_number 超过 64 个字符 | string_too_long | ["body", "items", 0, "tracking_number"] |
| carrier 不存在或已停用 | value_error | ["body", "items", 0, "carrier"] |
failures[].message 含义
| message | 含义 |
|---|
invalid_format | 单号为空,或传入了 carrier 但单号无法识别为任何支持的承运商格式 |
unsupported_carrier | 未传 carrier,且单号无法识别为任何支持的承运商格式 |
carrier_mismatch | 传入的 carrier 与单号格式不符(单号不符合该承运商的任何识别规则) |
carrier_ambiguous | 未传 carrier,且单号同时符合多家承运商的格式;candidates 列出候选 code,请带 carrier 重新注册 |
billing_failed:* | 计费失败(最常见原因是积分余额不足)。此时本批所有单号都会失败,且不会扣分 |