Step 1 — Check the blockchain directly
Get the transaction hash from your customer and look it up on the block explorer for the chain they used:What you see → what it means
Transaction doesn’t exist The customer hasn’t sent it yet, or sent it on a different chain. Common causes:- Customer selected the wrong network in their wallet (e.g. sent Polygon USDC to an Ethereum address)
- Customer’s wallet is still broadcasting — wait 2–3 minutes and refresh
- Customer copied a different address than the one shown at checkout
Bitcoin transactions with very low fees can sit in the mempool for hours. The customer can use a fee-bumping (RBF) tool to speed it up.
Transaction exists, confirmed, but not in your dashboard → go to Step 2
Step 2 — Trigger detection manually
The dashboard has a built-in recovery tool. Go to the session in your dashboard and click Check payment. This scans the chain directly for transfers to the session’s deposit address, bypassing the Alchemy webhook entirely. If that marks the session paid, you’re done. Your webhook endpoint will receive thesession.paid event shortly after.
If it doesn’t, continue below.
Step 3 — Check your Alchemy webhook listener
When the automatic detection doesn’t fire, the most common cause is a misconfigured or unreachable Alchemy webhook.1
Verify your webhook public URL is reachable
Go to Integrations → Alchemy in your dashboard. Confirm the Webhook Public URL is set to your server’s public HTTPS address. It must be reachable from the internet —
localhost and private IPs won’t work.2
Check Alchemy's delivery logs
In the Alchemy dashboard, open Notify → Webhooks. Find the webhook for the chain the payment was sent on and check recent delivery attempts. Look for failed deliveries, 4xx or 5xx responses from your server, or connection timeouts.
3
Signing-key mismatch (401s) self-heals
If Alchemy’s logs show deliveries reaching your server but your server returns 401, the signing key is out of sync (e.g. a webhook was recreated out of band). The hourly Alchemy reconcile job re-asserts webhooks from the database and corrects this automatically; meanwhile the poller still catches the payment, so no funds are missed.
4
Check your server logs
Look for requests arriving at
/api/webhooks/alchemy (EVM), /api/webhooks/alchemy/solana, or /api/webhooks/alchemy/btc. A missing request means Alchemy isn’t reaching your server. A request with a verification error means a signing-key mismatch — the reconcile job will resync it.If your Alchemy integration is disabled or the auth token isn’t set, the app falls back to polling automatically. Detection will still work — it just takes up to 2–4 minutes instead of being near-instant.
Step 4 — Underpayment, overpayment, or wrong network
These cases are handled differently from a standard payment. Find the session in your dashboard and check its status:Wrong network
If the customer sent on the wrong network (e.g. USDC on Polygon to a Base address), the funds went to a valid address on the wrong chain. The deposit address is derived from your seed, so you control that address on every EVM chain. You can recover the funds by importing the private key for that derivation index. Contact support with the transaction hash and we’ll walk through the recovery.Step 5 — Sweep didn’t run
If the session showspaid in your dashboard but the funds haven’t arrived at your payout wallet:
- Go to Payouts in the dashboard and find the corresponding payout record.
- Check the status — if it shows
failed, click Retry. - Common sweep failures:
- Payout wallet address not configured (go to Settings → Wallet)
- Insufficient gas — the deposit address needs a small amount of the native token (ETH, MATIC, SOL) to pay gas for the sweep transaction. For EVM chains, your server funds gas automatically if configured; check Settings → Gas wallet.
Still unresolved?
Email [email protected] with subject line TX ISSUE and include:- Transaction hash
- Chain and network (e.g. Base Mainnet)
- Expected amount and token
- Your server logs around the time of the transaction (redact API keys and private keys — we will never ask for them)
- Screenshot of the Alchemy webhook delivery logs if available