すべてのエラーは RFC 7807 に準拠します。ボディは application/problem+json で、フィールドは type、title、status、detail、request_id および任意で reason または errors[] を含みます。
{
"type": "https://www.kernelhost.com/en/reseller-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 が理由を示します:missing_headers、bad_key、bad_timestamp、timestamp_out_of_window、bad_nonce、bad_signature、signature_mismatch、replay_detected、unknown_or_locked_key、ip_not_allowed。 |
| 402 | payment_required | 支払いが必要です。reason は下記を参照してください。 |
| 403 | forbidden_scope | 権限不足。reason:missing_scope。 |
| 404 | not_found | リソースが存在しないか、このキーには表示されません(テナント列挙を防止します)。 |
| 409 | idempotency_conflict | Idempotency-Key が異なるボディで既に使用されています。 |
| 429 | rate_limited | レート制限超過。Retry-After ヘッダーに従ってください。 |
| 500 | internal_error | サーバー内部エラー。サポート連絡時には監査ログとの相関のため request_id をお知らせください。 |
支払い必須の理由(HTTP 402)
注文の支払いができない場合、API は HTTP 402 を返し、JSON ボディに機械可読な reason を含めます。
insufficient_credit_and_no_card(クレジット残高が不足しており、カード未登録です。対応:クレジット残高をチャージするか、カスタマーポータルでカードを追加してください。)card_declined(カードが銀行またはゲートウェイにより拒否されました。対応:別のカードを試すか、銀行にお問い合わせください。)card_expired(カードの有効期限切れ。対応:カスタマーポータルで新しいカードを追加してください。)client_not_found(アカウント ID が見つかりません(実際にはまず発生しません、サポートまでご連絡ください)。)

