此页面由英文翻译而成。英文版为官方权威来源。如翻译内容有任何不一致之处,请以英文版为准。
错误处理
Flex Forward API 使用标准 HTTP 状态码和结构化的错误响应。本页面涵盖错误格式、状态码含义以及处理失败的指引。错误响应格式
API 根据失败类型返回四种错误响应格式。了解预期的格式有助于编写正确的错误解析逻辑。标准错误
用于不支持的物流商/产品、身份验证失败、冲突、资源未找到和服务器错误等失败情形。格式为{ "error": string, "code"?: string }:
error 文本仅供参考,可能随时变更且不另行通知。请根据 HTTP 状态码,以及存在时的 code,来判断分支逻辑 — 切勿依赖消息文本本身。
code 字段会在部分错误响应中提供。IDEMPOTENCY_CONFLICT 与 DUPLICATE_CUSTOMER_ORDER_NUMBER 可区分 HTTP 409 冲突。
code 字段为可选,且此列表并非详尽无遗。没有代码的错误请依 HTTP 状态码处理,并容忍未知的代码值。
验证错误
用于请求验证失败(HTTP 400)。包含带有字段级别错误信息的details 数组:
details 中的每个条目包含:
仅会返回第一个验证错误。修正后重新发送即可看到下一个错误。
HTTP 400 也可能使用标准错误格式,例如在物流商或产品不受支持时。读取
details 前请先确认其是否存在;不要假设每个 400 响应都包含字段级错误。
HTTP 状态码
标签创建结果的判读
POST /labels 在 200、201 与 502 时都返回相同的 LabelResponse 结构。HTTP 状态码说明这次调用是创建了标签、重放了先前的尝试,还是被物流商拒绝。status 字段则说明标签是否存在。
验证错误(400)
模式验证错误表示请求体不符合 API 的要求,并包含带有具体字段路径的details 数组。其他 HTTP 400 错误使用不含 details 的标准错误格式。
常见原因:
- 缺少必填字段(
shipment.shipTo、courier、idempotencyKey) - 字段类型或长度错误(例如
countryCode必须恰好为 2 个字符) - 数值为负(
weight与尺寸不得为负数) order.customerOrderNumber无效(最多 40 个字符,只能使用 ASCII 字母、数字、-、_)- 不支持的
label.format(请使用PDF或PNG)或商品unitPrice.currency(仅接受USD)
重试前请修正报告的错误。由于未创建标签,400 响应后可以重复使用相同的
idempotencyKey。身份验证错误(401 / 403)
401 Unauthorized
x-rr-apikey 或 x-rr-apitoken 头部缺失或无效:
403 Forbidden
认证信息有效,但账户不被允许调用 API(例如被封禁的账户):下游物流商错误 502 与 422
当POST /labels 执行期间物流商服务返回错误时,API 以 HTTP 502 响应。标签会以 status: failed 保存在数据库中,并包含物流商的错误详情:
error 对象包含:
之后对失败标签调用
GET /labels/{id} 或 GET /tracking/{id} 时,会返回 HTTP 422 及 LabelFailedResponse 内容 — 该标签无文件或追踪数据可用:
可重试与不可重试的错误
推荐的重试策略请参阅幂等性与重试。
故障排除
缺少 Content-Type 头部
缺少 Content-Type 头部
所有 POST 请求必须包含
Content-Type: application/json。缺少时请求体将不会被解析,API 会返回 400 错误。基础 URL 错误或使用 HTTP
基础 URL 错误或使用 HTTP
所有请求必须使用 HTTPS。请确认使用正确的环境 URL:
https://api.flexforwardship.com(生产)或 https://sandbox.flexforwardship.com(开发)。找不到标识符
找不到标识符
GET /labels/{id} 和 GET /tracking/{id} 的 id 参数接受标签 UUID 或您的 customerOrderNumber。传入其他值,或属于其他账户的标识符,将返回 404 错误。标签已创建但状态为 failed
标签已创建但状态为 failed
status: failed 的响应会由 POST /labels 以 HTTP 502 返回(若以相同 idempotencyKey 重放则为 HTTP 200),之后读取该标签则会返回 HTTP 422。请检查 error 对象(读取时为 LabelFailedResponse 内容)中的物流商错误消息。常见原因:无效地址、不支持的目的地,或物流商账户配置问题。