Skip to main content
Every WalletSuite webhook delivery is a single HTTP POST with a JSON body in a stable envelope. The envelope carries delivery and routing metadata; the data object carries the event itself.

The envelope

The envelope is shared by every event type; each event’s data schema and example payloads live in the catalog below.

Fields

Example

Example delivery (transfer.received)

Payload versioning

schema_version is pinned per subscription: a subscription is pinned to the version current at creation and keeps receiving that version’s payloads for its lifetime.
  • Within a version, evolution is additive. New fields may be added to the envelope or the data object. Existing fields keep their names, types, and meaning. Your parser must tolerate unknown fields rather than reject them.
  • Breaking changes ship as a new version. If a field is ever renamed, removed, or has its type changed, that arrives as a new schema_version. Existing subscriptions stay on their pinned version until you explicitly opt in.

Event catalog

One entry per event type: what fires it, the data schema, and example payloads.

transfer.received

Fired once per incoming transfer to a watched address, when WalletSuite first observes it on-chain. The data object:
amount is a decimal string in token units, already adjusted for the asset’s decimals. "1.5" means 1.5 tokens, not 1.5 wei. It is never in scientific notation and has arbitrary precision.Parse it with a decimal/big-number type (decimal.Decimal, BigNumber, BigDecimal), never a native float - IEEE-754 floats silently lose precision on values like USDC amounts and large token balances.

Example payloads

Four complete transfer.received payloads - one per asset shape.
ETH native transfer

Address encodings

from, to, and asset_contract use each chain’s canonical address encoding, consistent with the rest of the WalletSuite API. On input - for example, when you register a subscription - common representations of an address are accepted and normalized to that canonical form.

Event kinds vs event types

Two different concepts share similar names: eventKinds is a subscribe-time filter, not a delivered field. Subscribing with ["INCOMING_NATIVE"] means you only receive native-coin transfers; ["INCOMING_FUNGIBLE"] means only token transfers; both means both. Either way, you distinguish native from token deliveries by reading asset_type on the payload, not by inspecting eventKinds (which is never sent). See Quickstart for creating subscriptions.

Quickstart

Create a subscription, provision a signing secret, and receive your first event.

Verify Signatures

Validate the Standard Webhooks signature against the raw request body.

Delivery & Retries

Acknowledgement window, retry schedule, ordering, and at-least-once semantics.

Troubleshooting

When a payload fails to verify or never arrives - resolution checklists and FAQ.

Best Practices

Idempotency, async processing, and hardening your endpoint for production.