Webhooks
FinVeil fires a signed webhook every time something meaningful happens on your account — a payment settles, a disbursement lands, a receipt mints. Subscribe to what you care about, verify the signature, and react in real time.
payment.succeededA collection succeeded. Final amount + provider are confirmed.
payment.failedA collection attempt failed. Includes the provider-specific failure reason.
payment.refundedA refund settled back to the original payment method.
disbursement.settledA disbursement landed in the recipient bank account.
disbursement.failedA disbursement was rejected (invalid account, bank timeout, etc.).
receipt.mintedA cryptographic receipt was anchored to the public ledger and is ready to verify.
reconciliation.discrepancy_foundA reconciliation run detected a mismatch between provider and bank settlements.
conditional_payout.releasedA held conditional payout met its release condition and funds were sent.
payment_link.paidA payment link was paid. Includes link id, payment id, and reference.
Example payload
All events are POSTed as JSON with an X-FinVeil-Signature header. Verify the HMAC before trusting the payload.
POST /your-webhook-endpoint
Content-Type: application/json
X-FinVeil-Signature: sha256=<hmac>
{
"event": "payment.succeeded",
"timestamp": "2026-04-18T08:41:22.531Z",
"data": {
"id": "pay_01HRWXC2YQ8K...",
"amount": 125000,
"currency": "ZAR",
"reference": "ORDER-4821",
"provider_used": "paystack",
"receipt_id": "rct_0f3a9b2c7e..."
}
}