エラー

HIOBuy には 2 種類のエラー形があります。プロトコルエラー(非 2xx + error)と 業務失敗(一部注文ルートで HTTP 200 かつ success: false)。

Protocol errors (HTTP 4xx / 5xx) {#protocol-errors}

{
  "error": {
    "code": "INBOUND_VALIDATION_FAILED",
    "message": "Some inbound information is missing or invalid.",
    "request_id": "req_abc123",
    "category": "VALIDATION_ERROR",
    "field": "tracking_number",
    "details": {
      "fields": [
        {
          "field": "items[0].name",
          "code": "REQUIRED",
          "message": "Product name is required."
        }
      ]
    }
  }
}
FieldDescription
error.codeMachine-readable enum — use for branching logic
error.messageHuman-readable explanation (English)
error.request_idSame as x-request-id response header
error.categoryCoarse grouping: AUTH_ERROR, RATE_LIMIT_ERROR, VALIDATION_ERROR, CHANNEL_ERROR, INTERNAL_ERROR
error.fieldOptional primary field path related to this error
error.detailsOptional object; validation may include details.fields: [{ field, code, message }]
error.upstreamOptional vendor error summary on CHANNEL_UPSTREAM_ERROR (sanitized)

Field-level details.fields[].code values: REQUIRED | INVALID_VALUE | INVALID_FORMAT | OUT_OF_RANGE.

HTTP status principles

HTTPWhen
400Unparseable JSON / generic validation
401Invalid API key
403Authenticated but not allowed (including fulfillment mode gate)
404Missing or inaccessible resource
409State / uniqueness conflict
422Parsed body fails business validation
429Rate limit / quota
500 / 502 / 503Internal or upstream failure

エラーコード参照 {#error-codes}

正規の機械可読カタログは data/errors.catalog.json です。要約:

CodeHTTPCategoryWhen
INVALID_API_KEY401AUTH_ERRORBearer トークンが無効または欠落
UNAUTHORIZED401AUTH_ERRORAPI キー欠落/無効(INVALID_API_KEY と同義)
CHANNEL_NOT_AUTHORIZED401AUTH_ERRORこのアプリでチャネル未認可
FORBIDDEN403AUTH_ERRORキーは有効だが権限なし
INSUFFICIENT_SCOPE403AUTH_ERRORこのルートに必要な scope が不足
CHANNEL_NOT_ENABLED403AUTH_ERRORこのアプリでチャネル未有効
CHANNEL_AUTH_REQUIRED403AUTH_ERRORチャネル認可未完了
CHANNEL_AUTH_EXPIRED403AUTH_ERROR認可期限切れ — Portal で再認可
CHANNEL_AUTH_REVOKED403AUTH_ERROR認可が取り消されました
FULFILLMENT_MODE_NOT_SUPPORTED403AUTH_ERRORself 履約アプリで /v1/fulfillment/*
FULFILLMENT_ACCESS_REQUIRED403AUTH_ERROR予約 — 履約アクセス未付与
FULFILLMENT_ACCESS_SUSPENDED403AUTH_ERROR予約 — 履約アクセス停止中
WAREHOUSE_AUTH_REQUIRED403AUTH_ERROR倉庫履約だが倉庫認可なし
WAREHOUSE_AUTH_EXPIRED403AUTH_ERROR倉庫認可の期限切れ
WAREHOUSE_AUTH_INVALID403AUTH_ERRORWarehouse rejected developer authentication
VALIDATION_ERROR400VALIDATION_ERRORボディ欠落/不正、未対応通貨
UNSUPPORTED_CHANNEL400VALIDATION_ERROR不明な channel 値
UNSUPPORTED_FIELD400VALIDATION_ERRORこのルートで許可されないフィールド
NOT_FOUND404VALIDATION_ERRORルートまたはリソースが存在しない
CHANNEL_CAPABILITY_NOT_SUPPORTED400CHANNEL_ERRORこのチャネルでは利用不可
CHANNEL_UPSTREAM_ERROR502CHANNEL_ERRORマーケット側が拒否(マスク済み)
WAREHOUSE_UPSTREAM_ERROR502CHANNEL_ERROR倉庫/履約上流失敗(マスク済み)
INTERNAL_ERROR500INTERNAL_ERRORGateway 予期せぬ障害 — バックオフ再試行
RATE_LIMIT_EXCEEDED429RATE_LIMIT_ERROR毎分/バースト制限超過
QUOTA_EXCEEDED429RATE_LIMIT_ERRORチャネル日次クォータ枯渇
PLATFORM_QUOTA_EXCEEDED429RATE_LIMIT_ERRORプラットフォーム月次容量上限
PAYMENT_DECLINED402VALIDATION_ERROR支払い拒否
PAYMENT_INSUFFICIENT_FUNDS402VALIDATION_ERROR資金不足(調達支払い)
ORDER_ALREADY_PAID409VALIDATION_ERROR注文は既に支払済み
ORDER_CANCELLED409VALIDATION_ERROR注文は既に取消済み
PRODUCT_UNAVAILABLE422VALIDATION_ERROR商品販売不可 / 掲載終了
IDEMPOTENCY_CONFLICT409VALIDATION_ERRORexternal_shipment_id / 冪等キー重複
EXTERNAL_ORDER_ID_ALREADY_EXISTS409VALIDATION_ERRORexternal_order_id がアプリ内で使用済み
PARCEL_NOT_FOUND404VALIDATION_ERROR無効または未入庫の parcel
INVALID_SHIPPING_CHANNEL400VALIDATION_ERROR不正な shipping_channel_code
INSUFFICIENT_BALANCE402VALIDATION_ERROR履約ウォレット残高不足
SHIPMENT_ALREADY_PAID409VALIDATION_ERRORInternational shipment already paid
SHIPMENT_NOT_FOUND404VALIDATION_ERRORShipment missing or not owned
SHIPMENT_NOT_INTERCEPTABLE409VALIDATION_ERRORCurrent shipment state cannot request intercept
SHIPMENT_INTERCEPTION_ALREADY_REQUESTED409VALIDATION_ERRORIntercept already requested
INVALID_INTERCEPTION_REASON422VALIDATION_ERRORIntercept reason CODE is invalid
INTERCEPTION_REMARK_REQUIRED422VALIDATION_ERRORremark required when reason is OTHER
SHIPMENT_CREATE_EXCEPTION400VALIDATION_ERRORCreate refused (missing item attributes, parcel not inbound, etc. — read message)
SHIPMENT_NOT_CANCELLABLE409VALIDATION_ERRORShipment cannot be cancelled in current status
SHIPMENT_ALREADY_CANCELLED409VALIDATION_ERRORShipment already cancelled
PACKAGE_ALREADY_CONSOLIDATED409VALIDATION_ERRORParcel already in another shipment
INBOUND_TRACKING_ALREADY_SHIPPED409VALIDATION_ERROR追跡番号が既出荷パッケージに紐付済
INBOUND_TRACKING_ALREADY_EXISTS409VALIDATION_ERROR追跡番号は登録済み
INBOUND_VALIDATION_FAILED422VALIDATION_ERROR入庫フィールドエラー(details.fields)
INBOUND_NOT_FOUND404VALIDATION_ERRORInbound 不存在または権限なし
PACKAGE_NOT_FOUND404VALIDATION_ERRORパッケージ不存在または権限なし
INBOUND_NOT_EDITABLE409VALIDATION_ERROR現状態では編集不可
INBOUND_ALREADY_RECEIVED409VALIDATION_ERROR倉庫で受領済み
INBOUND_PACKAGE_MISMATCH409VALIDATION_ERROR指定の入庫/パッケージに紐付け不可
INVALID_TRACKING_NUMBER422VALIDATION_ERROR追跡番号フォーマット不正
PACKAGE_COUNT_INVALID422VALIDATION_ERRORpackage_count 不正
TOTAL_VALUE_INVALID422VALIDATION_ERRORtotal_value 不正
UNSUPPORTED_CURRENCY422VALIDATION_ERROR未対応通貨(入庫: CNY/USD/KRW)
UNCLAIMED_PACKAGE_NOT_FOUND404VALIDATION_ERROR未照合パッケージなし
TRACKING_NUMBER_MISMATCH422VALIDATION_ERRORクレームの完全一致失敗
PACKAGE_ALREADY_CLAIMED409VALIDATION_ERROR既にクレーム済み
PACKAGE_NOT_CLAIMABLE409VALIDATION_ERROR現状態ではクレーム不可
CLAIM_ATTEMPTS_EXCEEDED429RATE_LIMIT_ERROR同一 ucp_* の失敗過多
RETURN_NOT_FOUND404VALIDATION_ERROR返品リクエストなし/権限なし
RETURN_NOT_CONFIRMABLE409VALIDATION_ERROR現状態では確認不可
RETURN_NOT_CANCELLABLE409VALIDATION_ERROR現状態では取消不可
RETURN_ALREADY_RETURNED409VALIDATION_ERROR返品済み
RETURN_ALREADY_CANCELLED409VALIDATION_ERROR取消/無効済み
RETURN_FEE_NOT_READY409VALIDATION_ERROR返品費用未算出
RETURN_FEE_CHANGED409VALIDATION_ERROR確認金額が fee.total と不一致
PACKAGE_NOT_RETURNABLE409VALIDATION_ERRORパッケージ状態により返品不可
INVALID_RETURN_REASON422VALIDATION_ERROR不明な返品理由コード
INVALID_RETURN_ADDRESS422VALIDATION_ERRORseller_return 住所不正
RETURN_VALIDATION_FAILED422VALIDATION_ERROR返品フィールド検証失敗
VALUE_ADDED_SERVICE_NOT_FOUND422VALIDATION_ERROR不明な VAS service_code
VALUE_ADDED_SERVICE_UNAVAILABLE422VALIDATION_ERRORVAS はあるが利用不可
VALUE_ADDED_SERVICE_INVALID_STAGE422VALIDATION_ERRORこの段階では VAS 不可
VALUE_ADDED_SERVICE_QUANTITY_INVALID422VALIDATION_ERRORVAS 数量不正
SERVICE_REQUEST_NOT_FOUND404VALIDATION_ERRORサービス申請なし
RESOURCE_NOT_FOUND404VALIDATION_ERROR関連リソースなし
RESOURCE_NOT_ELIGIBLE_FOR_SERVICE409VALIDATION_ERRORサービス対象外
SERVICE_FEE_NOT_READY409VALIDATION_ERRORサービス料金未準備
SERVICE_FEE_CHANGED409VALIDATION_ERROR確認金額がサービス料金と不一致
SERVICE_REQUEST_VALIDATION_FAILED422VALIDATION_ERRORサービス申請フィールド検証失敗
TRANSACTION_NOT_FOUND404VALIDATION_ERROR取引なし/権限なし
INVOICE_NOT_FOUND404VALIDATION_ERROR請求書なし/権限なし
TRANSACTION_NOT_INVOICEABLE409VALIDATION_ERROR請求不可の取引
TRANSACTION_ALREADY_INVOICED409VALIDATION_ERROR既に請求済み
TRANSACTION_INVOICE_PENDING409VALIDATION_ERROR請求処理中
INVOICE_NOT_DOWNLOADABLE409VALIDATION_ERROR未発行のためダウンロード不可
INVOICE_VALIDATION_FAILED422VALIDATION_ERROR請求申請検証失敗
INVOICE_CURRENCY_MISMATCH422VALIDATION_ERROR請求通貨不一致
INVALID_INVOICE_TITLE422VALIDATION_ERROR請求書タイトル不正
INVALID_TAX_NUMBER422VALIDATION_ERROR税番号不正
INVALID_BILLING_ADDRESS422VALIDATION_ERRORbilling_address missing or invalid
TICKET_NOT_FOUND404VALIDATION_ERRORチケットなし/アプリ外
TICKET_NOT_REPLYABLE409VALIDATION_ERROR返信不可(閉鎖など)
TICKET_ALREADY_CLOSED409VALIDATION_ERRORチケット閉鎖済み
INVALID_TICKET_CATEGORY422VALIDATION_ERRORチケットカテゴリ不正
INVALID_TICKET_PRIORITY422VALIDATION_ERRORチケット優先度不正
INVALID_RELATED_RESOURCE422VALIDATION_ERRORrelated_resource 種別不正
TICKET_VALIDATION_FAILED422VALIDATION_ERRORチケットフィールド検証失敗
RELATED_RESOURCE_NOT_FOUND404VALIDATION_ERROR関連業務リソースなし/権限なし
MESSAGE_REQUIRED422VALIDATION_ERRORメッセージ本文必須
MESSAGE_TOO_LONG422VALIDATION_ERRORメッセージが 10000 文字超過

Business failures (HTTP 200) {#business-failures}

Procurement preview/create/pay may return HTTP 200 with success: false when the marketplace refuses the operation but the Gateway request was valid.

{
  "channel": "1688",
  "success": false,
  "code": "ORDER_CREATE_FAILED",
  "message": "One or more lines could not be purchased.",
  "failed_offers": [
    {
      "offer_id": "...",
      "spec_id": "...",
      "error_code": "STOCK_NOT_ENOUGH",
      "error_message": "Insufficient stock"
    }
  ],
  "request_id": "req_..."
}
  • Check success before treating the call as completed
  • Inspect unavailable_lines (preview) or failed_offers (create)
  • Partial success: 1688 may return success: true with non-empty failed_offers

Product upstream failures {#upstream-product-errors}

Invalid Taobao口令, missing product, or vendor timeouts on product routes typically return 502 with CHANNEL_UPSTREAM_ERROR — not an empty product shell.

  1. Log request_id on every error path.
  2. Retry 429 and 500 with exponential backoff; do not retry 400 / 401 without fixing input.
  3. On 502 CHANNEL_UPSTREAM_ERROR, surface vendor message to ops; optionally retry once for transient outages.
  4. Order create: use external_order_id / Taobao outer_purchase_id for idempotency — see Procurement orders.

Get Support

Need integration help? Contact Developer Support at support@hiobuy.com · Response within 1–2 business days

Email support