Webhook events and payloads.
All 70 documented outbound events are listed below. Expand an event for its payload example and link to the full request schema.
The /webhooks/outbound/… paths are documentation identifiers. Hoppa sends these POST requests to your configured webhook URL; do not call these paths on the Hoppa API.
Receive and acknowledge an event
Verify X-Hoppacard-Signature as lowercase-hex HMAC-SHA256 over the exact raw request body using your webhook secret. Deduplicate event IDs, accept events durably, then return a 2xx response. No response body is required. Process events idempotently and allow out-of-order delivery.
Network failures, timeouts, 408, 429 and 5xx responses are retried up to fifteen times after the initial delivery over approximately 76 hours. Other 4xx responses are permanent failures.
Download the complete documentation schema · Transaction reconciliation guide
account.activated
Sent when a Banking account is activated.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.activated",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountActivated",
"id": "acc_eq_123",
"correlationId": "corr_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "ACTIVE",
"type": "INDIVIDUAL",
"primaryOwnerPersonaId": "persona_123",
"details": {
"accountId": "acc_eq_123",
"name": "Example Trading Account"
},
"settlementDetails": [
{
"currency": "GBP",
"sortCode": "040075",
"accountNumber": "12345678",
"ibans": [
{
"iban": "GB29NWBK60161331926819",
"bic": "NWBKGB2L"
}
],
"accountName": "Example Trading Account",
"bankName": "Equals Money",
"bankAddress": "London, United Kingdom",
"balanceReference": "BAL-123"
}
]
}
}account.created
Sent when a Banking account is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.created",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountCreated",
"correlationId": "corr_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "PENDING",
"type": "INDIVIDUAL"
}
}account.deposit.address
Sent when deposit addresses are created for a user's account.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.deposit.address",
"domain": "account",
"provider": "bank",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"status": "created"
}
}account.status_updated
Sent when a Banking account status changes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "account.status_updated",
"domain": "account",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "AccountStatusUpdated",
"correlationId": "corr_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "SUSPENDED",
"type": "INDIVIDUAL"
}
}bank_account.status
Sent when a business bank account status changes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "bank_account.status",
"domain": "account",
"provider": "bank",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"bankAccountId": "ba_123",
"iban": "GB00HOPP00000000000000",
"currency": "GBP",
"status": "active"
}
}budget.created
Sent when a budget is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.created",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"budgetId": "budget_123",
"name": "Main EUR Budget",
"currency": "EUR",
"amount": "1000.00",
"spent": "125.00",
"remaining": "875.00",
"period": "monthly",
"status": "active"
}
}budget.credit_pending
Sent when a Banking budget credit is pending settlement.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.credit_pending",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "BoxCreditPending",
"budgetId": "budget_123",
"budgetName": "Operations Budget",
"settlementPriceAmount": 1200,
"settlementPriceCurrency": "GBP",
"valueDateTime": "2026-04-29T00:00:00Z"
}
}budget.credited
Sent when a Banking budget receives funds.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.credited",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"budgetId": "budget_123",
"amount": 75,
"currency": "EUR",
"source": "BANK_TRANSFER",
"reference": "Invoice 123",
"remitterName": "Example Ltd"
}
}budget.debited
Sent when a Banking budget is debited.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.debited",
"domain": "budget",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": 1002,
"externalTransactionId": "ext_tx_456",
"userId": 12345,
"budgetId": "budget_123",
"amount": 25,
"currency": "EUR",
"source": "CARD_PAYMENT"
}
}budget.deleted
Sent when a budget is deleted.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.deleted",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"budgetId": "budget_123",
"name": "Main EUR Budget",
"currency": "EUR",
"amount": "1000.00",
"spent": "125.00",
"remaining": "875.00",
"period": "monthly",
"status": "deleted"
}
}budget.transaction.closed
Sent when a budget transaction is closed.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.transaction.closed",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": "1001",
"userId": "12345",
"budgetId": "budget_123",
"amount": "15.00",
"currency": "EUR",
"status": "closed",
"type": "DEBIT"
}
}budget.updated
Sent when a budget is updated.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "budget.updated",
"domain": "budget",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"budgetId": "budget_123",
"name": "Main EUR Budget",
"currency": "EUR",
"amount": "1000.00",
"spent": "125.00",
"remaining": "875.00",
"period": "monthly",
"status": "active"
}
}business_account.transaction
Sent when a business account transaction is processed.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "business_account.transaction",
"domain": "business_account",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"accountId": 321,
"transactionType": "payout_payment",
"amount": 100,
"currency": "EUR",
"status": "completed",
"fee": 1.25
}
}card.3ds_auth_request
Sent when a Banking card 3DS authentication request requires OTP handling.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.3ds_auth_request",
"domain": "card",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardId": 555,
"externalCardId": "card_ext_123",
"merchantName": "Example Merchant",
"amount": 42.5,
"currency": "EUR",
"transactionId": "txn_123",
"otp": "123456"
}
}card.3ds.otp
Sent when a card 3DS OTP is received from Crypto cards.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.3ds.otp",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardId": 555,
"externalCardId": "card_ext_123",
"otp": "123456",
"expiresAt": "2026-04-28T10:20:30Z"
}
}card.activated
Sent when a card is activated. Virtual cards may emit this immediately after creation.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.activated",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardId": 555
}
}card.created
Sent when a card is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.created",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardId": 555,
"cardNumber": "****-****-****-4242",
"lastFour": "4242",
"status": "active",
"currency": "EUR"
}
}card.deleted
Sent when a card is deleted or cancelled.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.deleted",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardId": 555,
"previousStatus": "ACTIVE",
"newStatus": "CANCELLED"
}
}card.shipped
Sent when a physical card is shipped.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.shipped",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardId": 555,
"trackingNumber": "TRACK123",
"shippingCarrier": "DHL",
"shippedAt": "2026-04-28T10:15:30Z"
}
}card.state_updated
Sent when a Banking card state changes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.state_updated",
"domain": "card",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"cardId": 555,
"externalCardId": "card_ext_123",
"userId": 12345,
"previousState": "ACTIVE",
"currentState": "SUSPENDED",
"status": "blocked"
}
}card.topup
Sent when value is loaded onto a card.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.topup",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_topup",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28T10:15:30Z",
"merchantName": "Example Merchant",
"merchantMid": "merchant_mid_123",
"merchantCity": "London",
"merchantCountry": "GB",
"merchantState": "ENG",
"merchantZipcode": "EC1A1BB",
"mcc": "5812",
"mccCategory": "Restaurants",
"fee": 0.35,
"transactionCurrency": "GBP",
"transactionAmount": "36.25",
"clientTransactionId": "client_tx_123",
"cardTransactionId": "card_trace_123",
"relatedCardTransactionId": "card_trace_parent_123",
"remark": "Approved",
"detail": "Card transaction processed",
"type": "CONSUMPTION"
}
}card.transaction
Sent for card purchases, refunds, reversals, fee transactions, freezes, and unfreezes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.transaction",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_payment",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28T10:15:30Z",
"merchantName": "Example Merchant",
"merchantMid": "merchant_mid_123",
"merchantCity": "London",
"merchantCountry": "GB",
"merchantState": "ENG",
"merchantZipcode": "EC1A1BB",
"mcc": "5812",
"mccCategory": "Restaurants",
"fee": 0.35,
"transactionCurrency": "GBP",
"transactionAmount": "36.25",
"clientTransactionId": "client_tx_123",
"cardTransactionId": "card_trace_123",
"relatedCardTransactionId": "card_trace_parent_123",
"remark": "Approved",
"detail": "Card transaction processed",
"type": "CONSUMPTION"
}
}card.unload
Sent when value is unloaded from a card.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.unload",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": 1001,
"externalTransactionId": "card_tx_123",
"userId": 12345,
"accountId": 321,
"cardId": 555,
"externalCardId": "card_ext_123",
"transactionType": "card_unload",
"amount": 42.5,
"currency": "EUR",
"status": "completed",
"description": "CARD PAYMENT: Example Merchant",
"transactionDate": "2026-04-28T10:15:30Z",
"merchantName": "Example Merchant",
"merchantMid": "merchant_mid_123",
"merchantCity": "London",
"merchantCountry": "GB",
"merchantState": "ENG",
"merchantZipcode": "EC1A1BB",
"mcc": "5812",
"mccCategory": "Restaurants",
"fee": 0.35,
"transactionCurrency": "GBP",
"transactionAmount": "36.25",
"clientTransactionId": "client_tx_123",
"cardTransactionId": "card_trace_123",
"relatedCardTransactionId": "card_trace_parent_123",
"remark": "Approved",
"detail": "Card transaction processed",
"type": "CONSUMPTION"
}
}card.updated
Sent when a card status changes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "card.updated",
"domain": "card",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardId": 555,
"previousStatus": "PENDING",
"newStatus": "ACTIVE",
"lastFour": "4242"
}
}cardholder.approved
Sent when a cardholder is approved by the banking provider.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.approved",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"status": "Active"
}
}cardholder.created
Sent when a cardholder is created by the banking provider.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.created",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"status": "Active",
"cardholderId": "cardholder_123"
}
}cardholder.deleted
Sent when a cardholder is deleted by the banking provider.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.deleted",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"cardholderId": "cardholder_123"
}
}cardholder.status
Sent whenever a cardholder status update is processed.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "cardholder.status",
"domain": "cardholder",
"provider": "bank",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"status": "Active"
}
}digitalwallet.token_transition
Sent when a Banking digital wallet token changes state.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "digitalwallet.token_transition",
"domain": "digitalwallet",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "DigitalWalletTokenTransition",
"cardId": "card_ext_123",
"tokenId": "token_123",
"walletType": "APPLE_PAY",
"eventTime": "2026-04-28T10:15:30Z",
"previousState": "INACTIVE",
"currentState": "ACTIVE"
}
}fee.charged
Sent when a Crypto cards tier_fee_charged or card_issuance_fee customer transaction completes. Amount is the signed ledger amount; transactionId is the local reference and externalTransactionId is the provider transfer ID. Deduplicate retries by event id.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "fee.charged",
"domain": "transaction",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": "8178",
"externalTransactionId": "2100585559431249922",
"userId": "12345",
"transactionType": "fees",
"feeType": "tier_fee_charged",
"amount": -10,
"currency": "USD",
"status": "completed",
"description": "fees: tier_fee_charged",
"transactionTime": "2026-09-17T13:59:00Z"
}
}fee.created
Sent when a Banking fee is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "fee.created",
"domain": "fee",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "FeeCreated",
"feeId": "fee_123",
"eventTime": "2026-04-28T10:15:30Z",
"feeType": "payment_fee",
"amount": 2.5,
"currency": "GBP"
}
}kyc.information_request
Sent when Banking requests additional KYC documents.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.information_request",
"domain": "kyc",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "KycInformationRequest",
"correlationId": "corr_123",
"eventTime": "2026-04-28T10:15:30Z",
"requiredDocuments": [
"proof_of_address",
"source_of_funds"
]
}
}kyc.interlace_submission_failed
Sent when SumSub approval could not be submitted to Crypto cards.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.interlace_submission_failed",
"domain": "kyc",
"provider": "interlace",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"error": "Interlace submission failed",
"accountId": "acc_123",
"applicantId": "applicant_123"
}
}kyc.resubmission_required
Sent when Crypto cards rejects a Sumsub-approved verification and the user has to act: RESUBMIT_DOCUMENTS (the listed Sumsub doc sets were reset, re-open the verification flow), RESUBMIT_DATA (Hoppa resubmits corrected data) or CONTACT_SUPPORT.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.resubmission_required",
"domain": "kyc",
"provider": "interlace",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"applicantId": "applicant_123",
"reason": "Your identity document could not be accepted by the card issuer. Please upload a new, clear photo of your document.",
"providerReason": "Applicant uploaded a bad ID document.",
"requiredAction": "RESUBMIT_DOCUMENTS",
"docSets": [
"IDENTITY"
],
"attempts": 1,
"maxAttempts": 3,
"caseId": "cdd_123",
"type": "KYC"
}
}kyc.update
Sent when Banking updates a user's KYC review status.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.update",
"domain": "kyc",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "KycUpdate",
"correlationId": "corr_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "PENDING_DOCUMENTS",
"personId": "person_123",
"requiredAction": "upload_bank_statement",
"actionUrl": "https://app.equalsmoney.com/kyc/upload"
}
}kyc.verified
Sent when a Crypto cards or SumSub KYC review is processed. For the Crypto cards (card issuer) verdict provider is "bank", status is approved | rejected | action_required | pending and, for a rejection, reason / requiredAction / caseId are set.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "kyc.verified",
"domain": "kyc",
"provider": "sumsub",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"kycLevel": "hoppacard-stagging",
"status": "approved",
"type": "KYC",
"reason": null,
"requiredAction": null,
"caseId": "cdd_123"
}
}legal_entity.status
Sent when a business legal entity status changes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "legal_entity.status",
"domain": "kyc",
"provider": "bank",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"entityId": "le_123",
"status": "approved",
"type": "BUSINESS"
}
}mor.card.assigned
A merchant card's assignment changed. Durable, at-least-once delivery; deduplicate by event id and read current state after out-of-order delivery.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "mor.card.assigned",
"domain": "mor",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"companyId": 42,
"cardId": 123,
"assignedUserId": 456,
"previousAssignedUserId": null
}
}mor.card.load_request.updated
A load request was created, changed, completed or cancelled. This event does not itself move funds. Read current state by cardId. Deduplicate by event id.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "mor.card.load_request.updated",
"domain": "mor",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"companyId": 42,
"cardId": 123,
"requestedByUserId": 456,
"amount": 50,
"currency": "USD",
"status": "pending"
}
}mor.card.unassigned
A merchant card was unassigned. Ownership and funds stay with the merchant. Deduplicate by event id.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "mor.card.unassigned",
"domain": "mor",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"companyId": 42,
"cardId": 123,
"previousAssignedUserId": 456
}
}mor.kyb.updated
A current merchant-company KYB status was persisted through submission, provider webhook or polling. Deduplicate by event id.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "mor.kyb.updated",
"domain": "mor",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"companyId": 42,
"profileId": "profile_123",
"status": "PASSED",
"previousStatus": "PROCESSING"
}
}order.cancelled
Sent when a Banking FX order is cancelled.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.cancelled",
"domain": "order",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "OrderCancelled",
"orderId": "order_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "CANCELLED"
}
}order.completed
Sent when a Banking payment order completes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.completed",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"orderId": "order_123",
"accountId": "account_123"
}
}order.created
Sent when a Banking FX order is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "order.created",
"domain": "order",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "OrderCreated",
"orderId": "order_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "CREATED",
"buyCurrency": "EUR",
"sellCurrency": "GBP",
"buyAmount": 1000,
"sellAmount": 850,
"rate": 0.85,
"payments": [
{
"settlementDate": "2026-04-29T00:00:00Z",
"rate": 0.85,
"inverseRate": 1.1765,
"internalReference": "INT-123",
"externalReference": "EXT-123",
"from": {
"amount": 850,
"currency": "GBP"
},
"to": {
"amount": 1000,
"currency": "EUR"
},
"recipient": {
"id": "recipient_123",
"name": "Example Supplier Ltd"
}
}
]
}
}payment.completed
Sent after a payment completes successfully.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.completed",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"paymentId": 987,
"amount": 25.5,
"currency": "EUR"
}
}payment.created
Sent when a Banking payment is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.created",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentCreated",
"paymentId": "payment_123",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "PROCESSING",
"amount": 250,
"currency": "GBP",
"recipientId": "recipient_123",
"reference": "Invoice 123"
}
}payment.mandate.cancelled
Sent after a payment mandate is cancelled.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.mandate.cancelled",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"paymentMandateId": 456
}
}payment.mandate.created
Sent after a payment mandate is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.mandate.created",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"paymentMandateId": 456,
"maxAmount": 250,
"currency": "EUR",
"frequency": "monthly"
}
}payment.request.cancelled
Sent after a payment request is cancelled.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.cancelled",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"amount": 19.99,
"currency": "EUR"
}
}payment.request.confirmed.direct
Sent after a payment request is confirmed by direct payment.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.confirmed.direct",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"paymentMandateId": 456,
"amount": 19.99,
"currency": "EUR",
"transferId": "tr_123"
}
}payment.request.confirmed.with.exchange
Sent after a payment request is confirmed using crypto exchange.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.confirmed.with.exchange",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"paymentMandateId": 456,
"amount": 19.99,
"currency": "EUR",
"transferId": "tr_123"
}
}payment.request.created
Sent after a payment request is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.request.created",
"domain": "payment",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"paymentRequestId": 789,
"amount": 19.99,
"currency": "EUR"
}
}payment.returned
Sent when a Banking payment is returned.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payment.returned",
"domain": "payment",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentReturned",
"paymentId": "payment_123",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "RETURNED",
"returnReason": "Beneficiary account closed"
}
}paymentbatch.cancelled
Sent when a Banking payment batch is cancelled.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.cancelled",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCancelled",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "CANCELLED"
}
}paymentbatch.completed
Sent when a Banking payment batch completes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.completed",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCompleted",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "COMPLETED",
"successCount": 2,
"failureCount": 1
}
}paymentbatch.created
Sent when a Banking payment batch is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.created",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchCreated",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "CREATED",
"totalAmount": 1500,
"currency": "GBP",
"paymentCount": 3
}
}paymentbatch.processing
Sent when a Banking payment batch enters processing.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.processing",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchProcessing",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "PROCESSING"
}
}paymentbatch.validation_error
Sent when a Banking payment batch fails validation.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatch.validation_error",
"domain": "paymentbatch",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchValidationError",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"errors": [
"Recipient account number is invalid",
"Payment amount exceeds limit"
]
}
}paymentbatchorder.cancelled
Sent when a Banking payment batch FX order is cancelled.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.cancelled",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCancelled",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "CANCELLED"
}
}paymentbatchorder.completed
Sent when a Banking payment batch FX order completes.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.completed",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCompleted",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "COMPLETED"
}
}paymentbatchorder.created
Sent when a Banking payment batch FX order is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "paymentbatchorder.created",
"domain": "paymentbatchorder",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PaymentBatchOrderCreated",
"orderId": "order_123",
"batchId": "batch_123",
"eventTime": "2026-04-28T10:15:30Z",
"status": "CREATED"
}
}payout.payment
Sent when a business payout payment update is processed.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "payout.payment",
"domain": "payout",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": 1001,
"externalTransactionId": "ext_tx_123",
"userId": 12345,
"accountId": 321,
"amount": 100,
"currency": "EUR",
"status": "completed",
"transferId": "transfer_123",
"type": "PAYOUT.PAYMENT"
}
}person.created
Sent when a Banking associated person is created. `data.personId` is the canonical person identifier; `data.email` is the canonical person email when available. Provider aliases `data.id` and `data.primaryEmailAddress` may also be included. Nonblank canonical fields take precedence when both forms are supplied. The flat data object includes user/account context and the current `associatedPeople` list.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "person.created",
"domain": "person",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "PersonCreated",
"userId": 12345,
"companyId": 42,
"userEmail": "user@example.com",
"accountType": "personal",
"equalsAccountId": "acc_eq_123",
"equalsApplicationId": "app_eq_123",
"personId": "person_123",
"id": "person_123",
"eventTime": "2026-04-28T10:15:30Z",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com",
"primaryEmailAddress": "jane.doe@example.com",
"associatedPeople": [
{
"id": 456,
"externalId": "person_123",
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com",
"associationType": ""
}
]
}
}recipient.created
Sent when a Banking recipient is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "recipient.created",
"domain": "recipient",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "RecipientCreated",
"recipientId": "recipient_123",
"eventTime": "2026-04-28T10:15:30Z",
"name": "Example Supplier Ltd"
}
}recipient.deleted
Sent when a Banking recipient is deleted.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "recipient.deleted",
"domain": "recipient",
"provider": "equalsmoney",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"accountId": "acc_eq_123",
"messageId": "msg_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"webhookEventTypeName": "RecipientDeleted",
"recipientId": "recipient_123",
"eventTime": "2026-04-28T10:15:30Z"
}
}user.kyc.updated
Sent when a user's KYC status changes during verification submission or provider processing.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "user.kyc.updated",
"domain": "user",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"status": "pending"
}
}user.registered
Sent after a user is created.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "user.registered",
"domain": "user",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"userId": 12345,
"email": "user@example.com"
}
}wallet.refund
Sent when a crypto refund is processed.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.refund",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": "1001",
"userId": "12345",
"amount": "10.00",
"currency": "USDT",
"chain": "TRON",
"address": "TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"status": "completed",
"transferId": "transfer_123",
"transactionHash": "0x1234567890abcdef",
"provider": "hoppacard"
}
}wallet.topped_up
Sent when a wallet, budget, or card funding transaction credits value.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.topped_up",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": "1001",
"walletId": "wallet_123",
"userId": "12345",
"amount": "100.00",
"currency": "EUR",
"status": "completed",
"provider": "hoppacard"
}
}wallet.withdrawal
Sent when a wallet withdrawal or debit transaction is processed.
Example request body
{
"id": "evt_01HX7B7MZ4Q4Y9R1H2J3K4L5M6",
"type": "wallet.withdrawal",
"domain": "wallet",
"provider": "hoppacard",
"timestamp": "2026-04-28T10:15:30Z",
"data": {
"transactionId": "1002",
"walletId": "wallet_123",
"userId": "12345",
"amount": "50.00",
"currency": "EUR",
"status": "completed",
"provider": "hoppacard"
}
}