リソース

エラーとレート制限

エラーの形式

すべてのAPIエラーは、次の構造のJSONを返します。

{
  "error": "Short error description",
  "detail": "Extended description (optional)"
}

一部のエンドポイントでは、Django REST Frameworkのデフォルトとして、次の形式で返される場合もあります。

{
  "detail": "Error message"
}

HTTPステータスコード

ステータス 意味 発生条件
200 成功 リクエストが成功した場合
400 不正なリクエスト パラメータが不足しているか、無効な場合
401 認証エラー 認証トークンがないか、有効期限が切れているか、無効な場合
403 アクセス禁止 トークンに必要なスコープまたはワークスペースへのアクセス権がない場合
404 見つかりません リソースが存在しないか、ワークスペースに同期済みデータがない場合
405 許可されていないメソッド エンドポイントに対して誤ったHTTPメソッドを使用した場合
422 処理できないエンティティ リクエスト本文の検証に失敗した場合
429 リクエスト過多 レート制限を超えた場合
500 内部サーバーエラー 予期しないサーバーエラーが発生した場合
503 サービス利用不可 Elasticsearchまたはその他の依存サービスが停止している場合

レート制限

V1 API(サービストークン)

区分 上限 適用単位
バースト 10秒あたり20リクエスト トークンごと
時間枠 15分あたり600リクエスト トークンごと

ユーザーAPI(JWT)

区分 上限 適用単位
認証済み 毎分100リクエスト ユーザーごと
匿名 毎分20リクエスト IPごと

レート制限ヘッダー

レート制限によってリクエストが制限されると、レスポンスには次の情報が含まれます。

HTTP/1.1 429 Too Many Requests
Retry-After: 30

レート制限への対処: Retry-Afterで指定された時間(秒)が経過してから再試行してください。429レスポンスが繰り返し返される場合は、指数バックオフを実装してください。

よくあるエラーの発生例

認証エラー

// Missing Authorization header
{"detail": "Authentication credentials were not provided."}

// Invalid or expired JWT
{"detail": "Given token not valid for any token type", "code": "token_not_valid"}

// Invalid service token
{"error": "Invalid or revoked service token."}

// Expired service token
{"error": "Token has expired."}

権限エラー

// Token missing required scope
{"error": "Token does not have the required scope: graph:search"}

// Workspace not in token's allowed list
{"error": "Workspace not allowed for this token."}

検証エラー

// Missing required parameter
{"error": "workspace_id is required."}

// Invalid UUID format
{"error": "Invalid node_id format."}

// Query too long (V1 API)
{"error": "Query too long (max 256 characters)."}

// Disallowed characters in query
{"error": "Query contains disallowed characters."}

リソースエラー

// Workspace not synced
{"error": "No synced data found for this workspace."}

// Node not found
{"error": "Node not found."}

// Elasticsearch unavailable
{"error": "Search service unavailable."}