すべてのエラーは RFC 7807 に準拠します。ボディは application/problem+json で、フィールドは type、title、status、detail、request_id および任意で reason または errors[] を含みます。
{
"type": "https://www.kernelhost.com/en/kernelhost-api/errors/payment_required",
"title": "Payment required",
"status": 402,
"detail": "The order could not be paid.",
"request_id": "01HX7Z3K8Q...",
"reason": "insufficient_credit_and_no_card"
}
| HTTP | type | 意味 |
|---|---|---|
| 400 | validation_failed | 入力バリデーション失敗。フィールドごとの詳細は errors[] を参照してください。 |
| 401 | auth_failed | 認証に失敗しました。レスポンスの reason は常に unauthorized(キーが他の IP アドレスに制限されている場合は ip_not_allowed)で、意図的にそれ以上の情報は返しません。キー、secret、時刻(±300秒)、nonce、署名を確認してください。サポートは request_id から正確な原因を確認できます。 |
| 402 | payment_required | 支払いが必要です。reason は下記を参照してください。 |
| 403 | forbidden_scope | 権限不足。reason:missing_scope。 |
| 404 | not_found | リソースが存在しないか、このキーには表示されません(テナント列挙を防止します)。 |
| 409 | idempotency_conflict, order_in_progress, service_not_active | 競合です。Idempotency-Key がすでに別のボディまたは別のエンドポイントで使用されている(idempotency_conflict、最初のリクエストがまだ処理中の場合は reason in_progress)、お客様のアカウントで別の注文がまだ処理中である(reason order_in_progress、Retry-After に従ってください)、またはサービスがそのアクションを許可する状態にない(service_not_active、service_status を参照)のいずれかです。 |
| 413 | payload_too_large | リクエストの body が 65,536 バイトを超えています。認証の前に拒否されます。 |
| 422 | unprocessable | リクエストは理解できますが実行できません。reason billing_cycle_not_available:この製品はこの請求サイクルでは提供されていません。reason zero_total_not_allowed:プロモーションコードなどの正当な理由なく注文が無料になってしまいます。 |
| 429 | rate_limited | レート制限超過。Retry-After ヘッダーに従ってください。 |
| 500 | internal_error | サーバー内部エラー。サポート連絡時には監査ログとの相関のため request_id をお知らせください。 |
支払い必須の理由(HTTP 402)
注文の支払いができない場合、API は HTTP 402 を返し、JSON ボディに機械可読な reason を含めます。
insufficient_credit_and_no_card(クレジット残高が不足しており、カード未登録です。対応:クレジット残高をチャージするか、カスタマーポータルでカードを追加してください。)card_declined(カードが銀行またはゲートウェイにより拒否されました。対応:別のカードを試すか、銀行にお問い合わせください。)credit_apply_failed(クレジットを請求書に適用できませんでした。料金は一切請求されず、注文はキャンセルされました。新しい Idempotency-Key で再試行するか、サポートにお問い合わせください。)client_not_found(アカウント ID が見つかりません(実際にはまず発生しません、サポートまでご連絡ください)。)

