Lifecycle of an event
From on-chain transfer to your2xx:
How a delivery looks
Every delivery is a single HTTPPOST to the webhookUrl you registered on the subscription.
| Property | Value |
|---|---|
| Method | POST |
| Content-Type | application/json; charset=utf-8 |
| User-Agent | WalletSuite-Webhooks/1.0 |
| Body | One event envelope, JSON |
| Signature headers | Webhook-Id, Webhook-Timestamp, Webhook-Signature |
Example request
Acknowledgement
Your endpoint acknowledges a delivery by responding with any2xx status within 18 seconds.
- Success: any
2xxresponse - the body is ignored. - Failure: anything else - a
3xx(redirects are not followed),4xx, or5xx, a connection or TLS error, or no response in time. Failures enter the retry schedule.
Retry behavior
A delivery that is not acknowledged is retried - with no status-code exceptions - on the following schedule, where each period starts after the failure of the preceding attempt:- Immediately (the initial delivery)
- 30 seconds
- 2 minutes
- 10 minutes
- 1 hour
- 6 hours
- 12 hours
- 24 hours
Delivery semantics
WalletSuite webhooks are delivered at-least-once, in best-effort order.- At-least-once: every event is delivered at least once. In rare cases the same event can arrive again - for example, when your endpoint processed a delivery but its
2xxresponse was lost in transit, so we retry. Dedupe onWebhook-Idand your handler stays correct (see Idempotency). - Best-effort ordering: events are sent in the order they occur, but ordering is not a contractual guarantee - retries can interleave with fresh deliveries. For sequence-sensitive logic, order by
occurred_at.
Idempotency
Every delivery carries a built-in idempotency key: theWebhook-Id header (= event_id in the payload), stable across all retries of the same event. One check against it gives you exactly-once processing on top of at-least-once delivery:
- Record each
Webhook-Idas you process it. - Seen before? Acknowledge with
2xxand skip - the work is already done.
Egress IPs
Deliveries are authenticated by their signature, not by source IP. Static egress IPs are an Enterprise option. For strict network perimeters, deliveries can originate from a fixed set of addresses in your regional environment (US, EU). The regional IP list is provided during enterprise onboarding. Static IPs are a network control layered on top of signature verification, not a replacement for it.Subscription status lifecycle
A subscription’sstatus tells you whether it is delivering.
| Status | Delivering? | Meaning |
|---|---|---|
pending | Not yet | Momentary state while a new subscription registers - it flips to active automatically. |
active | Yes | Fully registered and delivering events as on-chain transfers occur. |
failed | No | Registration failed. Delete the subscription and create a fresh one. |
paused | No | Applied automatically to persistently failing endpoints. Resumes automatically after a cooldown. |
deleted | No | The subscription was deleted. Create a new subscription to resume. |
Next steps
Verify Signatures
Authenticate every delivery with Standard Webhooks HMAC-SHA256.
Events & Payloads
The full envelope, field semantics, and
transfer.received payload.Best Practices
Handler design: queues, idempotency stores, and resilient processing.
Troubleshooting
Diagnose subscriptions, delivery failures, and signature mismatches.