Register only the events you need
Create an endpoint withPOST /v3/webhooks. Subscribe only to documented events that drive your integration. This example uses transfer.state_changed.
Create webhook endpoint
data.id as WEBHOOK_ID. Request a portal URL from GET /v3/webhooks/portal with an API key that has webhooks:write, retrieve this endpoint’s signing secret, and store it separately from your API key in a secret manager. The portal URL grants access on its own and expires after one hour, so request a new one each time and do not store or share it.
The portal groups v3 events by resource: Customers, Capabilities, Accounts, Recipients, Transfers, and API. Each event shows its payload schema and an example. Legacy events are marked deprecated and listed in a separate Legacy group. If your endpoint already subscribes to a legacy event, it keeps receiving it. Choose v3 event names for new subscriptions.
Change an endpoint’s events
Read one endpoint withGET /v3/webhooks/{webhookId}. The response has the same events shape as GET /v3/webhooks. It never includes the signing secret. Reads require webhooks:read and return 404 not_found for an unknown endpoint ID.
Update the endpoint with PATCH /v3/webhooks/{webhookId}. Send an Idempotency-Key header. Updates require webhooks:write.
- Send only
eventsto keep the current URL. - Send only
urlto keep the current event selection. eventsreplaces the whole selection. Read the endpoint first and include every event you still need.- New subscriptions must use v3 event names.
- You can keep a legacy event name if the endpoint already subscribes to it. Adding a new legacy name returns
400 validation_error.
url counts as a change. Changing only events or saving the current URL does not. Exceeding the limit returns 422 merchant_kyb_not_approved. See Go live.
This body keeps the URL and replaces the selection:
Request body
Verify before parsing
Swipelux delivers new webhook integrations through Svix. Verify the raw request body with your endpoint signing secret and these headers:svix-idsvix-timestampsvix-signature
Verify signature
Persist, acknowledge, then process
Put a uniqueness constraint on the envelopeid. Persist the verified envelope, return 2xx promptly, then process it asynchronously.
If the event ID already exists, acknowledge the delivery without repeating completed side effects. Resume pending or failed local work through your own retry queue. Do not use the envelope attempt field as a deduplication key or transport retry counter.
Refetch current state
Webhook order is not an authoritative resource history. Useresource.type and resource.id to locate the object, then fetch its current state before updating your system.
For a transfer event, call GET /v3/transfers/{transferId}:
Refetch transfer
Recover deliveries
UseGET /v3/webhooks/portal to open delivery logs. With webhooks:write, you can also retry failed deliveries or start a manual replay. A key with only webhooks:read opens a portal that shows deliveries but cannot retry them, replay them, or reveal signing secrets.
Every replay must pass through the same signature verification and durable inbox. To recover after downtime, replay the affected window and refetch each referenced resource. Completed event IDs remain no-ops; incomplete records resume asynchronously.
Next, verify duplicate and out-of-order deliveries in sandbox, then complete the Go live checklist.