Wallgent
Guides

Webhook Event Catalog

Complete reference for all 57 webhook events with payload schemas.

Overview

Webhooks notify your application when events occur in Wallgent. Register a webhook URL and subscribe to the events you care about.

Every webhook payload includes:

FieldTypeDescription
eventstringEvent type
timestampstringISO 8601 timestamp
organizationIdstringYour organization ID
dataobjectEvent-specific payload

Verifying webhook signatures

Every webhook delivery includes a Wallgent-Signature header with an HMAC-SHA256 signature. Always verify this in production.

Using the SDK:

import { verifyWebhookSignature } from '@wallgent/sdk'
import express from 'express'

const app = express()

// Express example
app.post('/webhooks', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.headers['wallgent-signature'] as string
  const secret = process.env.WALLGENT_WEBHOOK_SECRET!

  const isValid = verifyWebhookSignature(req.body, signature, secret)
  if (!isValid) {
    return res.status(401).json({ error: 'Invalid signature' })
  }

  const event = JSON.parse(req.body.toString())
  // Process event...
  res.json({ received: true })
})

The req.body must be the raw request body bytes, not parsed JSON. Use express.raw() or the equivalent for your framework.

Header format: Wallgent-Signature: sha256=<hex-digest>

The SDK computes HMAC-SHA256(secret, rawBody) and compares it to the hex digest in the header using a constant-time comparison to prevent timing attacks. The function returns true if the signature is valid and false otherwise.

Getting your webhook secret: Find it in the dashboard under Settings → Webhooks, or retrieve it from the webhook object returned when you create a webhook via POST /v1/webhooks. The secret is only shown once — if you lose it, delete the webhook and create a new one.


Payment Events

payment.completed

Sent when a wallet-to-wallet payment is posted successfully.

FieldTypeDescription
data.transactionIdstringTransaction ID
data.fromstringSource wallet ID
data.tostringDestination wallet ID
data.amountstringPayment amount
data.feestringFee charged
data.statusstringPOSTED

payment.failed

Sent when a payment attempt fails.

FieldTypeDescription
data.transactionIdstringTransaction ID (if created)
data.fromstringSource wallet ID
data.tostringDestination wallet ID
data.amountstringAttempted amount
data.reasonstringFailure reason

payment.pending

Sent when a payment is created but awaiting approval.

FieldTypeDescription
data.transactionIdstringTransaction ID
data.fromstringSource wallet ID
data.tostringDestination wallet ID
data.amountstringPayment amount

payment.reversed

Sent when a payment is reversed.

FieldTypeDescription
data.originalTransactionIdstringOriginal transaction
data.reversalTransactionIdstringReversal transaction
data.amountstringReversed amount
data.statusstringREVERSED

Wallet Events

wallet.created

FieldTypeDescription
data.walletIdstringNew wallet ID
data.namestringWallet name
data.environmentstringSANDBOX or PRODUCTION

wallet.funded

FieldTypeDescription
data.walletIdstringWallet ID
data.transactionIdstringFunding transaction
data.amountstringAmount funded
data.newBalancestringUpdated balance

wallet.frozen

FieldTypeDescription
data.walletIdstringWallet ID
data.namestringWallet name

wallet.unfrozen

FieldTypeDescription
data.walletIdstringWallet ID
data.namestringWallet name

wallet.closed

FieldTypeDescription
data.walletIdstringWallet ID
data.namestringWallet name

wallet.funds_pending

Funds deposited but held for clearing.

FieldTypeDescription
data.walletIdstringWallet ID
data.amountstringHeld amount
data.holdUntilstringHold release date
data.invoiceIdstringRelated invoice

wallet.funds_available

Held funds released and available for use.

FieldTypeDescription
data.walletIdstringWallet ID
data.amountstringReleased amount
data.holdIdstringHold ID

wallet.balance_negative

Wallet balance went negative (e.g., after a clawback).

FieldTypeDescription
data.walletIdstringWallet ID
data.balancestringCurrent (negative) balance
data.clawbackTransactionIdstringClawback transaction

Policy Events

policy.denied

Sent when a policy blocks a payment.

FieldTypeDescription
data.policyIdstringPolicy that blocked
data.walletIdstringSource wallet
data.amountstringAttempted amount
data.reasonstringDenial reason

policy.created

