Toate erorile respectă RFC 7807. Corpul răspunsului este application/problem+json, cu câmpurile type, title, status, detail, request_id și, opțional, reason sau 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 | Semnificație |
|---|---|---|
| 400 | validation_failed | Validarea datelor de intrare a eșuat. Consultați errors[] pentru detalii pe fiecare câmp. |
| 401 | auth_failed | Autentificarea a eșuat. Răspunsul conține întotdeauna reason unauthorized (sau ip_not_allowed dacă cheia este restricționată la alte adrese IP) și, intenționat, nu dezvăluie nimic în plus. Verificați cheia, secretul, ora (±300 s), nonce-ul și semnătura; echipa de suport poate găsi cauza exactă după request_id. |
| 402 | payment_required | Plată necesară. Consultați motivele de mai jos. |
| 403 | forbidden_scope | Permisiune lipsă. reason: missing_scope. |
| 404 | not_found | Resursa nu există sau nu este vizibilă pentru această cheie (previne enumerarea tenanților). |
| 409 | idempotency_conflict, order_in_progress, service_not_active | Conflict. Fie Idempotency-Key a fost deja folosit cu un alt body sau cu un alt endpoint (idempotency_conflict, reason in_progress cât timp prima cerere este încă în curs), fie o altă comandă a contului dumneavoastră se află încă în procesare (reason order_in_progress, respectați antetul Retry-After), fie serviciul nu se află într-o stare care permite acțiunea (service_not_active, vezi service_status). |
| 413 | payload_too_large | Body-ul cererii depășește 65.536 de octeți. Este respins încă înainte de autentificare. |
| 422 | unprocessable | Cererea este înțeleasă, dar nu poate fi executată. reason billing_cycle_not_available: produsul nu este oferit în acest ciclu de facturare. reason zero_total_not_allowed: comanda ar fi gratuită fără un motiv valid, precum un cod promoțional. |
| 429 | rate_limited | Limita ratei a fost depășită. Respectați antetul Retry-After. |
| 500 | internal_error | Eroare internă de server. Furnizați request_id pentru corelarea cu jurnalul de audit atunci când contactați suportul. |
Motive pentru "Plată necesară" (HTTP 402)
Atunci când comanda nu poate fi plătită, API-ul returnează HTTP 402, cu un motiv lizibil pentru aplicații, în corpul JSON.
insufficient_credit_and_no_card(Credit insuficient și niciun card înregistrat. Soluție: alimentați creditul sau adăugați un card în portalul de clienți.)card_declined(Cardul a fost refuzat de bancă sau de procesatorul de plăți. Soluție: încercați un alt card sau contactați banca.)credit_apply_failed(Creditul nu a putut fi aplicat facturii. Nu s-a debitat nimic, iar comanda a fost anulată. Reîncercați cu un nou Idempotency-Key sau contactați echipa de suport.)client_not_found(ID-ul contului nu a fost găsit (practic, nu ar trebui să se întâmple niciodată; contactați suportul).)

