Skip to main content
Wallet activity is visible in two places: on-chain, through the SDK’s history in the app, and in Rain’s systems, through the issuing API and webhooks, wherever the activity touches a card program. During the beta, the wallet itself emits no webhooks; this page tells you what to use instead, and how to build so that the wallet events arriving at GA drop in without rework.

Two views of the same activity

A deposit from the wallet into a collateral contract is the one event that appears in both: as an outgoing token transfer in the SDK’s history, and as a transaction.created webhook of type collateral on your server.

Existing webhooks that cover wallet flows

You don’t need new subscriptions for the beta. These events, already in the event catalog, carry the wallet-related state: To tie a collateral webhook back to a specific wallet send, match collateral.transactionHash to the transactionHash your app got from sendToken. collateral.walletAddress identifies the sending wallet, not the send: one wallet can make many deposits, so use it to attribute the deposit to a user or as a secondary check, never as the match key. Withdrawals from the contract don’t have a dedicated webhook today; the app has the transaction hash from withdrawCollateral, and the contract’s token balances in GET /v1/issuing/users/{userId}/contracts reflect the change.

What to poll during the beta

Beta: polling only. Wallet-state events (wallet created, backup method added, key exported, passkey added, session events) aren’t emitted during the beta. Wallet webhooks are a GA deliverable, and this section describes the interim approach.
Keep the app as the source for wallet-side events and report them to your backend when they happen; that gives you an audit trail now and the same data shape you’ll receive from webhooks later.

What arrives at GA

GA adds real-time webhooks for wallet and transaction events, listed in the event catalog with a dedicated wallet webhooks page. Build your consumer so they slot in:
  • Use the standard envelope. Every Rain webhook is { id, resource, action, version, body }. Route on resource and action rather than on URL paths, and wallet events (a new resource) join without new plumbing. See Webhooks and Webhook delivery.
  • Key on addresses and hashes. Store the wallet address and Rain userId together at sign-up, and store transaction hashes the app reports. Wallet events will reference these, so your reconciliation code doesn’t change.
  • Keep polling behind an interface. Put today’s polling behind the same handler that will process the webhook so you can remove the poller without touching business logic.

What’s next

Event catalog

Every event, its category, and when it fires.

Balances and history

The SDK side of the same activity.