Airwallex logo

Spend

Subscribe to webhook events for expense status changes.

Copy for LLMView as Markdown

The following webhook events are available for your Spend integration.

Card expense webhooks

Web app LabelEvent TypeDescription
Expenses -> Expense draftspend.expense.draftA card expense has been created.
Expenses -> Expense awaiting approvalspend.expense.awaiting_approvalA card expense has been submitted for approval, or has been approved but requires additional approvals.
Expenses -> Expense updatedspend.expense.updatedA card expense or its underlying card transaction has been updated.
Expenses -> Expense rejectedspend.expense.rejectedA card expense has been rejected.
Expenses -> Expense approvedspend.expense.approvedA card expense has been fully approved.
Expenses -> Expense archivedspend.expense.archivedA card expense has been archived.
Expenses -> Expense deletedspend.expense.deletedA 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 LabelEvent TypeDescription
Reimbursement Reports -> Report draftspend.reimbursement_report.draftA reimbursement report has been created.
Reimbursement Reports -> Report awaiting approvalspend.reimbursement_report.awaiting_approvalA reimbursement report has been submitted for approval.
Reimbursement Reports -> Report awaiting paymentspend.reimbursement_report.awaiting_paymentA reimbursement report has been approved and is awaiting payment.
Reimbursement Reports -> Report rejectedspend.reimbursement_report.rejectedA reimbursement report has been rejected.
Reimbursement Reports -> Report payment in progressspend.reimbursement_report.payment_in_progressPayment for a reimbursement report is being processed.
Reimbursement Reports -> Report paidspend.reimbursement_report.paidA reimbursement report has been paid through Airwallex.
Reimbursement Reports -> Report marked as paidspend.reimbursement_report.mark_as_paidA reimbursement report has been marked as paid externally, outside Airwallex.
Reimbursement Reports -> Report deletedspend.reimbursement_report.deletedA reimbursement report has been deleted.
Reimbursement Reports -> Report updatedspend.reimbursement_report.updatedA 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:

FieldDescription
idUnique identifier of the card expense.
account_idThe Airwallex account ID.
legal_entity_idThe legal entity associated with this expense.
card_idThe card used for this transaction.
billing_amount / billing_currencyThe amount and currency billed to the card.
card_transactionNested object containing the card transaction details: status (for example, CLEARED), amount, and currency.
merchantThe merchant name.
statusThe expense approval status (for example, APPROVED).
sync_statusWhether the expense has been synced to an external system (NOT_SYNCED, SYNCED).
line_itemsArray of line items, each with its own accounting_field_selections.
attachmentsArray of file attachments associated with the expense.
approversArray of users who approved the expense.
commentsArray of comments on the expense.
settled_atTimestamp 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": [
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:

FieldDescription
idUnique identifier of the reimbursement report.
nameThe report name (for example, Q3 Marketing Campaign).
legal_entity_idThe legal entity associated with this report.
beneficiary_idThe beneficiary who receives the reimbursement payment.
billing_currencyThe currency for the report.
statusThe report status (for example, AWAITING_PAYMENT).
sync_statusWhether the report has been synced to an external system (NOT_SYNCED, SYNCED).
approversArray of email addresses of users who approved the report.
created_byEmail address of the user who created the report.
Was this page helpful?