> ## Documentation Index
> Fetch the complete documentation index at: https://docs.payracle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> One-time payment sessions with a dedicated virtual account per transaction

A checkout generates a **dynamic virtual account** — a bank account number minted on the fly for one specific payment, on SafeHaven's network. It's tied to an exact amount, expires after a set window, and is what powers the [checkout widgets](/sdks/javascript) and the `checkout_url`/`/pay/{reference}` payment page.

This is different from a [persistent virtual account](/virtual-accounts/create): a dynamic account exists for a single transaction only, while a persistent account is reused by the same customer indefinitely.

<CardGroup cols={3}>
  <Card title="Initialize" icon="play" href="/checkout/initialize">
    Start a checkout session
  </Card>

  <Card title="Verify" icon="magnifying-glass" href="/checkout/verify">
    Poll a checkout's payment status
  </Card>

  <Card title="Sandbox Simulate" icon="flask" href="/checkout/simulate">
    Test the full flow without real money
  </Card>
</CardGroup>

## The flow

1. Your backend (or a client-side widget using a public key) calls **Initialize**, gets back a `checkout_url` and a dedicated account number.
2. The customer pays into that account, or is redirected to `checkout_url`.
3. Payracle sends a [webhook](/webhooks/overview) the instant the transfer lands.
4. You can also **Verify** the checkout by reference to poll its status directly — useful for the checkout page itself, less useful as your source of truth (trust the webhook for that).
