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

# How it works

> The full path from a customer clicking pay to money arriving in your wallet, and who does what at each step.

Worth ten minutes before you integrate. The model is genuinely different from a card processor, and knowing why saves confusion later.

## The one-sentence version

Your customer pays into a contract that can only pay you, and you withdraw from it whenever you want.

## The full flow

```mermaid theme={null}
sequenceDiagram
    participant C as Customer
    participant W as Checkout
    participant B as Blockchain
    participant Y as You

    Y->>B: Deploy your pool (once per chain)
    C->>W: Clicks pay
    W->>B: Read payout address from chain
    W->>W: Verify it matches what we served
    Note over W: Mismatch here stops everything
    W->>C: Show payment options
    C->>B: Pay (wallet signature, or plain transfer)
    B-->>W: Payment confirmed
    W->>Y: Webhook: payment_confirmed
    Y->>C: Deliver the goods
    Y->>B: Press Claim when you want
    B->>Y: Funds to your wallet
```

## Step by step

<Steps>
  <Step title="You deploy a pool" icon="cube">
    A **pool** is a small contract that belongs to you. When it's created, your payout address is baked into it permanently.

    You sign the deployment and pay the network fee, which is what makes it yours rather than ours. One pool per chain you want to accept on.
  </Step>

  <Step title="A customer reaches checkout" icon="cart-shopping">
    You call our API for a quote, or the embedded widget does it for you. The quote locks a price for a short window and produces a payment identifier.
  </Step>

  <Step title="The checkout verifies us" icon="shield-check">
    Before showing a single payment option, the widget reads your payout address **directly from the blockchain** and re-computes what your pool address should be.

    If that doesn't match what our servers said, the checkout stops and tells the customer not to pay. This is the mechanism that means a breach of our database still cannot redirect your money. [How the verification works](/concepts/verification).
  </Step>

  <Step title="The customer pays" icon="credit-card">
    Either by connecting a wallet and signing, or by sending a plain transfer to a one-time address we show them. [The two rails](/concepts/payment-rails).
  </Step>

  <Step title="We confirm and tell you" icon="bell">
    We watch the chain. Once the payment is final — not merely seen — you get a `payment_confirmed` webhook. That is your signal to ship. [Finality](/concepts/finality).
  </Step>

  <Step title="You claim" icon="hand-holding-dollar">
    Payments accumulate in your pool. Press **Claim** in the dashboard and the balance splits and pays out. [Claiming](/money/claiming).
  </Step>
</Steps>

## Who controls what

|                                    |                  You                  |             CryptoCheckout            |
| ---------------------------------- | :-----------------------------------: | :-----------------------------------: |
| Owns the payout address            | <Icon icon="check" color="#10B981" /> | <Icon icon="xmark" color="#6B7280" /> |
| Can change where funds go          | <Icon icon="check" color="#10B981" /> | <Icon icon="xmark" color="#6B7280" /> |
| Can withdraw the balance           | <Icon icon="check" color="#10B981" /> | <Icon icon="xmark" color="#6B7280" /> |
| Can block or delay your withdrawal | <Icon icon="xmark" color="#6B7280" /> | <Icon icon="xmark" color="#6B7280" /> |
| Holds funds at any point           | <Icon icon="xmark" color="#6B7280" /> | <Icon icon="xmark" color="#6B7280" /> |
| Runs the checkout and monitoring   | <Icon icon="xmark" color="#6B7280" /> | <Icon icon="check" color="#10B981" /> |

<Info>
  Nobody can block your withdrawal, including us — the function that releases funds is callable by **anyone**. That's deliberate. A processor that *could* freeze your funds is a custodian, with everything that implies.
</Info>

## Things that surprise people

<AccordionGroup>
  <Accordion title="There are no chargebacks — in both directions" icon="ban">
    Nobody can reverse a payment against you. You also cannot reverse one yourself. Refunds are something you send manually, from your own wallet, to an address the customer gives you. [Refunds](/money/refunds).
  </Accordion>

  <Accordion title="Money accumulates rather than arriving per order" icon="layer-group">
    Payments pile up in your pool and you claim in batches. This keeps network fees low — one withdrawal for a hundred orders instead of a hundred withdrawals. You choose the cadence.
  </Accordion>

  <Accordion title="A payment that arrives late is still honoured" icon="clock">
    Quotes expire, but the payment address does not. If a customer's exchange withdrawal takes six hours, the money still arrives and still gets credited. The chain is the source of truth, not our timer.
  </Accordion>

  <Accordion title="You pay the network fee to deploy and to claim" icon="gas-pump">
    Two small on-chain costs are yours: deploying your pool once per chain, and each claim. Both are transactions you sign. Everything in between is on us. [Fees](/concepts/fees).
  </Accordion>
</AccordionGroup>

<Card title="Now build it" icon="rocket" href="/get-started/quickstart" horizontal>
  The quickstart takes about 15 minutes.
</Card>
