Skip to main content
Everything runs on testnet today, so the whole product is a test environment. Use real testnet tokens from public faucets.

Get testnet tokens

Native gas

You need a little of each chain’s native token to deploy your pool and to claim. Chain faucets provide it free.

Test stablecoins

Circle runs a public faucet for testnet USDC and EURC across most supported chains.

The happy path

Deploy a pool

Pick a cheap chain — Base Sepolia is a good default.

Open your checkout

Confirm the verified badge appears before payment options.

Pay both ways

Once with a connected wallet, once by copying the deposit address and sending manually. They behave differently and both need to work.

Watch the webhook

Confirm payment_confirmed arrives and your signature verification passes.

Claim

Do a full round trip. Confirm the funds land in your payout wallet and the amount matches 99% of the order.

The failure paths

More valuable than the happy path, because these are what actually cost you money in production.

Customer closes the tab immediately

Pay, then close before the success screen.Expect: no browser callback, but the webhook still arrives and the order still fulfils. If your fulfilment depended on the callback, you’ve just found it.

Duplicate webhook delivery

Replay a delivery from your logs, or return a 500 once and let us retry.Expect: the second delivery is a no-op. If you shipped twice, key on X-Webhook-Id.

Underpayment

Send less than quoted on the deposit rail.Expect: status underpaid with the shortfall shown. Confirm you have a documented response. Edge cases.
Send more than quoted.Expect: the full amount arrives. The excess is yours to refund manually.
Send a token you haven’t enabled.Expect: wrong_token, surfaced rather than silently lost.
Let a quote expire, then pay the address anyway.Expect: funds arrive and are credited as paid late. Decide whether you honour the old price.
Temporarily change settlementAnchor to a different address.Expect: the checkout blocks with a configuration mismatch and hides the payment address. If it lets the customer pay, your anchor isn’t wired up. Change it back afterwards.

Testing webhooks locally

Your endpoint needs to be reachable from the internet. A tunnel works:
Localhost, private network ranges, and cloud metadata addresses are rejected as webhook URLs. That’s an SSRF protection, not a bug — use a tunnel.
The dashboard has a Send test event button that delivers a signed sample to your endpoint, which is the quickest way to check your signature verification without making a payment.

Before you switch to mainnet

Go-live checklist

Everything to confirm before real money.