Skip to main content
GET
Poll the lifecycle of a full_enrollment session created by Enroll Card. This endpoint is server-to-server and returns no payment token, dynamic CVV, cryptogram, order, or transaction. GET /v1/sessions/{sessionId}/status · Authenticated with the same merchant secret key that created the session.
This endpoint supports only full_enrollment card sessions. Payment sessions must use Get Payment Result; calling the wrong status resource returns 409.

Path parameters

string
required
The session_id returned by POST /v1/sessions/enroll-card when enrollment_mode is full_enrollment.

Response

The JSON shape is stable across pending work, recoverable failures, success, cancellation, and expiry.
string
Enrollment session identifier.
string
Session lifecycle: requires_action, processing, completed, failed, cancelled, or expired.
string
Durable work completed: not_started, card_provisioned, or fully_enrolled.
string | null
Merchant-scoped card identifier. It becomes non-null after card provisioning succeeds, even if later passkey work is incomplete or fails.
string | null
registered when this flow created a passkey, existing when it verified an already available passkey, or null before passkey completion.
provided when the create request included consent_id; otherwise not_provided. This reports reference presence, not independent proof of consent.
object | null
Safe failure information: code, message, and retryable. It is null when no failure is active and after completion or cancellation.

How to interpret status and outcome

Enrollment success is exactly status: "completed" together with outcome: "fully_enrolled". Do not infer full enrollment from a non-null card_id: card_id proves only that card provisioning completed.

Retry behavior

When error.retryable is true, the cardholder retries inside the existing iframe:
  • Do not call a retry API—there is no public retry endpoint.
  • Do not create another enrollment session.
  • Do not ask the cardholder to select or enter the card again after card_id exists.
  • Keep polling this same session_id while the cardholder selects Try again.
Prava retains the selected/provisioned card and restarts only the recoverable enrollment step. Incorrect OTP attempts remain inside the card-network experience and do not require merchant-side state.

Examples

Polling example

Poll from your backend, not the browser. A practical starting cadence is once per second while the cardholder is active, backing off toward five seconds during longer processing. The endpoint is limited to 120 requests per minute.

Error responses

Enrollment lifecycle failures use HTTP 200 with the stable response above. HTTP errors mean the status request itself could not be served. Every response includes an X-Response-ID header. Include it when contacting support@prava.space.