The following webhook events are available for your Spend integration.
Card expense webhooks
| Web app Label | Event Type | Description |
|---|---|---|
| Expenses -> Expense draft | spend.expense.draft | A card expense has been created. |
| Expenses -> Expense awaiting approval | spend.expense.awaiting_approval | A card expense has been submitted for approval, or has been approved but requires additional approvals. |
| Expenses -> Expense updated | spend.expense.updated | A card expense or its underlying card transaction has been updated. |
| Expenses -> Expense rejected | spend.expense.rejected | A card expense has been rejected. |
| Expenses -> Expense approved | spend.expense.approved | A card expense has been fully approved. |
| Expenses -> Expense archived | spend.expense.archived | A card expense has been archived. |
| Expenses -> Expense deleted | spend.expense.deleted | A card expense has been deleted. This occurs when a bill is paid using a card transaction that already has an associated card expense. |
For more details on card expense operations, see Card expenses via API.
Reimbursement report webhooks
| Web app Label | Event Type | Description |
|---|---|---|
| Reimbursement Reports -> Report draft | spend.reimbursement_report.draft | A reimbursement report has been created. |
| Reimbursement Reports -> Report awaiting approval | spend.reimbursement_report.awaiting_approval | A reimbursement report has been submitted for approval. |
| Reimbursement Reports -> Report awaiting payment | spend.reimbursement_report.awaiting_payment | A reimbursement report has been approved and is awaiting payment. |
| Reimbursement Reports -> Report rejected | spend.reimbursement_report.rejected | A reimbursement report has been rejected. |
| Reimbursement Reports -> Report payment in progress | spend.reimbursement_report.payment_in_progress | Payment for a reimbursement report is being processed. |
| Reimbursement Reports -> Report paid | spend.reimbursement_report.paid | A reimbursement report has been paid through Airwallex. |
| Reimbursement Reports -> Report marked as paid | spend.reimbursement_report.mark_as_paid | A reimbursement report has been marked as paid externally, outside Airwallex. |
| Reimbursement Reports -> Report deleted | spend.reimbursement_report.deleted | A reimbursement report has been deleted. |
| Reimbursement Reports -> Report updated | spend.reimbursement_report.updated | A reimbursement report has been updated. |
For more details on reimbursement operations, see Reimbursements via API.
Payload examples
Examples of different Spend event data objects are displayed below.
Card expense approved
When a card expense is fully approved, you receive a spend.expense.approved event with the following payload:
JSON
1{2 "id": "2a396f97-92f4-3075-98fa-43acf6e87412",3 "name": "spend.expense.approved",4 "org_id": "acct_t6nlGSCgPpWIBE-3ncOTxA",5 "data": {6 "account_id": "acct_--hXbQInMnenHjfxoO0mTg",7 "accounting_field_selections": [],8 "approvers": [],9 "attachments": [],10 "billing_amount": "50.00",11 "billing_currency": "AUD",12 "card_id": "2a6c461c-efdb-465f-8b0a-c2e7040a878e",13 "comments": [],14 "created_at": "2025-09-08T10:00:00.000000Z",15 "description": null,16 "id": "47725807-2085-443e-9c2c-ce9ca9627247",17 "legal_entity_id": "le_8CqerfacM_aSwB3G3SnAOw",18 "line_items": [19 {20 "accounting_field_selections": [],21 "description": null,22 "id": "09a60121-a387-39d4-b46e-f491b6efa6a0",23 "transaction_amount": "50.00"24 }25 ],26 "merchant": "Coffee Shop",27 "settled_at": "2025-09-08T10:02:00.000000Z",28 "status": "APPROVED",29 "sync_status": "NOT_SYNCED",30 "card_transaction": {31 "status": "CLEARED",32 "amount": "50.00",33 "currency": "AUD"34 },35 "updated_at": "2025-09-08T10:02:00.000000Z"36 },37 "created_at": "2026-02-06T10:10:29+0000",38 "version": "2025-11-11"39}
Key fields in the expense data object:
| Field | Description |
|---|---|
id | Unique identifier of the card expense. |
account_id | The Airwallex account ID. |
legal_entity_id | The legal entity associated with this expense. |
card_id | The card used for this transaction. |
billing_amount / billing_currency | The amount and currency billed to the card. |
card_transaction | Nested object containing the card transaction details: status (for example, CLEARED), amount, and currency. |
merchant | The merchant name. |
status | The expense approval status (for example, APPROVED). |
sync_status | Whether the expense has been synced to an external system (NOT_SYNCED, SYNCED). |
line_items | Array of line items, each with its own accounting_field_selections. |
attachments | Array of file attachments associated with the expense. |
approvers | Array of users who approved the expense. |
comments | Array of comments on the expense. |
settled_at | Timestamp when the card transaction was settled. |
Reimbursement report awaiting payment
When a reimbursement report is approved and awaiting payment, you receive a spend.reimbursement_report.awaiting_payment event with the following payload:
JSON
1{2 "id": "2a396f97-92f4-3075-98fa-43acf6e87412",3 "name": "spend.reimbursement_report.awaiting_payment",4 "org_id": "acct_t6nlGSCgPpWIBE-3ncOTxA",5 "data": {6 "accounting_field_selections": [],7 "approvers": [8 "[email protected]",10 ],11 "beneficiary_id": "a26d26ea-8b2c-4b5f-a7a6-24edcdf2cfa5",12 "billing_currency": "AUD",13 "comments": [],14 "created_at": "2025-09-08T10:00:00.000000Z",15 "created_by": "[email protected]",16 "id": "58d716bc-c03e-4c38-80c1-b030c602c8ae",17 "legal_entity_id": "e63bad9f-28e5-4ffa-a366-1fe20b8d5647",18 "name": "Q3 Marketing Campaign",19 "status": "AWAITING_PAYMENT",20 "sync_status": "NOT_SYNCED",21 "updated_at": "2025-09-08T10:05:20.000000Z"22 },23 "created_at": "2026-02-06T10:15:07+0000",24 "version": "2025-11-11"25}
Key fields in the reimbursement report data object:
| Field | Description |
|---|---|
id | Unique identifier of the reimbursement report. |
name | The report name (for example, Q3 Marketing Campaign). |
legal_entity_id | The legal entity associated with this report. |
beneficiary_id | The beneficiary who receives the reimbursement payment. |
billing_currency | The currency for the report. |
status | The report status (for example, AWAITING_PAYMENT). |
sync_status | Whether the report has been synced to an external system (NOT_SYNCED, SYNCED). |
approvers | Array of email addresses of users who approved the report. |
created_by | Email address of the user who created the report. |
Was this page helpful?