You can expect the below object when you register a webhook for the following events:
- card_transaction.create: a card transaction is recorded.
- card_transaction.update: Mamo receives a later update for an existing transaction (for example clearing or a reversal). Same payload.
Raw sample
{
"kind": "purchase",
"merchant_name_formatted": "ACQUIRER NAME",
"amount_currency": "AED",
"billing_amount_currency": "AED",
"status": "success",
"id": "CTX-6F7A8B9C0D",
"merchant_name": null,
"amount": 100.0,
"billing_amount": 100.0,
"card": {
"identifier": "CRD-1A2B3C4D5E",
"card_name": "Team travel card",
"card_last4": "1234"
},
"card_holder": {
"identifier": "MBOWNR-1A2B3C4D5E",
"fullname": "Jane Doe",
"email": "[email protected]"
},
"created_at": "18 Dec 2025, 11:24 AM",
"updated_at": "18 Dec 2025, 11:24 AM",
"expense": {
"status": "incomplete",
"description": null,
"invoice_number": null,
"id": "EXP-3C4D5E6F7A",
"transaction": {
"amount": 100.0,
"amount_currency": "AED",
"billing_amount": 100.0,
"billing_amount_currency": "AED"
},
"card": {
"identifier": "CRD-1A2B3C4D5E",
"name": "Team travel card",
"last4": "1234"
},
"user": {
"identifier": "MBOWNR-1A2B3C4D5E",
"fullname": "Jane Doe",
"email": "[email protected]"
},
"category": null,
"tax_code": null,
"payment_account": null,
"expense_account": null,
"vendor": null,
"receipt_uploaded": false,
"created_at": "18 Dec 2025, 11:24 AM",
"updated_at": "18 Dec 2025, 11:24 AM"
},
"event_type": "card_transaction.create"
}Field descriptions
| Field | Type | Description |
|---|---|---|
| kind | String | Transaction type: purchase, cash_withdrawal, refund, balance_inquiry, account_verification, wallet_debit, wallet_credit, wallet_transfer, oct, aft, quasi_cash or other |
| merchant_name_formatted | String | Formatted merchant name |
| amount_currency | String | Transaction currency |
| billing_amount_currency | String | Billing currency |
| status | String | Transaction status: success, reversed, declined or refunded |
| id | String | Transaction ID |
| merchant_name | String | Raw merchant descriptor, returned only for some ad-platform and payment-processor descriptors (for example FACEBK *..., GOOGLE *ADS..., PP*...); otherwise null. Use merchant_name_formatted for display. |
| amount | Number | Transaction amount |
| billing_amount | Number | Billing amount |
| card | Object | The card used |
| card.identifier | String | Card ID |
| card.card_name | String | Card name/label |
| card.card_last4 | String | Last 4 digits of the card |
| card_holder | Object | The user the card is issued to |
| card_holder.identifier | String | User ID |
| card_holder.fullname | String | User's full name |
| card_holder.email | String | User's email |
| created_at | String | Transaction creation date (Dubai time), format DD Mon YYYY, hh:mm AM |
| updated_at | String | Transaction last update date (Dubai time), same format |
| expense | Object | Linked expense; an empty object {} when the transaction has no expense |
| expense.status | String | Expense status (incomplete-pending_review-ready-synced) |
| expense.description | String | Expense description |
| expense.invoice_number | String | Invoice number |
| expense.id | String | Expense ID |
| expense.transaction | Object | Amounts of the card transaction |
| expense.transaction.amount | Number | Transaction amount |
| expense.transaction.amount_currency | String | Transaction currency |
| expense.transaction.billing_amount | Number | Billing amount |
| expense.transaction.billing_amount_currency | String | Billing currency |
| expense.card | Object | The card used |
| expense.card.identifier | String | Card ID |
| expense.card.name | String | Card name/label |
| expense.card.last4 | String | Last 4 digits of the card |
| expense.user | Object | The user the expense belongs to |
| expense.user.identifier | String | User ID |
| expense.user.fullname | String | User's full name |
| expense.user.email | String | User's email |
| expense.category | String | Expense category |
| expense.tax_code | String | Tax code |
| expense.payment_account | String | Payment account |
| expense.expense_account | String | Expense account |
| expense.vendor | String | Vendor information |
| expense.receipt_uploaded | Boolean | Whether receipt is uploaded |
| expense.created_at | String | Date of the card transaction the expense was created from |
| expense.updated_at | String | Expense last update date |
| event_type | String | card_transaction.create or card_transaction.update |