> ## 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.

# Objeto de Transação

> O envelope comum retornado por todo GET de registro único e embutido em webhooks e lançamentos do extrato.

Todo response de `GET /{resource}/{id}` e todo payload de webhook usam este envelope. O objeto `attributes` varia por processo — consulte as páginas de cada recurso para as tabelas completas de campos.

## Estrutura

```json theme={null}
{
  "version": "v2",
  "end2end": "NOXabc123",
  "created_at": "2024-05-01T12:00:00Z",
  "updated_at": "2024-05-01T12:01:00Z",
  "process": "pix_deposit.awaiting_payment",
  "status": {
    "en": "Pending",
    "pt": "Pendente",
    "es": "Pendiente"
  },
  "substatus": {
    "en": "Awaiting Payment",
    "pt": "Aguardando Pagamento",
    "es": "Esperando Pago"
  },
  "message": {
    "en": "QR code generated; awaiting customer payment confirmation",
    "pt": "QR code gerado; aguardando confirmação de pagamento do cliente",
    "es": "Código QR generado; esperando confirmación de pago del cliente"
  },
  "error_message": { "en": "", "pt": "", "es": "" },
  "attributes": { }
}
```

## Campos

| Campo           | Tipo   | Descrição                                                                                                                                                                                                     |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `version`       | string | Rótulo do envelope. Não é a versão da API — veja a nota abaixo                                                                                                                                                |
| `end2end`       | string | Identificador único da transação (`NOX...`). É o `{id}` usado nas rotas de registro único                                                                                                                     |
| `created_at`    | string | Timestamp de criação, em RFC 3339                                                                                                                                                                             |
| `updated_at`    | string | Timestamp da última escrita de atributo, em RFC 3339. Igual a `created_at` enquanto nenhum atributo tiver sido reescrito                                                                                      |
| `process`       | string | Código legível por máquina do estágio atual da transação, no formato `estagio.estado` — por exemplo `pix_deposit.awaiting_payment`, `otc_quote.active`, `success.completed`. Muda conforme a transação avança |
| `status`        | object | Rótulo amplo de status, `{ "en": …, "pt": …, "es": … }`                                                                                                                                                       |
| `substatus`     | object | Rótulo de status por etapa, nos mesmos três idiomas                                                                                                                                                           |
| `message`       | object | Mensagem explicativa do estado atual                                                                                                                                                                          |
| `error_message` | object | Preenchido **somente** em estado de falha — estado de espera não carrega erro                                                                                                                                 |
| `attributes`    | object | Todos os campos visíveis desta transação — variam por processo                                                                                                                                                |

<Note>
  A mecânica interna do processo — o componente, seu estado bruto e o nome do template — deliberadamente não faz parte deste contrato e nunca aparece em um response. Conduza sua integração por `status` e `substatus`.
</Note>

<Warning>
  **`process` é um código de estágio, não um tipo de recurso.** Ele diz onde a transação está, não que tipo ela é, e alguns valores — `success.completed`, por exemplo — são compartilhados entre produtos. Não use esse campo para decidir como interpretar `attributes`. Use o endpoint que você chamou e, quando um mesmo endpoint pode devolver mais de uma forma, ramifique por quais chaves de atributo estão presentes.
</Warning>

## Lendo o envelope corretamente

**Os quatro objetos de rótulo estão sempre presentes.** Quando um estado não tem rótulo registrado, `status`, `substatus`, `message` e `error_message` voltam como `{"en": "", "pt": "", "es": ""}` — presentes e vazios, não ausentes. Trate string vazia como "sem informação"; não espere que a chave esteja faltando.

**`attributes` é sempre um objeto.** Quando um processo não tem schema de atributos publicado, você recebe `{}`, não um campo ausente nem `null`.

**Atributo de valor vazio é omitido de `attributes`.** Chave ausente significa "ainda não preenchido" — é assim que se distingue "ainda não aconteceu" de "aconteceu com valor zero". Verifique a presença da chave, não se o valor é falsy.

### `version` é um rótulo, não a versão da API

O campo carrega um literal por rota, e as rotas de ramp ainda emitem `"v1"`:

| Rota                        | `version` |
| --------------------------- | --------- |
| `/v2/crossramp_checkout[s]` | `"v2"`    |
| `/v2/withdrawal[s]`         | `"v2"`    |
| `/v2/rfq/{id}`              | `"v2"`    |
| `/v2/onramp[s]`             | `"v1"`    |
| `/v2/offramp[s]`            | `"v1"`    |

Todas são rotas `/v2/` sobre o mesmo contrato. O valor é um rótulo herdado — não ramifique por ele.

## Responses de lista

Todos os endpoints de lista (`GET /v2/crossramp_checkouts`, `GET /v2/onramps`, etc.) devolvem os mesmos objetos de transação dentro de um array `results`, envolvidos em um envelope de paginação:

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

`total` é a contagem de correspondências **sem** paginação aplicada, então serve para percorrer o conjunto inteiro. `results` nunca é `null` — página vazia é `[]`. Os itens dentro de `results` carregam todos os campos acima, exceto `version`.

Listas são sempre ordenadas por data de criação, da mais recente para a mais antiga. A ordenação não é configurável.

## Webhooks

Webhooks entregam o mesmo objeto JSON do endpoint `GET /{resource}/{id}` correspondente. Configure a URL do webhook por transação no momento da criação, ou por template no dashboard.
