Skip to main content

Session Object

A checkout session represents a single payment attempt from creation to completion.

Session ID

Format: vp_cs_{env}_{nanoid}

  • vp_cs_test_k7x9m2n4p3 — sandbox session
  • vp_cs_live_k7x9m2n4p3 — production session

The ID is a 10-character random string. It cannot be guessed.

Fields

Core fields

FieldTypeAlways PresentDescription
idstringYesSession ID
statusstringYesCurrent status: pending, succeeded, failed, expired
modestringYesPayment mode (default "payment")
merchantIdstringYesMerchant account that owns this session
amountintegerYesPayment amount in minor units
currencystringYesISO 4217 currency code
countrystringNoISO 3166-1 alpha-2 country code (optional)
descriptionstringNoPayment description for bank statements
collectShippingbooleanNoWhether to collect shipping address on checkout page
shippingAddressobjectNoBuyer's shipping address (only present when status is succeeded)
transactionIdstringNoPayment provider's transaction ID (set on completion)
metadataobjectNoMerchant-provided key-value pairs (passed through to webhooks)
createdAtstringYesISO 8601 creation timestamp
updatedAtstringYesISO 8601 last update timestamp
expiresAtstringYesISO 8601 expiry timestamp

Payment routing (Vora)

Processor selection (Stripe, Adyen, NMI, etc.) happens server-side inside Von Payments. The merchant API does not expose which processor was used — neither POST /v1/sessions nor GET /v1/sessions/:id returns processor identifiers. Your integration is identical regardless of which processor fires the charge. See Vora — Payment Routing for context.

Status Lifecycle

pending ────> succeeded
└──> failed

pending ────> expired
StatusDescriptionTrigger
pendingSession created, waiting for buyerPOST /v1/sessions
succeededPayment completedPayment processor confirms
failedPayment declined or erroredPayment processor rejects
expired30-minute TTL elapsedAutomatic

Rules

  • Transitions are one-way — a succeeded session cannot become failed
  • A session can only be used once — no replays
  • Expired sessions cannot be re-activated — create a new session