跳转到主要内容
此页面由英文翻译而成。英文版为官方权威来源。如翻译内容有任何不一致之处,请以英文版为准。

错误处理

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 字段则说明标签是否存在。
在 POST /labels 上,请根据 status 字段而不是 HTTP 状态码进行分支处理。即使第一次尝试在物流商端失败,幂等重放仍会返回 HTTP 200,因此 200 响应可能带有 status: failed。

验证错误(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(例如被封禁的账户):
属于其他账户的标签或追踪记录会返回 404,而非 403。

下游物流商错误 502 与 422

当 POST /labels 执行期间物流商服务返回错误时,API 以 HTTP 502 响应。标签会以 status: failed 保存在数据库中,并包含物流商的错误详情:
error 对象包含:
502 响应表示标签请求已到达物流商并被拒绝。重试前请检查错误消息 — 部分物流商错误(如地址验证)并非暂时性的,需要修改请求。
之后对失败标签调用 GET /labels/{id} 或 GET /tracking/{id} 时,会返回 HTTP 422 及 LabelFailedResponse 内容 — 该标签无文件或追踪数据可用:

可重试与不可重试的错误

推荐的重试策略请参阅幂等性与重试。

故障排除

所有 POST 请求必须包含 Content-Type: application/json。缺少时请求体将不会被解析,API 会返回 400 错误。
所有请求必须使用 HTTPS。请确认使用正确的环境 URL:https://api.flexforwardship.com(生产)或 https://sandbox.flexforwardship.com(开发)。
GET /labels/{id} 和 GET /tracking/{id} 的 id 参数接受标签 UUID 或您的 customerOrderNumber。传入其他值,或属于其他账户的标识符,将返回 404 错误。
status: failed 的响应会由 POST /labels 以 HTTP 502 返回(若以相同 idempotencyKey 重放则为 HTTP 200),之后读取该标签则会返回 HTTP 422。请检查 error 对象(读取时为 LabelFailedResponse 内容)中的物流商错误消息。常见原因:无效地址、不支持的目的地,或物流商账户配置问题。