跳轉到主要內容
此頁面由英文翻譯而成。英文版為官方權威來源。如翻譯內容有任何不一致之處,請以英文版為準。

錯誤處理

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 狀態碼

標籤建立結果的判讀

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 內容)中的物流業者錯誤訊息。常見原因:無效地址、不支援的目的地,或物流業者帳戶設定問題。