> ## 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.

# Go-live checklist

> What to confirm before you accept real money, and the failure modes worth rehearsing first.

Work through this before your first real payment. Most of it takes minutes; the rehearsals are the valuable part.

## Settlement

<AccordionGroup>
  <Accordion title="Your payout address is correct and you control it" icon="bullseye" defaultOpen>
    Check it character by character in **Settings → Payout**, and confirm on-chain at [/verify](https://www.cryptocheckout.ai/verify).

    If it's an exchange deposit address, stop. Exchange addresses can be rotated or retired without warning, and a payment sent to a dead deposit address is gone. Use a wallet you hold the keys to.
  </Accordion>

  <Accordion title="You've claimed successfully at least once" icon="hand-holding-dollar" defaultOpen>
    Do a full round trip on testnet: take a payment, claim it, see it arrive. Claiming is a transaction **you** sign, so make sure you can — including having native gas on that chain.
  </Accordion>

  <Accordion title="You have native gas on every chain you enabled" icon="gas-pump">
    Claiming costs a network fee in the chain's native currency — ETH, POL, BNB, AVAX, TRX. A chain you can't claim on is a chain where your money sits until you top up.
  </Accordion>
</AccordionGroup>

## Integration

<AccordionGroup>
  <Accordion title="Fulfilment runs from webhooks, not browser callbacks" icon="webhook" defaultOpen>
    `onPaymentConfirmed` fires in the customer's browser. If they close the tab, it never fires — but the payment still completed.

    Treat browser callbacks as UI only. **Ship goods from the webhook.**
  </Accordion>

  <Accordion title="Your webhook verifies signatures and returns 2xx fast" icon="signature" defaultOpen>
    Reject anything that fails verification. Acknowledge quickly and do slow work in a background job — we time out after 10 seconds and retry.
  </Accordion>

  <Accordion title="Webhook handling is idempotent" icon="rotate">
    Retries mean you will occasionally see the same event twice. Key on `X-Webhook-Id` and make redelivery a no-op. Charging or shipping twice is the failure mode here.
  </Accordion>

  <Accordion title="The embed still has integrity and settlementAnchor" icon="shield-halved" defaultOpen>
    Easy to drop while refactoring a template. Both exist to protect you. [Why](/concepts/verification).
  </Accordion>

  <Accordion title="Your CSP allows the checkout" icon="lock">
    If you set a Content Security Policy, `https://www.cryptocheckout.ai` needs to be permitted in `script-src` and `frame-src`.
  </Accordion>
</AccordionGroup>

## Operations

<AccordionGroup>
  <Accordion title="You have a refund process" icon="rotate-left" defaultOpen>
    There is no refund button, because we never hold your money. Refunds are sent by you, from your wallet, to an address the customer supplies at refund time.

    Decide now who does it and how you collect the address. [Refunds](/money/refunds).
  </Accordion>

  <Accordion title="You know what to do with an underpayment" icon="circle-half-stroke">
    A customer who sends less than quoted lands in `underpaid`. Decide whether you ask them to top up, refund, or fulfil anyway on a small shortfall. [Edge cases](/money/edge-cases).
  </Accordion>

  <Accordion title="Someone scans for unmatched arrivals" icon="eye">
    Rare, but real: wrong token, wrong chain, an arrival long after expiry. These show in Payments without a matching order and need a human. There is no dedicated view for them yet, so put a weekly scan in someone's routine.
  </Accordion>

  <Accordion title="Your confirmation thresholds suit your risk" icon="sliders">
    Defaults scale with value. If you sell instantly-consumable digital goods, consider raising them. [Finality](/concepts/finality).
  </Accordion>
</AccordionGroup>

## Commercial

<AccordionGroup>
  <Accordion title="Your pricing accounts for 1%" icon="percent" defaultOpen>
    Flat, all-in, every chain. Ask about custom rates before you deploy if you expect volume. [Fees](/concepts/fees).
  </Accordion>

  <Accordion title="Your terms mention payment finality" icon="file-contract">
    Customers should know before paying that crypto payments are irreversible and refunds are handled by you directly.
  </Accordion>

  <Accordion title="You've picked which chains to enable" icon="link">
    More chains means more customer choice and more native-gas balances to maintain. Starting with two or three cheap chains is a reasonable opening position. [Chains and tokens](/concepts/chains-and-tokens).
  </Accordion>
</AccordionGroup>

## Rehearse these three

Worth doing deliberately on testnet rather than discovering in production.

<Columns cols={3}>
  <Card title="Customer closes the tab" icon="xmark">
    Pay, then close immediately. Confirm your webhook still fulfils the order.
  </Card>

  <Card title="Duplicate webhook" icon="copy">
    Replay a delivery. Confirm you don't ship twice.
  </Card>

  <Card title="Underpayment" icon="circle-half-stroke">
    Send slightly less than quoted. Watch where it lands and confirm you have a response.
  </Card>
</Columns>

## Mainnet availability

<Warning>
  CryptoCheckout runs on testnet today. Mainnet is enabled per chain, and only after a third-party security audit, a public bug bounty, and legal sign-off. [Roadmap](/reference/roadmap).
</Warning>

Everything above is worth completing on testnet regardless — when your chains switch on, you'll be ready the same day.
