Swap webhooks
Real-time events for verification, routes, and settlement
Verification and settlement complete in the background. Subscribe to webhooks to be notified the moment state changes, instead of polling.
Manage your webhook endpoints (URL, subscribed events, signing secret) in the Partner Platform → Developer → Webhook endpoints.
Payload structure
Every event is delivered as an HTTP POST with this envelope:
Verifying signatures
Each request includes an X-Signature header — an HMAC-SHA256 hex digest of the
raw request body, keyed by your endpoint’s signing secret. Recompute it and
compare using a constant-time function. See the general
Webhook guide for full code samples (Node.js, PHP, Go, Java).
Retries
If your endpoint doesn’t return a 2xx, we retry with exponential backoff, up to
5 attempts (10s, 30s, 1m, 2m, 5m).
Events
company.kyc_link.issued
Fires once the company is provisioned for swap. Carries the same swap block as
GET /v1/kyc-link, so you can store both links without a follow-up call.
company.kyc_status_changed
kycStatus is one of not_started, incomplete, awaiting_questionnaire,
awaiting_ubo, under_review, approved, rejected, paused or offboarded —
see the Verification page for what each means and which need
your customer to act.
payment_route.created
paymentRoute is the same object GET /v1/payment-routes/{id} returns.
This also fires for routes opened in the AlphaX app rather than through the API, so your records stay in step either way.
payment_route.transaction.created
The body is companyId plus the exact object the transaction endpoints return —
so you can hand it to the same code whether you polled for it or were pushed it.
For an on-ramp, data carries the payer’s details instead:
A note on emails
If you onboarded a company, AlphaX does not email its people — no deposit notifications, no receipts. You own that relationship, and these webhooks are how you learn what to tell them.

