Guides
Webhook Event Catalog Complete reference for all 57 webhook events with payload schemas.
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:
Field Type Description eventstringEvent type timestampstringISO 8601 timestamp organizationIdstringYour organization ID dataobjectEvent-specific payload
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.
Sent when a wallet-to-wallet payment is posted successfully.
Field Type Description data.transactionIdstringTransaction ID data.fromstringSource wallet ID data.tostringDestination wallet ID data.amountstringPayment amount data.feestringFee charged data.statusstringPOSTED
Sent when a payment attempt fails.
Field Type Description data.transactionIdstringTransaction ID (if created) data.fromstringSource wallet ID data.tostringDestination wallet ID data.amountstringAttempted amount data.reasonstringFailure reason
Sent when a payment is created but awaiting approval.
Field Type Description data.transactionIdstringTransaction ID data.fromstringSource wallet ID data.tostringDestination wallet ID data.amountstringPayment amount
Sent when a payment is reversed.
Field Type Description data.originalTransactionIdstringOriginal transaction data.reversalTransactionIdstringReversal transaction data.amountstringReversed amount data.statusstringREVERSED
Field Type Description data.walletIdstringNew wallet ID data.namestringWallet name data.environmentstringSANDBOX or PRODUCTION
Field Type Description data.walletIdstringWallet ID data.transactionIdstringFunding transaction data.amountstringAmount funded data.newBalancestringUpdated balance
Field Type Description data.walletIdstringWallet ID data.namestringWallet name
Field Type Description data.walletIdstringWallet ID data.namestringWallet name
Field Type Description data.walletIdstringWallet ID data.namestringWallet name
Funds deposited but held for clearing.
Field Type Description data.walletIdstringWallet ID data.amountstringHeld amount data.holdUntilstringHold release date data.invoiceIdstringRelated invoice
Held funds released and available for use.
Field Type Description data.walletIdstringWallet ID data.amountstringReleased amount data.holdIdstringHold ID
Wallet balance went negative (e.g., after a clawback).
Field Type Description data.walletIdstringWallet ID data.balancestringCurrent (negative) balance data.clawbackTransactionIdstringClawback transaction
Sent when a policy blocks a payment.
Field Type Description data.policyIdstringPolicy that blocked data.walletIdstringSource wallet data.amountstringAttempted amount data.reasonstringDenial reason
Field Type Description data.policyIdstringNew policy ID data.walletIdstringWallet ID data.namestringPolicy name
Field Type Description data.policyIdstringPolicy ID data.walletIdstringWallet ID data.changesobjectChanged fields
Sent when a payment requires human approval.
Field Type Description data.approvalIdstringApproval ID data.walletIdstringSource wallet data.amountstringPayment amount data.policyIdstringPolicy requiring approval
Field Type Description data.approvalIdstringApproval ID data.transactionIdstringResulting transaction data.walletIdstringSource wallet data.amountstringPayment amount
Field Type Description data.approvalIdstringApproval ID data.walletIdstringSource wallet data.amountstringPayment amount data.reasonstringRejection reason
Field Type Description data.approvalIdstringApproval ID data.walletIdstringSource wallet data.amountstringPayment amount
Sent when spending approaches a policy limit (e.g., 80% of daily limit).
Field Type Description data.walletIdstringWallet ID data.policyIdstringPolicy ID data.limitTypestringLimit type data.currentUsagestringCurrent usage data.limitstringConfigured limit data.percentagenumberUsage percentage
Field Type Description data.walletIdstringWallet ID data.policyIdstringPolicy ID data.limitTypestringLimit type data.currentUsagestringCurrent usage data.limitstringConfigured limit
Field Type Description data.transferIdstringTransfer ID data.walletIdstringDestination wallet data.amountstringDeposit amount data.currencystringCurrency data.railstringSettlement rail data.methodstringPayment method
Field Type Description data.transferIdstringTransfer ID data.walletIdstringDestination wallet data.amountstringDeposit amount data.feestringFee charged data.currencystringCurrency data.railstringSettlement rail
Field Type Description data.transferIdstringTransfer ID data.walletIdstringDestination wallet data.amountstringAttempted amount data.currencystringCurrency data.reasonstringFailure reason
Field Type Description data.transferIdstringTransfer ID data.walletIdstringSource wallet data.amountstringWithdrawal amount data.currencystringCurrency data.railstringSettlement rail data.methodstringPayment method
Field Type Description data.transferIdstringTransfer ID data.walletIdstringSource wallet data.amountstringWithdrawal amount data.feestringFee charged data.currencystringCurrency data.railstringSettlement rail
Field Type Description data.transferIdstringTransfer ID data.walletIdstringSource wallet data.amountstringAttempted amount data.currencystringCurrency data.reasonstringFailure reason
Field Type Description data.cardIdstringCard ID data.walletIdstringLinked wallet data.typestringPERSISTENT or SINGLE_USEdata.last4stringLast 4 digits
Field Type Description data.cardIdstringCard ID data.walletIdstringLinked wallet data.statusstringNew status
Field Type Description data.cardIdstringCard ID data.walletIdstringLinked wallet
Field Type Description data.authorizationIdstringAuthorization ID data.cardIdstringCard ID data.walletIdstringLinked wallet data.amountstringAuthorization amount data.merchantNamestringMerchant name data.mccstringMerchant category code
Field Type Description data.authorizationIdstringAuthorization ID data.cardIdstringCard ID data.walletIdstringLinked wallet data.amountstringAttempted amount data.merchantNamestringMerchant name data.mccstringMerchant category code data.reasonstringDecline reason
Field Type Description data.authorizationIdstringAuthorization ID data.cardIdstringCard ID data.walletIdstringLinked wallet data.amountstringCaptured amount
Field Type Description data.authorizationIdstringAuthorization ID data.cardIdstringCard ID data.walletIdstringLinked wallet data.amountstringReversed amount
Field Type Description data.cardIdstringCard ID data.walletIdstringLinked wallet data.amountstringRefund amount
Field Type Description data.paymentLinkIdstringPayment link ID data.walletIdstringFunding wallet data.amountstringLink amount data.slugstringURL slug
Field Type Description data.paymentLinkIdstringPayment link ID data.walletIdstringFunding wallet data.amountstringClaimed amount data.claimMethodstringClaim method used
Field Type Description data.paymentLinkIdstringPayment link ID data.walletIdstringFunding wallet data.amountstringSettled amount
Field Type Description data.paymentLinkIdstringPayment link ID data.walletIdstringFunding wallet data.amountstringExpired amount
Field Type Description data.paymentLinkIdstringPayment link ID data.walletIdstringFunding wallet data.amountstringCancelled amount
Field Type Description data.invoiceIdstringInvoice ID data.walletIdstringReceiving wallet data.customerIdstringCustomer ID data.subtotalstringInvoice subtotal data.currencystringCurrency
Field Type Description data.invoiceIdstringInvoice ID data.walletIdstringReceiving wallet data.customerIdstringCustomer ID data.subtotalstringInvoice subtotal data.currencystringCurrency data.slugstringPayment slug
Field Type Description data.invoiceIdstringInvoice ID data.walletIdstringReceiving wallet data.customerIdstringCustomer ID data.subtotalstringInvoice subtotal data.netAmountstringNet amount after fees data.paymentMethodstringMethod used data.transactionIdstringSettlement transaction
Field Type Description data.invoiceIdstringInvoice ID data.walletIdstringReceiving wallet data.customerIdstringCustomer ID data.subtotalstringInvoice subtotal data.reasonstringFailure reason
Field Type Description data.invoiceIdstringInvoice ID data.walletIdstringReceiving wallet data.customerIdstringCustomer ID
Field Type Description data.invoiceIdstringInvoice ID data.walletIdstringReceiving wallet data.customerIdstringCustomer ID data.refundAmountstringRefund amount data.refundTransactionIdstringRefund transaction
Field Type Description data.invoiceIdstringInvoice ID data.walletIdstringReceiving wallet data.customerIdstringCustomer ID data.subtotalstringInvoice subtotal data.retryCountnumberFailed retry attempts
USDC payment received that couldn't be matched to an invoice.
Field Type Description data.circleWalletIdstringCircle wallet ID data.amountstringReceived amount data.txHashstringBlockchain transaction hash data.depositAddressstringDeposit address
Field Type Description data.customerIdstringCustomer ID data.emailstringCustomer email data.namestringCustomer name
Field Type Description data.customerIdstringCustomer ID data.changesobjectChanged fields
Field Type Description data.customerIdstringCustomer ID data.paymentMethodIdstringPayment method ID data.typestringMethod type data.last4stringLast 4 digits
Field Type Description data.customerIdstringCustomer ID data.paymentMethodIdstringPayment method ID data.typestringMethod type data.last4stringLast 4 digits
Field Type Description data.customerIdstringCustomer ID data.paymentMethodIdstringPayment method ID
Sent 7 days before an API key expires.
Field Type Description data.apiKeyIdstringAPI key ID data.namestringKey name data.expiresAtstringExpiry date data.daysUntilExpirynumberDays remaining
Sent when an expired API key is automatically revoked.
Field Type Description data.apiKeyIdstringAPI key ID data.namestringKey name data.expiredAtstringExpiry date