Card events
Card events notify you when transactions occur on issued cards and when funds are withdrawn from cards.
When card events are sent
Gravv sends card events when:
- The card is funded.
- A card transaction is authorized and being processed.
- The transaction completes successfully.
- The transaction fails due to payment issues or validation errors.
- Funds are withdrawn from a card.
Card event types
The following event types are available for cards:
| Event type | Description |
|---|---|
| cards.application.update | card application status changed |
| cards.status.update | card status updated |
| cards.transaction.funding | funds added to card |
| cards.transaction.payment | card transaction completed or failed |
| cards.transaction.withdraw | funds withdrawn from card |
Card event structure
The event_data object for card events contains the following fields:
| Field | Type | Description |
|---|---|---|
| card | object | details about the card used for the transaction |
| transaction | object | details about the transaction |
The structure of the transaction object varies depending on the event type.
Application events (cards.application.update)
For application events, the event_data object contains an application object with details about the card application status change.
The application object contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | unique identifier for the application |
| status | string | current status of the card application |
| customer_id | string | ID of the customer who owns the application |
The status field can have the following values:
| Status | Description |
|---|---|
| pending | application is under review |
| approved | application is approved, and you can now create the card |
| needs_information | additional information is required to process the application |
| needs_verification | selfie verification is required to complete intermediate KYC |
| manual_review | application requires manual review by the compliance team |
| denied | application rejected |
| locked | application locked due to security concerns |
| canceled | application canceled |
The following is a sample payload for an application event:
{
"event_id": "2e6c19a1-6a33-47e0-a74b-d9d7bc32e2fe",
"tenant_id": "6acaccaf-d9f2-4ca2-a38b-276012b320fa",
"timestamp": "2026-01-29T10:54:19.932644757Z",
"event_data": {
"application": {
"id": "da977df0-2c08-4b5d-9399-089d4285e9e7",
"status": "approved",
"customer_id": "33485344-9424-43a2-9724-fdb0edfd7c04"
}
},
"event_type": "cards.application.update",
"event_category": "cards",
"event_group_id": "da977df0-2c08-4b5d-9399-089d4285e9e7"
}
Status update events (cards.status.update)
For status update events, the event_data object contains a card object with details about the card status change.
The card object contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | unique identifier for the card |
| last4 | string | last 4 digits of the card number |
| expiry | string | card expiration date |
| status | string | current status of the card |
| network | string | card network: visa or mastercard |
| customer_id | string | ID of the customer who owns the card |
| name_on_card | string | name printed on the card |
The status field can have the following values:
| Status | Description |
|---|---|
| active | card is active, and you can use it for transactions |
| freeze | card is temporarily frozen, and you can't use it until it's reactivated |
| blocked | card is permanently blocked, and you can't reactivate it |
The following is a sample payload for a status update event:
{
"event_id": "71deb6c7-19a7-4c74-b73c-be8e36467ba2",
"tenant_id": "6acaccaf-d9f2-4ca2-a38b-276012b320fa",
"timestamp": "2026-02-02T01:09:08.278677733Z",
"event_data": {
"card": {
"id": "da977df0-2c08-4b5d-9399-089d4285e9e7",
"last4": "7600",
"expiry": "1/2032",
"status": "active",
"network": "visa",
"customer_id": "45902344-9424-43a2-9724-fdb0edfd7c04",
"name_on_card": "Ndifreke Jacob"
}
},
"event_type": "cards.status.update",
"event_category": "cards",
"event_group_id": "da977df0-2c08-4b5d-9399-089d4285e9e7"
}
Funding events (cards.transaction.funding)
For funding events, the event_data object contains card and transaction objects with details about the funding transaction.
The card object contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | unique identifier for the card |
| last4 | string | last 4 digits of the card number |
| expiry | string | card expiration date |
| status | string | current status of the card |
| network | string | card network: visa or mastercard |
| name_on_card | string | name printed on the card |
The transaction object for funding events contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | unique identifier for the funding transaction |
| status | string | transaction status: completed |
| amount | number | amount funded to the card |
The following is a sample payload for a funding event:
{
"event_id": "924bfe34-d926-440e-b020-3e2e00097dc1",
"tenant_id": "31a6fc8d-826c-496c-9e32-7396aed013d2",
"timestamp": "2025-12-09T12:03:36.25772172Z",
"event_type": "cards.transaction.funding",
"event_category": "cards",
"event_group_id": "51bc1a48-d4c5-4f2e-ab0b-1a8c0fcab9f0",
"event_data": {
"card": {
"id": "ac21ddfc-f6ba-432c-abb3-c5e2243e8ef7",
"last4": "9032",
"expiry": "8/2029",
"status": "active",
"network": "visa",
"name_on_card": "Ndifreke Jacob"
},
"transaction": {
"id": "51bc1a48-d4c5-4f2e-ab0b-1a8c0fcab9f0",
"status": "completed",
"amount": 50
}
}
}
Payment events (cards.transaction.payment)
For payment events, the card object within the event_data object contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | unique identifier for the card |
| last4 | string | last 4 digits of the card number |
| expiry | string | card expiration date |
| status | string | current status of the card |
| network | string | card network: visa or mastercard |
| customer_id | string | ID of the customer who owns the card |
| name_on_card | string | name printed on the card |
The transaction object for payment events contains the following fields:
| Field | Type | Description |
|---|---|---|
| amount | number | transaction amount |
| user_id | string | unique identifier for the user |
| user_email | string | email address of the user |
| merchant_id | string | unique identifier for the merchant, null if not available |
| merchant_city | string | city where the merchant is located |
| merchant_name | string | name of the merchant |
| user_lastname | string | last name of the user |
| authorize_time | string | timestamp when the transaction was authorized, null if not available |
| user_firstname | string | first name of the user |
| declined_reason | string | reason for transaction decline, null if transaction was successful |
| merchant_country | string | two-letter country code where the merchant is located |
| merchant_category | string | merchant category description |
| merchant_category_code | string | numeric code identifying the merchant category |
| status | string | transaction status: completed or failed |
The following is a sample payload for a payment event:
{
"event_id": "485e8bde-7d51-49de-8dcf-9da925669d60",
"tenant_id": "31a6fc8d-826c-496c-9e32-7396aed013d2",
"timestamp": "2025-12-10T11:44:40.315299561Z",
"event_data": {
"card": {
"id": "ac21ddfc-f6ba-432c-abb3-c5e2243e8ef7",
"last4": "9032",
"expiry": "8/2029",
"status": "active",
"network": "visa",
"customer_id": "1805c3be-abca-4698-9cbd-789fc1d619eb",
"name_on_card": "Ndifreke Jacob"
},
"transaction": {
"amount": 10,
"user_id": "a7bc711c-7b2d-4f47-928e-83db292aca88",
"user_email": "ndifrekeeyak@yopmail.com",
"merchant_id": null,
"merchant_city": "London",
"merchant_name": "aliexpress",
"user_lastname": "JACOB",
"authorize_time": null,
"user_firstname": "NDIFREKE EYAK",
"declined_reason": null,
"merchant_country": "GB",
"merchant_category": "5311 - Department Stores",
"merchant_category_code": "5311",
"status": "completed"
}
},
"event_type": "cards.transaction.payment",
"event_category": "cards",
"event_group_id": "ac21ddfc-f6ba-432c-abb3-c5e2243e8ef7"
}
Withdraw events (cards.transaction.withdraw)
For withdraw events, the card object within the event_data object contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | unique identifier for the card |
| last4 | string | last 4 digits of the card number |
| expiry | string | card expiration date |
| status | string | current status of the card |
| network | string | card network: visa or mastercard |
| name_on_card | string | name printed on the card |
The transaction object for withdraw events contains the following fields:
| Field | Type | Description |
|---|---|---|
| id | string | unique identifier for the withdrawal transaction |
| status | string | transaction status: completed |
| amount | number | amount funded to the card |
The following is a sample payload for a withdraw event:
{
"event_id": "924bfe34-d926-440e-b020-3e2e00097dc1",
"tenant_id": "31a6fc8d-826c-496c-9e32-7396aed013d2",
"timestamp": "2025-12-09T12:03:36.25772172Z",
"event_type": "cards.transaction.withdraw",
"event_category": "cards",
"event_group_id": "51bc1a48-d4c5-4f2e-ab0b-1a8c0fcab9f0",
"event_data": {
"card": {
"id": "ac21ddfc-f6ba-432c-abb3-c5e2243e8ef7",
"last4": "9032",
"expiry": "8/2029",
"status": "active",
"network": "visa",
"name_on_card": "Ndifreke Jacob"
},
"transaction": {
"id": "51bc1a48-d4c5-4f2e-ab0b-1a8c0fcab9f0",
"status": "completed",
"amount": 50
}
}
}
For the required fields in all Gravv webhook payloads, see Webhook payload structure.