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

Settlement

Your payout address is correct and you control it

You never type it: your payout address is the wallet you sign in with, shown read-only in the Pool tab. Check that address character by character against the wallet you meant to be paid, and confirm your pool’s recipient() on-chain at /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.

You've seen money arrive at least once

Do a full round trip on testnet: take a payment and watch it land at your payout address.You don’t have to sign anything for that to happen. Our keeper scans every 5 minutes, releases the balance in your pool and sends your share on, fronting the network fee itself — normally within minutes, and at the latest when your maximum wait elapses, 24 hours by default, once the pool holds at least 1.00 of your settlement token. The contract always pays the credited owner, never whoever submitted the transaction. Getting paid.
Getting paid, it isn’t: the keeper fronts and absorbs the network fee for automatic settlement on every chain, and nothing comes back out of your share for it.Two places it is your concern. Activating a chain — deploying your pool there — is a wallet-paid transaction you sign, once per chain, with a live fee estimate shown first. And you only need ETH, POL, BNB, AVAX or TRX afterward if you choose to move a balance early yourself with the one-signature Withdraw now button on EVM chains, which shows a live fee estimate before you sign. On TRON there is no button; payouts there are automatic.

Integration

Fulfilment runs from webhooks, not browser callbacks

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.

Your webhook returns 2xx fast and verifies every signature

Acknowledge quickly and do slow work in a background job — we time out after 10 seconds and retry.Verify the signature on every delivery and drop anything that fails — it is your trust boundary. Reveal your signing secret once in the dashboard and keep it in your server’s environment, not your source. Send a test payload and confirm your handler accepts it. Signatures.
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.

The embed still has integrity and settlementAnchor

Easy to drop while refactoring a template. Both exist to protect you. Why.
If you set a Content Security Policy, https://www.cryptocheckout.ai needs to be permitted in script-src and frame-src.

Operations

You have a refund process

We never hold your money, so we can never send a refund for you. Payments does have a per-order Refund action, but it only prepares the transfer: you sign and broadcast it from your own wallet, to an address the customer supplies at refund time, and it records the transaction hash against the order.Decide now who does it and how you collect the address. Refunds.
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.
Rare, but real: wrong token, wrong chain, an arrival long after expiry. A wrong token on an order you created carries a wrong_token status in Payments — but an arrival that matches no order at all creates no row, no status and no webhook, so scanning Payments will never surface it. There is no dedicated view for these yet, so the routine is a block-explorer check of your pool and, in practice, hearing it from the customer. Edge cases.
Defaults scale with value. If you sell instantly-consumable digital goods, consider raising them — there’s no dashboard control for it today, so ask us and tell us what you sell. Finality.

Commercial

Your pricing accounts for 1% — and a small deposit-rail fee

That’s 1% platform fee taken on the gross — 0.75% to us, 0.25% to your partner if one referred you. On a connect-rail €100 payment you receive €99.00, and nothing more is taken at settlement: our keeper absorbs the gas for releasing your pool without recovering it from you.A deposit-rail payment nets you slightly less than that, by a small network fee capped at 10% of what arrived — fixed into the one-time address before the customer ever sees it, and shown per order in your ledger. It covers the cost of deploying that address and sweeping it into your pool. Ask about custom rates before you go live if you expect volume. Fees.
Customers should know before paying that crypto payments are irreversible and refunds are handled by you directly.
More chains means more customer choice and more networks to keep an eye on. Starting with two or three cheap chains is a reasonable opening position. Chains and tokens.

Rehearse these three

Worth doing deliberately on testnet rather than discovering in production.

Customer closes the tab

Pay, then close immediately. Confirm your webhook still fulfils the order.

Duplicate webhook

Replay a delivery. Confirm you don’t ship twice.

Underpayment

Send slightly less than quoted. Watch where it lands and confirm you have a response.

Mainnet availability

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.
Everything above is worth completing on testnet regardless — when your chains switch on, you’ll be ready the same day.