Overview
Multi-wallet webhooks let a single subscription monitor up to 100 EVM wallet addresses for ERC-20 transfer activity on Base. Instead of creating one subscription per address, you create one subscription and pass a list of addresses. Events arrive with ~2s average freshness from chain tip.Multi-wallet webhooks are live in production (API-only). Portal interface support is coming soon.
When to use this
| Scenario | Use wallet.activity.multi |
|---|---|
| Exchange deposit monitoring | ✅ Watch hundreds of user deposit addresses |
| Portfolio tracker | ✅ Track all user wallets under one project |
| Payment wallet | ✅ Monitor incoming transfers across a fleet of addresses |
| Agentic / automation use cases | ✅ React to transfers on a dynamic set of addresses |
| Single address monitoring | Use wallet.activity.detected instead |
Prerequisites
A Secret API Key
A Secret API Key
Sign up at portal.cdp.coinbase.com, then navigate to API Keys and select Create API key under the Secret API Keys tab.
- Enter an API key nickname (restrictions are optional)
- Click Create
- Secure your API Key ID and Secret in a safe location
A webhook URL
A webhook URL
You’ll need an HTTPS URL to receive webhook events. For quick testing, webhook.site gives free temporary URLs instantly.For production, use your own HTTPS endpoint.
cdpcurl
cdpcurl
Install
cdpcurl to make authenticated requests to CDP APIs:1. Construct subscription payload
Create a JSON payload with event typewallet.activity.multi and a wallet_addresses label containing a comma-separated list of EVM addresses.
multi-wallet.json
Configuration fields
| Field | Description | Required | Notes |
|---|---|---|---|
target.url | Your webhook endpoint URL | Yes | Must be a valid HTTPS URL |
labels.wallet_addresses | Comma-separated list of EVM addresses to monitor | Yes | Up to 100 addresses per subscription |
labels.network | Network name | No | base-mainnet (default) or base-sepolia |
eventTypes | Must be ["wallet.activity.multi"] | Yes | |
isEnabled | Enable/disable webhook | No | Defaults to true |
target.headers | Custom HTTP headers | No | Object with header key-value pairs |
The 100-address cap is per subscription. You can create multiple subscriptions to monitor more addresses.
2. Create subscription
201 Created response with a body like:
response.json
3. Receive and handle events
When any ERC-20 transfer involves one of your monitored addresses, your endpoint receives awallet.activity.multi event. The payload includes a direction field indicating whether your address was the sender, receiver, or both.
event-payload.json
value is the raw token amount with no decimal adjustment. For a 6-decimal token like USDC, 5000000 equals $5.00.Direction values
| Value | Meaning |
|---|---|
to | One of your addresses received the transfer |
from | One of your addresses sent the transfer |
both | Both from and to are in your address list |
Manage your subscription
To list, update, or delete your subscription, use the same endpoints described in the Webhooks Quickstart. When updating, pass the full revised
wallet_addresses list in the labels field.Limits and rate limiting
- Address cap: up to 100 addresses per subscription
- Rate limit: 2 webhook events per second per project. Events that exceed this limit may not be delivered. The rate limit is subject to change.
- Freshness: ~2s average latency from chain tip to delivery
- Supported networks: Base mainnet, Base Sepolia
- Delivery guarantees: at-least-once, with retries and DLQ via the Webhooks 2.0 stack
What to read next
Verify Signatures
Validate that events are coming from Coinbase
Single-wallet webhooks
Track a single CDP Server Wallet address with wallet.activity.detected
REST API Reference
Full reference for all webhook endpoints and options
Webhooks Overview
Delivery guarantees, use cases, and supported networks