> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pazy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment events

> The nine payment.* events that report when money for an invoice, reimbursement or advance is completed, fails or is reversed

Payment events fire when money for a payable reaches a final outcome. There are nine event types, one for each kind of payable and outcome. Both are in the event name, so the payload has no `status` field and no resource type.

| Event type | Payable | Fired when |
| - | - | - |
| `payment.invoice.completed` | An invoice | A payment against the invoice succeeds |
| `payment.invoice.failed` | An invoice | A payment against the invoice fails |
| `payment.invoice.reversed` | An invoice | A payment against the invoice is refunded |
| `payment.reimbursement.completed` | A reimbursement group | A payment against the group succeeds |
| `payment.reimbursement.failed` | A reimbursement group | A payment against the group fails |
| `payment.reimbursement.reversed` | A reimbursement group | A payment against the group is refunded |
| `payment.advances.completed` | A purchase order (advance) | An advance payment succeeds |
| `payment.advances.failed` | A purchase order (advance) | An advance payment fails |
| `payment.advances.reversed` | A purchase order (advance) | An advance payment is refunded |

All nine share one payload shape. Subscribe with `payment.*` to receive them all.

## Partial payments

Each partial payment raises its own event. Use `isFinalSettlement` to tell the payment that settles the payable from earlier partial ones. It is `true` only on a `completed` event that settles it.

## Fields

| Field | Type | Description |
| - | - | - |
| `paymentId` | string | Unique per payment and present for every `source`, so dedupe on this |
| `transactionId` | string (UUID) \| null | The Pazy transaction id. `null` for `MARK_AS_PAID` and `ERP` payments. On a `reversed` event it is the refund's transaction id |
| `source` | string | `PLATFORM`, `MARK_AS_PAID` or `ERP`. See below |
| `resource` | object | What was paid: `{ id, identifier }`. See below |
| `amount` | string (decimal) | The amount of this payment |
| `currency` | string | ISO 4217 code |
| `utr` | string \| null | The payment reference. For `MARK_AS_PAID` and `ERP` payments, it is whatever reference was recorded |
| `paymentDate` | string (ISO 8601) \| null | When the payment settled. `null` on `failed` and `reversed` events |
| `isFinalSettlement` | boolean | `true` only on a `completed` payment that settles the payable |
| `paymentRequestId` | string \| null | The payment request this payment belonged to. Use it with [Payment Request Details](/apis/payment-request-details) |
| `originalTransactionId` | string (UUID) \| null | On `reversed` events, the transaction being reversed. Otherwise `null` |

All fields are always present. Fields marked `null` above carry a `null` value when they don't apply.

### `source`

| Value | Meaning |
| - | - |
| `PLATFORM` | Paid through Pazy |
| `MARK_AS_PAID` | Marked as paid in Pazy, with the money moved outside it. These are never reversed |
| `ERP` | Recorded from your accounting system |

### `resource`

| Field | Type | Description |
| - | - | - |
| `id` | string | The id of the invoice, reimbursement group or purchase order. Use it with the matching API, such as [Invoice Details](/apis/invoice-details) |
| `identifier` | string \| null | The human-readable number, such as `INV-4471` |

Which kind of payable `resource.id` refers to depends on the event name: `payment.invoice.*` for an invoice, `payment.reimbursement.*` for a reimbursement group, and `payment.advances.*` for a purchase order.

## Example: `payment.invoice.completed`

```json theme={null}
{
  "id": "018f1a2b-3c4d-7e8f-9a0b-1c2d3e4f5a6d",
  "type": "payment.invoice.completed",
  "version": "1",
  "createdAt": "2026-08-10T09:14:21.000Z",
  "data": {
    "paymentId": "8841203",
    "transactionId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "source": "PLATFORM",
    "resource": { "id": "inv_8fk21ma", "identifier": "INV-4471" },
    "amount": "1234.50",
    "currency": "INR",
    "utr": "UTR123456789",
    "paymentDate": "2026-08-10T09:14:20.000Z",
    "isFinalSettlement": true,
    "paymentRequestId": "pr_2kd9",
    "originalTransactionId": null
  }
}
```

## Example: `payment.invoice.reversed`

A reversal has no `paymentDate`, and links back to the transaction it undoes.

```json theme={null}
{
  "id": "018f1a2b-3c4d-7e8f-9a0b-1c2d3e4f5a7e",
  "type": "payment.invoice.reversed",
  "version": "1",
  "createdAt": "2026-08-12T10:02:11.000Z",
  "data": {
    "paymentId": "8841203",
    "transactionId": "a3bb189e-8bf9-3888-9912-ace4e6543002",
    "source": "PLATFORM",
    "resource": { "id": "inv_8fk21ma", "identifier": "INV-4471" },
    "amount": "1234.50",
    "currency": "INR",
    "utr": null,
    "paymentDate": null,
    "isFinalSettlement": false,
    "paymentRequestId": "pr_2kd9",
    "originalTransactionId": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
  }
}
```

## Things to know

* `failed` events carry no failure reason.
* `reversed` events fire for refunds of platform payments only. A payment marked as paid can't be reversed.

For a worked example, see [Track invoice payments with webhooks](/guides/track-invoice-payments-with-webhooks).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.