エラー
成分 API のエラーは、すべて一貫した形で返ります。HTTP ステータスコードと、
ボディの error.code の両方で原因を判別できます。
{
"error": {
"code": "not_found",
"message": "リソースが見つかりません"
}
}code… 機械可読な安定したコード(下表)。分岐はこの値で行ってください。message… 人間向けの簡潔な説明。文言は予告なく変わり得ます。
HTTP ステータス
| ステータス | 意味 |
|---|---|
400 | リクエストが不正(パラメータの形式エラーなど) |
401 | 認証が必要・認証失敗(理由は秘匿し一律 401) |
403 | 検証に失敗(お試しトークン発行時の Turnstile 検証など) |
404 | リソースが存在しない(存在秘匿のための 404 を含む) |
409 | リソース状態との競合(API キーの発行上限到達など) |
429 | レート制限超過(レート制限 を参照) |
500 | サーバ内部エラー |
エラーコード一覧
code | 主なステータス | 説明 |
|---|---|---|
bad_request | 400 | パラメータ不正。例:スケール指定で grams も portion も無い |
unauthorized | 401 | 未認証 / 認証失敗。理由は秘匿(認証) |
forbidden | 403 | 検証失敗(Turnstile など) |
not_found | 404 | 食品やキーが存在しない。他人のキー操作も存在秘匿で 404 |
key_limit_reached | 409 | API キーの発行上限に到達(失効してから再発行) |
rate_limited | 429 | レート制限超過。Retry-After / RateLimit-* を確認 |
internal | 500 | サーバ内部エラー。再試行か、解消しなければ問い合わせ |
認証失敗は一律 401。 キーが存在しない / 失効済み / 期限切れ / 形式不正、いずれの理由でも HTTP では
401に潰します。これは存在や状態を攻撃者に推測させないための設計です。