> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.wamo.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.wamo.io/_mcp/server.

# Events and payloads

Every webhook request body is a JSON object with the same envelope, in the [Standard Webhooks](https://www.standardwebhooks.com) payload format. The `type` field tells you which event occurred and determines the shape of `data`. The unique message identifier is in the `webhook-id` [request header](/webhooks/verify-signatures#request-headers).

## Event envelope

**`type`** `string` — required

The event type, for example `transaction.status_changed`.

---

**`timestamp`** `string` — required

When the event occurred, in ISO 8601 format (UTC). It stays the same when a delivery is retried, so it can be earlier than the delivery time.

---

**`data`** `object` — required

The resource associated with the event. Its shape depends on `type`.

---

## Event types

| Event                                                    | Description                                    |
| -------------------------------------------------------- | ---------------------------------------------- |
| [transaction.status_changed](#transactionstatus_changed) | Sent when the status of a transaction changes. |

## transaction.status_changed

Sent when the status of a transaction changes. `data` contains the transaction in its current state. You receive one event for each status a transaction reaches:

| Transaction       | `data.type` | `data.direction` | Statuses you receive             |
| ----------------- | ----------- | ---------------- | -------------------------------- |
| Outgoing transfer | `TRANSFER`  | `OUTBOUND`       | `PENDING`, `COMPLETED`, `FAILED` |
| Incoming transfer | `TRANSFER`  | `INBOUND`        | `COMPLETED`                      |
| Fee               | `FEE`       | `OUTBOUND`       | `COMPLETED`                      |

**`Example payload`**

```json title="Example payload"
{
  "type": "transaction.status_changed",
  "timestamp": "2026-10-06T10:15:02Z",
  "data": {
    "id": "6f1c2b3a-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
    "type": "TRANSFER",
    "direction": "OUTBOUND",
    "status": "PENDING",
    "amount": 1250.0,
    "currency": "EUR",
    "description": "Invoice 2026-114",
    "createdAt": "2026-10-06T10:15:01Z",
    "ledgerId": "a3d04b5c-6d7e-4f8a-9b0c-1d2e3f4a5b6c",
    "beneficiaryId": "b71e2c3d-4e5f-4a6b-9c7d-8e9f0a1b2c3d"
  }
}
```

### Transaction object

Optional fields are left out of the payload when they have no value.

**`data.id`** `string` — required

Unique identifier for the transaction (UUID).

---

**`data.type`** `string` — required

The kind of transaction. One of:

* `TRANSFER`: money sent to or received from another account.
* `FEE`: a fee that wamo charged.

---

**`data.direction`** `string` — required

Whether money is entering or leaving the account. One of:

* `INBOUND`: money entering the account.
* `OUTBOUND`: money leaving the account.

---

**`data.status`** `string` — required

The current status of the transaction. One of:

* `PENDING`: the transaction is being processed.
* `COMPLETED`: the transaction is complete.
* `FAILED`: the transaction failed.

---

**`data.amount`** `number` — required

The transaction amount in major currency units, for example `1250.0`.

---

**`data.currency`** `string` — required

ISO 4217 currency code, for example `EUR`.

---

**`data.convertedAmount`** `number`

The amount after currency conversion, in `convertedCurrency`. Only present when the transaction includes a currency conversion.

---

**`data.convertedCurrency`** `string`

ISO 4217 code of the converted amount, for example `USD`. Only present when the transaction includes a currency conversion.

---

**`data.description`** `string`

Description or reference for the transaction.

---

**`data.createdAt`** `string` — required

When the transaction was created, in ISO 8601 format (UTC).

---

**`data.ledgerId`** `string` — required

Identifier of the ledger the transaction belongs to (UUID).

---

**`data.beneficiaryId`** `string`

Identifier of the beneficiary of the transaction (UUID). Only present for an outgoing transfer.

---

**`data.relatedTransactionId`** `string`

Identifier of the transaction that a fee was charged for (UUID). Only present for a fee that was charged for a specific transaction.

---