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.