FieldTypeDescription
data.policyIdstringNew policy ID
data.walletIdstringWallet ID
data.namestringPolicy name

policy.updated

FieldTypeDescription
data.policyIdstringPolicy ID
data.walletIdstringWallet ID
data.changesobjectChanged fields

Approval Events

approval.requested

Sent when a payment requires human approval.

FieldTypeDescription
data.approvalIdstringApproval ID
data.walletIdstringSource wallet
data.amountstringPayment amount
data.policyIdstringPolicy requiring approval

approval.approved

FieldTypeDescription
data.approvalIdstringApproval ID
data.transactionIdstringResulting transaction
data.walletIdstringSource wallet
data.amountstringPayment amount

approval.rejected

FieldTypeDescription
data.approvalIdstringApproval ID
data.walletIdstringSource wallet
data.amountstringPayment amount
data.reasonstringRejection reason

approval.expired

FieldTypeDescription
data.approvalIdstringApproval ID
data.walletIdstringSource wallet
data.amountstringPayment amount

Limit Events

limit.approaching

Sent when spending approaches a policy limit (e.g., 80% of daily limit).

FieldTypeDescription
data.walletIdstringWallet ID
data.policyIdstringPolicy ID
data.limitTypestringLimit type
data.currentUsagestringCurrent usage
data.limitstringConfigured limit
data.percentagenumberUsage percentage

limit.exceeded

FieldTypeDescription
data.walletIdstringWallet ID
data.policyIdstringPolicy ID
data.limitTypestringLimit type
data.currentUsagestringCurrent usage
data.limitstringConfigured limit

Deposit & Withdrawal Events

deposit.initiated

FieldTypeDescription
data.transferIdstringTransfer ID
data.walletIdstringDestination wallet
data.amountstringDeposit amount
data.currencystringCurrency
data.railstringSettlement rail
data.methodstringPayment method

deposit.completed

FieldTypeDescription
data.transferIdstringTransfer ID
data.walletIdstringDestination wallet
data.amountstringDeposit amount
data.feestringFee charged
data.currencystringCurrency
data.railstringSettlement rail

deposit.failed

FieldTypeDescription
data.transferIdstringTransfer ID
data.walletIdstringDestination wallet
data.amountstringAttempted amount
data.currencystringCurrency
data.reasonstringFailure reason

withdrawal.initiated

FieldTypeDescription
data.transferIdstringTransfer ID
data.walletIdstringSource wallet
data.amountstringWithdrawal amount
data.currencystringCurrency
data.railstringSettlement rail
data.methodstringPayment method

withdrawal.completed

FieldTypeDescription
data.transferIdstringTransfer ID
data.walletIdstringSource wallet
data.amountstringWithdrawal amount
data.feestringFee charged
data.currencystringCurrency
data.railstringSettlement rail

withdrawal.failed

FieldTypeDescription
data.transferIdstringTransfer ID
data.walletIdstringSource wallet
data.amountstringAttempted amount
data.currencystringCurrency
data.reasonstringFailure reason

Card Events

card.created

FieldTypeDescription
data.cardIdstringCard ID
data.walletIdstringLinked wallet
data.typestringPERSISTENT or SINGLE_USE
data.last4stringLast 4 digits

card.updated

FieldTypeDescription
data.cardIdstringCard ID
data.walletIdstringLinked wallet
data.statusstringNew status

card.cancelled

FieldTypeDescription
data.cardIdstringCard ID
data.walletIdstringLinked wallet

card.authorization.approved

FieldTypeDescription
data.authorizationIdstringAuthorization ID
data.cardIdstringCard ID
data.walletIdstringLinked wallet
data.amountstringAuthorization amount
data.merchantNamestringMerchant name
data.mccstringMerchant category code

card.authorization.declined

FieldTypeDescription
data.authorizationIdstringAuthorization ID
data.cardIdstringCard ID
data.walletIdstringLinked wallet
data.amountstringAttempted amount
data.merchantNamestringMerchant name
data.mccstringMerchant category code
data.reasonstringDecline reason

card.authorization.captured

FieldTypeDescription
data.authorizationIdstringAuthorization ID
data.cardIdstringCard ID
data.walletIdstringLinked wallet
data.amountstringCaptured amount

card.authorization.reversed

FieldTypeDescription
data.authorizationIdstringAuthorization ID
data.cardIdstringCard ID
data.walletIdstringLinked wallet
data.amountstringReversed amount

