Virtual Card Webhooks
Webhooks are triggered automatically when events occur on a customerβs virtual card. These allow you to track card lifecycle events such as creation, top-ups, withdrawals, transactions, KYC updates, and more.
π¦ Endpoint Setup
Register your webhook URL in the MyBundlePay Dashboard β Developers β Webhooks.
Ensure your server can receive POST requests with Content-Type: application/json.
Every webhook payload includes an event field and a data object containing event-specific details.
Webhook Events
Virtual Card Creation
β virtualcard.created.success β Fired when a virtual card is successfully created.
{
"event": "virtualcard.created.success",
"data": {
"id": "c789e3cf-31cd-4680-b820-bca71012f5dc",
"status": "active",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"reference": "CRD_CREATE_b8fed75a2d1e730c",
"createdStatus": "success"
}
}
β virtualcard.created.failed β Fired when a virtual card creation fails.
{
"event": "virtualcard.created.failed",
"data": {
"id": "908d33f4-e272-4971-8a52-6d06106cdd7e",
"reason": "Something went wrong. Please try again.",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"reference": "CRD_CREATE_fbd95677f8da1ce1"
}
}
Virtual Card Top-up
β virtualcard.topup.success β Fired when a top-up is successful.
{
"event": "virtualcard.topup.success",
"data": {
"id": "4850584a-bd83-47d5-850c-0026c1ac53f5",
"amount": 300,
"cardId": "84fa6bce-be2c-4d79-9e6a-b111aff0b226",
"status": "success",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"narrative": "Top-up card",
"reference": "4981db52eacb1dd1"
}
}
β virtualcard.topup.failed β Fired when a top-up fails.
{
"event": "virtualcard.topup.failed",
"data": {
"id": "662337aa-fcb1-4953-8f90-7df9e271248f",
"amount": 969,
"cardId": "fd8156aa-af32-4589-b842-0c5be28bbff8",
"status": "failed",
"companyId": "b4e0ea36-bdb6-4c12-8931-b73f85ab361b",
"narrative": "Top-up card",
"reference": "B7NX9GQOFPZQ"
}
}
Virtual Card Withdrawal
β virtualcard.withdrawal.success β Fired when a withdrawal succeeds.
{
"event": "virtualcard.withdrawal.success",
"data": {
"status": "success",
"cardId": "692bbb4c-e5af-4ac1-ab9b-dc30c532aa11",
"id": "5272ff4d-6f8d-47e2-b430-4f75654acf14",
"companyId": "45422f21-9a0e-479e-9e10-615556448a78",
"amount": 600,
"reference": "1445ed09a724",
"narrative": "Withdraw from card",
"isTerminated": false
}
}
β virtualcard.withdrawal.failed β Fired when a withdrawal fails.
{
"event": "virtualcard.withdrawal.failed",
"data": {
"id": "a6c99bef-37a8-4f74-a5d1-dd39c194aca3",
"amount": 500,
"cardId": "fa2c4efe-d683-452b-9e3b-acce99415291",
"status": "failed",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"narrative": "Withdraw from card",
"reference": "71b8e04de49c4f5e",
"isTerminated": false
}
}
Virtual Card Transactions
π³ virtualcard.transaction.debit β Fired for debit transactions.
{
"event": "virtualcard.transaction.debit",
"data": {
"id": "68e5dbbe-f8ea-4569-b5bf-aa059c79ad05",
"amount": 400,
"cardId": "5c263ea6-8c1c-0h0l-9bfa-2d5842f068ca",
"reason": null,
"status": "success",
"companyId": "c16a147e-119f-0h0l-88c0-b14d908f9727",
"narrative": "aliexpress",
"reference": "f8d7664ed609"
}
}
β»οΈ virtualcard.transaction.reversed β Fired when a transaction is reversed.
{
"event": "virtualcard.transaction.reversed",
"data": {
"id": "b685a7f7-6758-44c3-8097-67893d02d1ee",
"amount": 100,
"cardId": "17543a28-5916-48a2-ba94-a41887cea6ca",
"reason": null,
"status": "success",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"narrative": "PAYPAL",
"reference": "ea43c6bbb998"
}
}
π« virtualcard.transaction.declined β Fired when a transaction is declined.
{
"event": "virtualcard.transaction.declined",
"data": {
"id": "5104a031-4fe5-4ff5-812d-5ba0b1658436",
"amount": 330,
"cardId": "736545b8-2eda-48cf-8eff-03f1dfb8514e",
"reason": "No sufficient funds",
"status": "failed",
"companyId": "b4e0ea36-bdb6-4c12-8931-b73f85ab361b",
"narrative": "GOOGLE*ADS2260628213",
"reference": "e3d7b37de816"
}
}
π§ virtualcard.transaction.declined.frozen β Fired when a card is frozen for suspected fraud.
{
"event": "virtualcard.transaction.declined.frozen",
"data": {
"cardId": "b6c010000-2e00-0000-9e00-e7ab0ae000db",
"reason": "Suspected Fraud",
"companyId": "b6c010000-2e00-0000-9e00-e7ab0ae000db",
"reference": "6f42d570ghjj"
}
}
β virtualcard.transaction.declined.terminated β Fired when card is terminated due to repeated failed transactions.
{
"event": "virtualcard.transaction.declined.terminated",
"data": {
"cardId": "7ee8a383-c8bc-4b6c-8cb6-f107c0cadac1",
"reason": "Insufficient Funds",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"reference": "4921bba1a6a7edf5",
"balanceBeforeTermination": 90
}
}
π΅ virtualcard.transaction.authorization.failed β Fired when authorization fails (e.g., insufficient funds).
{
"event": "virtualcard.transaction.authorization.failed",
"data": {
"id": "79454f05-6357-4c82-9f78-6fe7cf983de2",
"amount": 20,
"cardId": "225762c9-3468-404b-bcc0-4d7d6f2d7312",
"reason": "insufficient funds",
"status": "success",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"reference": "84fa1cac8ba1"
}
}
π virtualcard.transaction.crossborder β Fired for cross-border charge on USD wallet.
{
"event": "virtualcard.transaction.crossborder",
"data": {
"amount": 103,
"cardId": "d8116cff-7c66-0000-90c9-31c6daea000",
"status": "success",
"companyId": "c16a147e-119f-0000-88c0-b14d908f9727",
"narrative": "METAPAY SN6D",
"chargedAmount": 50
}
}
Virtual Card KYC
β virtualcard.user.kyc.success β Fired when user KYC is approved.
{
"event": "virtualcard.user.kyc.success",
"data": {
"id": "4efdf2e1-55b1-432d-b343-06adf1b51ce1",
"companyId": "45422f21-9a0e-479e-9e10-615556448a78",
"kycPassed": true,
"customerId": "cc8bfc56-f612-4132-9228-29952d0a5036",
"customerEmail": "khamani.brennus@meshfor.com"
}
}
β virtualcard.user.kyc.failed β Fired when KYC is rejected.
{
"event": "virtualcard.user.kyc.failed",
"data": {
"id": "11d5c966-60f2-4a11-910f-e51d914b9a0b",
"reason": "Government ID provider currently down. Please try again later.",
"companyId": "246d1cfc-9eeb-4ddd-95d1-5887fe32d941",
"kycPassed": false,
"customerId": "aaf7a252-81e3-4e8a-ae94-9210a3ea313d",
"customerEmail": "bodeseqo@lyft.live"
}
}
Virtual Card Termination Refund
{
"event": "virtualcard.transaction.terminated.refund",
"data": {
"id": "a25abd5f-4e32-4d7f-b19d-038fc0c0175c",
"date": "2024-08-04T20:51:57.290Z",
"amount": "173",
"cardId": "19a03284-db8b-42c3-a398-97696e78ecea",
"reason": null,
"status": "success",
"companyId": "c16a147e-119f-4de4-88c0-b14d908f9727",
"narrative": "Balance refund of 1.73 on terminated card",
"reference": "1aceac348e95"
}
}