Wallet Webhooks
Per-wallet and per-address delivery for every move.
What you'll be notified about
Most common patternsDirect deposits
Withdrawal lifecycle
Conversions & internal moves
Auto-sweep notifications
No per-event subscription — you receive everything
A wallet (or per-address) webhook fires for every transaction that touches it — there is no way to subscribe to only certain transaction types at this time. The configuration is just a URL. The types below are what you'll receive, not a menu to pick from, so filter on the payload's transactionType and transactionStatus in your own handler. Be sure to respond with a 200 status code either way.
Direct deposit events
Incoming — credited to your wallet- utxoExternalReceiveUTXO deposit
External deposit on a UTXO chain — Bitcoin, Litecoin, Dogecoin, etc.
- accountBasedExternalReceiveAccount-based deposit
External native-coin deposit on an account-based chain — Ethereum, BSC, Solana, etc.
- accountBasedExternalTokenReceiveToken deposit
External ERC-20 / BEP-20 / SPL token deposit.
Withdrawal, conversion & sweep events
Outgoing — leaving the wallet- externalSpendNative withdrawal
Native-coin withdrawal to an external address.
- accountBasedTokenSpendToken withdrawal
Token withdrawal to an external address.
- conversionCurrency conversion
Crypto-to-crypto conversion between your own wallets.
- autoSweepingAuto-sweep
Funds consolidated out of permanent addresses by the auto-sweep feature.
Same-user, internal, and test types are also delivered
Beyond the patterns above, internalReceive / internalSpend, sameUserReceive / sameUserSpend, and the LTCT pool events all deliver webhooks too — see the full transaction type catalog for every value you will receive.
Documented in camelCase, receive in PascalCase
These events are documented in camelCase names (e.g. externalSpend), but the delivered payload's type field — and the state inside it — arrive in PascalCase (e.g. ExternalSpend). Compare both case-insensitively so your handler matches regardless of casing.
One webhook per confirmation — until fully confirmed
For external deposits and withdrawals, CoinPayments fires a webhook on every confirmation accrued on-chain, not just the final one. Each payload includes confirmations and requiredConfirmations so you can render live progress without a separate Currencies lookup. Credit-processing logic should key off the terminal status: confirmedOnBlockchain for external transactions, or completed for internal ones (which settle in a single event). See Transaction Statuses for why the terminal value differs.
Where to next?
Pick the most useful next step.