card.refund.created

FieldTypeDescription
data.cardIdstringCard ID
data.walletIdstringLinked wallet
data.amountstringRefund amount

payment_link.created

FieldTypeDescription
data.paymentLinkIdstringPayment link ID
data.walletIdstringFunding wallet
data.amountstringLink amount
data.slugstringURL slug

payment_link.claimed

FieldTypeDescription
data.paymentLinkIdstringPayment link ID
data.walletIdstringFunding wallet
data.amountstringClaimed amount
data.claimMethodstringClaim method used

payment_link.settled

FieldTypeDescription
data.paymentLinkIdstringPayment link ID
data.walletIdstringFunding wallet
data.amountstringSettled amount

payment_link.expired

FieldTypeDescription
data.paymentLinkIdstringPayment link ID
data.walletIdstringFunding wallet
data.amountstringExpired amount

payment_link.cancelled

FieldTypeDescription
data.paymentLinkIdstringPayment link ID
data.walletIdstringFunding wallet
data.amountstringCancelled amount

Invoice Events

invoice.created

FieldTypeDescription
data.invoiceIdstringInvoice ID
data.walletIdstringReceiving wallet
data.customerIdstringCustomer ID
data.subtotalstringInvoice subtotal
data.currencystringCurrency

invoice.finalized

FieldTypeDescription
data.invoiceIdstringInvoice ID
data.walletIdstringReceiving wallet
data.customerIdstringCustomer ID
data.subtotalstringInvoice subtotal
data.currencystringCurrency
data.slugstringPayment slug

invoice.paid

FieldTypeDescription
data.invoiceIdstringInvoice ID
data.walletIdstringReceiving wallet
data.customerIdstringCustomer ID
data.subtotalstringInvoice subtotal
data.netAmountstringNet amount after fees
data.paymentMethodstringMethod used
data.transactionIdstringSettlement transaction

invoice.payment_failed

FieldTypeDescription
data.invoiceIdstringInvoice ID
data.walletIdstringReceiving wallet
data.customerIdstringCustomer ID
data.subtotalstringInvoice subtotal
data.reasonstringFailure reason

invoice.voided

FieldTypeDescription
data.invoiceIdstringInvoice ID
data.walletIdstringReceiving wallet
data.customerIdstringCustomer ID

invoice.refunded

FieldTypeDescription
data.invoiceIdstringInvoice ID
data.walletIdstringReceiving wallet
data.customerIdstringCustomer ID
data.refundAmountstringRefund amount
data.refundTransactionIdstringRefund transaction

invoice.uncollectible

FieldTypeDescription
data.invoiceIdstringInvoice ID
data.walletIdstringReceiving wallet
data.customerIdstringCustomer ID
data.subtotalstringInvoice subtotal
data.retryCountnumberFailed retry attempts

invoice.usdc_unmatched

USDC payment received that couldn't be matched to an invoice.

FieldTypeDescription
data.circleWalletIdstringCircle wallet ID
data.amountstringReceived amount
data.txHashstringBlockchain transaction hash
data.depositAddressstringDeposit address

Customer Events

customer.created

FieldTypeDescription
data.customerIdstringCustomer ID
data.emailstringCustomer email
data.namestringCustomer name

customer.updated

FieldTypeDescription
data.customerIdstringCustomer ID
data.changesobjectChanged fields

customer.payment_method.saved

FieldTypeDescription
data.customerIdstringCustomer ID
data.paymentMethodIdstringPayment method ID
data.typestringMethod type
data.last4stringLast 4 digits

customer.payment_method.updated

FieldTypeDescription
data.customerIdstringCustomer ID
data.paymentMethodIdstringPayment method ID
data.typestringMethod type
data.last4stringLast 4 digits

customer.payment_method.removed

FieldTypeDescription
data.customerIdstringCustomer ID
data.paymentMethodIdstringPayment method ID

API Key Events

api_key.expiring_soon

Sent 7 days before an API key expires.

FieldTypeDescription
data.apiKeyIdstringAPI key ID
data.namestringKey name
data.expiresAtstringExpiry date
data.daysUntilExpirynumberDays remaining

api_key.auto_revoked

Sent when an expired API key is automatically revoked.

FieldTypeDescription
data.apiKeyIdstringAPI key ID
data.namestringKey name
data.expiredAtstringExpiry date

On this page