Skip to main content
All errors share one envelope:
details is optional; it’s included for validation errors to specify which fields failed. Every response also carries an X-Response-ID header; include it when contacting support@prava.space.

Authentication & validation

These can occur on any endpoint:

Create Session — POST /v1/sessions

Payment Result — GET /v1/sessions/{sessionId}/payment-result

Quote checkout failures are polling outcomes, so the endpoint still returns HTTP 200 with top-level status: "failed" and may include one of these error.code values. Read canonical failure details from the top-level error. When merchant lifecycle data exists, merchant_res contains only status and optional orderId. For an explicitly simulated sandbox result, the actual failure can appear under observed_result.error while the effective top-level status is completed and merchant_res.status is paid. At session creation, 400 SANDBOX_SIMULATION_NOT_ALLOWED means simulation was requested for production, custom checkout, or mandate setup. Only the exact payment-stage success shape is accepted; malformed shapes return a validation error. See Sandbox simulation.

Shopping checkout errors

An apartment or unit-number suggestion is a non-blocking quote warning, ADDRESS_UNIT_CONFIRMATION_SUGGESTED, rather than an error. The shopper can confirm or add a unit number while keeping the quote usable.

Card Enrollment — POST /v1/sessions/enroll-card · GET /v1/sessions/{sessionId}/status

Failures after a full_enrollment session is created normally use HTTP 200 with the stable status body. When error.retryable is true, the cardholder retries inside the same iframe; the merchant does not call another API or create another session.

Report Status — POST /v1/sessions/{sessionId}/report-status

Cards — GET /v1/listCards · POST /v1/deleteCard

Revoke Session — POST /v1/sessions/{id}/revoke

Mandates — /v1/mandates/*

Mandate routes authenticate with a secret key or an agent Ed25519 signature; a missing/invalid credential returns 401 AUTH_REQUIRED. Reporting a charge (/charges/{txnId}/report) can additionally return 404 CHARGE_NOT_FOUND, 409 CHARGE_NOT_REPORTABLE / CHARGE_NO_TLI, 502 VISA_CONFIRMATION_FAILED, or 500 MANDATE_CHARGE_REPORT_DB_FAILED.
THRESHOLD_EXCEEDED is not a Prava error code — it’s a Visa decline (an over-cap charge) surfaced in a failed charge’s errorCode / errorMessage, not in the error envelope. See Charge a Mandate.
The SDK has its own client-side error codes (SDK_ALREADY_ACTIVE, INVALID_CONFIG, IFRAME_LOAD_ERROR, SDK_INIT_ERROR); see Collect Card Details. CLI errors are mapped on the Prava Pay troubleshooting page.