Webhooks
Notifications delivered to your endpoints when corporate entities change state.
Before You Start
Read the following guides before proceeding:
| Guide | Why |
|---|---|
| Getting Started | The webhook base URL is configured during onboarding |
| Authentication | Understanding what belongs to your company |
Overview
Wirex delivers HTTP POST notifications to the webhook base URL registered for your company. The same
dispatcher serves retail and corporate companies, so the delivery contract and the payload shapes are
shared across both APIs — only the set of entities you receive differs.
Delivery Model
- Method: HTTP POST with a JSON body
- Content-Type:
application/json - Timeout: 10 seconds per request
- Retries: Failed deliveries are logged and not retried
- Authentication: No authentication headers are added to webhook requests
Validate webhook origin at the network level (IP allowlisting) and implement idempotent handlers —
a delivery can repeat.
There is no per-corporation webhook URL. Every corporation registered under your partner_id delivers
to the same base URL; use corporation_address in the payload to route.
Endpoints
| Path | Entity | Delivered when |
|---|---|---|
/v2/webhooks/corporations | Corporation | Corporation profile, status or KYB verification status changes |
/v2/webhooks/wallets | Wallet | A corporation wallet is created or its confirmation status changes |
/v2/webhooks/balances | Balance | A token balance changes on a corporation wallet |
/v2/webhooks/cards | Card | A card is issued or its status or data changes |
/v2/webhooks/card-limits | Card limit | A spending limit or its usage changes |
/v2/webhooks/3ds | 3DS request | A 3D Secure challenge is raised on a card transaction |
/v2/webhooks/activities | Activity | A transaction or activity feed item is created or updated |
/v2/webhooks/recipients | Recipient | A recipient is created or updated |
/v2/webhooks/erc-withdrawals | ERC withdrawal | A withdrawal request awaits on-chain execution |
/v2/webhooks/user and /v2/webhooks/debt-cases carry retail user entities and are not delivered for
corporations.
Corporation Webhook
Endpoint: POST {your_webhook_base_url}/v2/webhooks/corporations
Delivered when the corporation record changes — most importantly when KYB moves through
Applied → InReview → Approved, and when the profile becomes Active.
{
"corporation_address": "0xA7E41d5680dE394EaA2ed417169DFf56840Fb3EE",
"owner_address": "0xA7E41d5680dE394EaA2ed417169DFf56840Fb3EE",
"corporation_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"corporation_name": "Acme Inc",
"corporation_type": "LimitedLiability",
"verification_status": "Approved",
"status": "Active",
"registration_number": "12345678",
"corporation_registration_address": {
"line1": "10 Downing Street",
"line2": "Flat 2",
"city": "London",
"state": "",
"country": "GB",
"postal_code": "SW1A 2AA"
},
"corporation_contact_details": {
"name": "Alex Grey",
"email": "[email protected]",
"phone_number": "+447700900123"
},
"freshdesk_id": "1234567890"
}| Field | Type | Description |
|---|---|---|
corporation_address | string | The corporation's wallet address — use it to route the event |
owner_address | string | Address of the corporation owner |
corporation_id | string | Corporation id (UUID) |
corporation_name | string | Registered name |
corporation_type | enum | LimitedLiability, SoleTrader, Partnership, PublicLimitedCompany, JointStockCompany, Charity |
verification_status | enum | Pending, Applied, InReview, Approved, Rejected, Canceled |
status | enum | Pending, Active, Blocked, Deleted |
registration_number | string | Company registration number |
corporation_registration_address | object | Registered address. Omitted until KYB supplies it |
corporation_contact_details | object | Primary contact. Omitted until KYB supplies it |
freshdesk_id | string | Support identifier, when set |
The corporation webhook carries a narrower payload than
GET /api/v1/corporations. It has no
capabilities, noactionsand noverification_levels. Treat it as a signal to re-read the
corporation, not as a replacement for reading it — capability transitions are only visible on the read
endpoint.
Shared Payloads
The wallet, balance, card, card-limit, 3DS, activity, recipient and ERC-withdrawal payloads are produced
by the shared dispatcher and are documented in the retail Webhooks guide. They arrive
unchanged for corporations.
Two differences matter when you map them onto Corporate API responses:
- The card webhook is the retail card shape. It carries
generationandbalances, and itslimit
object carrieslifetime_limitandlifetime_usage— none of which appear in
GET /api/v1/cards. Ignore the extra fields rather than modelling your card record on the webhook. - Wallet and balance events are addressed by wallet address, not corporation id. Resolve the
corporation by matchingwallet_addressagainstGET /api/v1/wallets.
What Is Not Delivered
There is no webhook for employees, roles, bank account activation, FX swaps or bulk transfer approval.
Poll the corresponding endpoint after the call that started the work:
| Change | How to observe it |
|---|---|
| Employee invited, updated, deleted | GET /api/v1/employees |
| Role created, updated, deleted | GET /api/v1/roles |
| Bank account details activated | GET /api/v1/bank/accounts — the details appear once the account status is Active |
| Capability became active | GET /api/v1/corporations — read capabilities[].status |
| FX swap settled | GET /api/v1/activity/feed |
| Bulk transfer executed | GET /api/v1/activity/feed |
Updated 20 days ago

