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

# Transaction Object

> The common envelope returned by every single-record GET and embedded in webhooks and statement entries.

Every `GET /{resource}/{id}` response and every webhook payload uses this envelope. The `attributes` object varies by template — see the per-resource pages for full field tables.

## Shape

```json theme={null}
{
  "end2end": "NOXabc123",
  "component": "depositpix_v2",
  "state": "QRCODE",
  "template": "crossramp_checkout",
  "created_at": "2024-05-01T12:00:00Z",
  "updated_at": "2024-05-01T12:01:00Z",
  "status": {
    "en": "Pending",
    "pt": "Pendente"
  },
  "substatus": {
    "en": "Awaiting Payment",
    "pt": "Aguardando Pagamento"
  },
  "message": {
    "en": "QR code generated; awaiting customer payment confirmation",
    "pt": "QR code gerado; aguardando confirmação de pagamento do cliente"
  },
  "error_message": { "en": "", "pt": "" },
  "attributes": { }
}
```

## Fields

| Field           | Type   | Description                                                  |
| --------------- | ------ | ------------------------------------------------------------ |
| `end2end`       | string | Unique transaction identifier (`NOX...`)                     |
| `component`     | string | Current step in the internal process flow                    |
| `state`         | string | Raw state of the current component                           |
| `template`      | string | Process template name                                        |
| `created_at`    | string | ISO 8601 creation timestamp                                  |
| `updated_at`    | string | ISO 8601 last-update timestamp                               |
| `status`        | object | Broad status label `{ "en": "...", "pt": "..." }`            |
| `substatus`     | object | Step-level status label `{ "en": "...", "pt": "..." }`       |
| `message`       | object | Explanatory message for the current state                    |
| `error_message` | object | Error message when applicable — empty strings otherwise      |
| `attributes`    | object | All visible fields for this transaction — varies by template |

## Using status vs substatus

Use `status` to drive high-level UI state (e.g. show a spinner, show a success screen, show an error). Use `substatus` for more granular display — for example, distinguishing "Awaiting Payment" from "KYC Step Up Pending" both of which have `status = Pending`.

## List responses

All list endpoints (`GET /v2/crossramp_checkouts`, `GET /v2/onramps`, etc.) return the same transaction objects inside a `results` array, wrapped in a pagination envelope:

```json theme={null}
{
  "version": "v2",
  "total": 42,
  "limit": 20,
  "offset": 0,
  "results": [ ]
}
```

## Webhooks

Webhooks deliver the same JSON object as the corresponding `GET /{resource}/{id}` endpoint. Configure the webhook URL per-transaction at creation time or per-template in the dashboard.
