このページは英語から翻訳されています。英語版が正式な情報源です。翻訳内容に不一致がある場合は、英語版を参照してください。
エラーハンドリング
Flex Forward APIは標準的なHTTPステータスコードと構造化されたエラーレスポンスを使用します。このページでは、エラー形式、ステータスコードの意味、障害処理のガイダンスについて説明します。エラーレスポンス形式
API は障害の種類に応じて4つのエラーレスポンス形式を返します。どの形式が返されるかを理解することで、正確なエラー解析ロジックを記述できます。標準エラー
未対応の配送業者/商品、認証エラー、競合、リソース未検出エラー、サーバーエラーなどの障害の場合に返されます。形式は{ "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 ボディ)を確認してください。一般的な原因:無効な住所、サポートされていない配送先、または配送業者アカウントの設定の問題。