錯誤碼對照表

每個 API 端點共用同一組錯誤碼。查 HTTP status 或 error.code,看常見原因、能不能重試、該怎麼處理。

檢視 Markdown

每個錯誤回應都長這樣:{ ok: false, requestId, correlationId, error: { code, message, nextAction } }。程式邏輯請判斷 error.code(穩定字串),message/nextAction 只是給人看的說明,可能會調整措辭。完整信封格式見 API 基礎規則。

驗證與請求格式

HTTPcode常見原因可重試?
400VALIDATION_ERROR欄位缺漏、型別錯誤、超出允許範圍(例如金額不是整數)修正欄位後可以重送,原樣重試沒有用
400IDEMPOTENCY_KEY_REQUIRED財務操作(付款/退款/結帳)沒有帶 Idempotency-Key 標頭加上標頭後重送

身分與權限

HTTPcode常見原因可重試?
401UNAUTHENTICATED沒帶 Authorization: Bearer,或金鑰不存在/已撤銷換一把有效金鑰後重送;原樣重試沒有用
401TOKEN_EXPIRED登入型 API 的 access token 已過期(15 分鐘)用 refreshToken 呼叫對應的 */Refresh 換發後重送
401INVALID_TOKENaccess token 格式或簽章不正確重新登入取得新的 token
401INVALID_REFRESH_TOKENrefreshToken 已使用過、已登出或已過期重新登入;refreshToken 每次換發都會輪替,舊的不能再用
403WRONG_TOKEN_TYPE用錯類型的 token(例如商家 token 呼叫 Admin*)改用該 API 對應的登入身分
404ROUTE_NOT_FOUND路徑不存在(例如還在用舊的 /v1/...)對照 GET /api/OpenApi 改用正確路徑
403SCOPE_DENIED金鑰沒有這個操作需要的 scope到後台建立一把有正確 scope 的金鑰
403SCOPE_DISABLED要求的 scope(例如 payouts:*)尚未對外開放不可重試——這個能力還沒上線,見 Sandbox 與正式環境
403WORKSPACE_ACCESS_DENIED金鑰只能存取建立它的 workspace,請求卻帶了別的 workspace id確認 x-workspace-id 或改用對的金鑰;不可重試
403ENVIRONMENT_DENIED請求指定了 sandbox 以外的環境(正式環境尚未開放)改用 sandbox;不可重試

資源狀態

HTTPcode常見原因可重試?
404NOT_FOUNDID 打錯、資源屬於別的 workspace、或已被刪除確認 ID 後重送;原樣重試沒有用
409CONFLICT跟現有資料衝突(例如唯一值重複)調整欄位後重送

流量限制

HTTPcode常見原因可重試?
429RATE_LIMITED超過該把金鑰的請求配額(預設每 60 秒 120 次)可重試——依 Retry-After 標頭的秒數等待後再送,見 API 基礎規則

伺服器錯誤

HTTPcode常見原因可重試?
500INTERNAL_ERROR非預期的伺服器錯誤可以帶退避(backoff)重試一兩次;如果持續發生,帶著 requestId 聯絡支援
付款相關的「非錯誤」狀態(例如 unknown 待對帳、退款前置檢查回傳的 PAYMENT_UNKNOWN_NEEDS_RECONCILE)不是 HTTP 錯誤,而是 200 回應裡的業務欄位——這些請看 退款與 Idempotency,不在這張表裡。
什麼時候該聯絡支援:如果同一個 requestId 對應的請求重試過依然是 500 INTERNAL_ERROR,或收到一個這張表沒列出的 error.code,把 requestId/correlationId 一起附上再聯絡,會比較好排查。