營運 · 2026-09-01 · HippoAPI Documentation Team

錯誤和重試

對 API 故障進行分類,捕獲有用的證據,並僅重試​​可以安全重複的瞬時請求。

錯誤回應形狀

非 2xx 回應使用帶有人類可讀訊息的錯誤對象,並且可能包括類型、代碼或請求 ID。將 HTTP 狀態視為第一個分類訊號並保留請求 ID(如果存在)。

{
  "error": {
    "message": "Error description (request id: ...)",
    "type": "new_api_error",
    "code": ""
  }
}

狀態代碼和操作

Status意義應用動作
400請求、模型、欄位無效或參數不受支援。修復請求。不要以不變的方式重試同一主體。
401API 金鑰遺失、格式錯誤、過期、停用或無效。更正或旋轉密鑰。不要自動重試。
403帳號、金鑰、IP、群組、模型不合法。檢查存取控制和模型可用性。
402餘額或額度不足。在發送更多請求之前檢查錢包和密鑰配額。
404未找到端點或模型資源。檢查基本 URL、端點路徑和確切的模型識別碼。
429當前請求率或併發過高。減少抖動並減少並發性。
5xx平台或上游提供者故障。重試安全請求,並有嚴格的嘗試限制;保留請求 ID。

使用有界指數退避

僅重試可能是暫時性的錯誤:連線失敗、HTTP 429 和選定的 5xx 回應。添加隨機抖動,以便許多工作人員不會同時重試。設定最大嘗試次數和總體截止日期。

const delaysMs = [500, 1000, 2000]

for (let attempt = 0; attempt <= delaysMs.length; attempt++) {
  try {
    return await callHippoAPI()
  } catch (error) {
    const status = error?.status
    const retryable = status === 429 || (status >= 500 && status < 600)
    if (!retryable || attempt === delaysMs.length) throw error
    const jitter = Math.floor(Math.random() * 250)
    await new Promise((resolve) => setTimeout(resolve, delaysMs[attempt] + jitter))
  }
}

記錄證據而不記錄秘密

請勿記錄包含個人、機密或受監管資料的Authorization 標頭、完整 API 金鑰或完整提示。在將錯誤轉發到可觀察性工具之前進行編輯。

  • UTC 時間戳和應用程式追蹤 ID。
  • HippoAPI 請求 ID(如果存在)。
  • HTTP 方法和端點路徑。
  • 模型標識符、狀態代碼、持續時間和重試嘗試。
  • 已編輯的錯誤摘要。

聯繫支援人員之前

使用最小的安全請求重現問題,確認模型出現在 GET /v1/models 中,並檢查使用日誌。然後向 [email protected] 提供時間戳記、端點、模型、HTTP 狀態、請求 ID 和經過編輯的請求摘要。

不要包含您的 API 金鑰。如果您已經分享或公開了該信息,請在繼續調查之前將其撤消。