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

# Extrato

> GET /v2/statement — livro-razão paginado de partidas dobradas com saldos atualizados e objetos de transação embutidos.

Cada lançamento representa uma única linha de débito ou crédito contra uma de suas sub-contas, com saldo antes e depois. Quando o movimento foi gerado por um processo Noxpay — Crossramp Checkout, onramp, offramp, saque — o objeto de transação completo é embutido inline.

## Parâmetros de query

| Parâmetro      | Tipo    | Descrição                                                                   |
| -------------- | ------- | --------------------------------------------------------------------------- |
| `limit`        | integer | Máximo de resultados por página (padrão: `20`, máx: `100`)                  |
| `offset`       | integer | Offset de paginação (padrão: `0`)                                           |
| `currency`     | string  | Filtrar por código de moeda (ex: `TRX_USDT_S2UZ`, `BRL`)                    |
| `account_type` | string  | Filtrar por sub-conta: `available`, `in_transit`, `to_receive` ou `blocked` |
| `date_from`    | string  | Filtro de data de início — RFC 3339 ou `YYYY-MM-DD`                         |
| `date_to`      | string  | Filtro de data de fim — RFC 3339 ou `YYYY-MM-DD`                            |

Os dois limites são inclusivos e filtram pela data do lançamento no ledger, **não** pela data de criação da transação de origem.

<Warning>
  Um `YYYY-MM-DD` puro em `date_to` resolve para **meia-noite** do início daquele dia, então `date_to=2026-08-20` exclui tudo que aconteceu durante o dia 20 de agosto. Para incluir o dia inteiro, passe o dia seguinte, ou use um timestamp RFC 3339 explícito.
</Warning>

Uma data inválida é descartada e o filtro simplesmente não se aplica — você recebe um resultado sem filtro, não um `400`. Um `account_type` não reconhecido se comporta do mesmo jeito: o extrato inteiro é devolvido. Valide no cliente se isso importa.

Um `limit` inválido cai para `50`, em vez de devolver erro.

## Campos do response

| Campo     | Tipo    | Descrição                                                |
| --------- | ------- | -------------------------------------------------------- |
| `total`   | integer | Total de lançamentos correspondentes em todas as páginas |
| `limit`   | integer | Tamanho da página usado                                  |
| `offset`  | integer | Offset atual                                             |
| `entries` | array   | Lista de objetos de lançamento do extrato                |

## Lançamento do extrato

| Campo                          | Tipo    | Descrição                                                                                                                                                      |
| ------------------------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                           | integer | Identificador único do lançamento contábil                                                                                                                     |
| `date`                         | string  | Timestamp ISO 8601 do lançamento                                                                                                                               |
| `account.id`                   | integer | ID interno da conta contábil                                                                                                                                   |
| `account.name`                 | string  | Rótulo da conta do ledger (ex: `USDT TRC20 disponível`). Configurado pela operação — exiba, não interprete                                                     |
| `account.code`                 | string  | Código completo de conta de partidas dobradas (ex: `2.1.1.100.1.1.1`)                                                                                          |
| `account.currency`             | string  | Código de moeda bruto do livro-razão (ex: `TRX_USDT_S2UZ`)                                                                                                     |
| `account.currency_pretty_name` | string  | Nome exibido (ex: `USDT (TRX)`)                                                                                                                                |
| `debit`                        | float   | Valor debitado desta conta                                                                                                                                     |
| `credit`                       | float   | Valor creditado a esta conta                                                                                                                                   |
| `previous_balance`             | float   | Saldo da conta antes deste lançamento                                                                                                                          |
| `balance`                      | float   | Saldo da conta após este lançamento                                                                                                                            |
| `transaction`                  | object  | Objeto de transação embutido quando o lançamento veio de um processo Noxpay. **Omitido por completo** em ajustes internos — a chave está ausente, não é `null` |

## Subtipo de conta pelo código

O último segmento de `account.code` identifica o bucket de sub-conta:

| Segmento do código | Tipo         | Descrição                                |
| ------------------ | ------------ | ---------------------------------------- |
| `1`                | `available`  | Disponível para saque imediato           |
| `2`                | `in_transit` | Enviado; aguardando confirmação on-chain |
| `3`                | `to_receive` | Entrada pendente                         |
| `4`                | `blocked`    | Bloqueado para conformidade ou disputa   |

## Objeto de transação embutido

Quando `transaction` está presente, ele é o [Objeto de Transação](/pt/api-reference/reference/transaction-object) padrão, menos `version`. Ele não carrega um campo de tipo de recurso, então identifique o produto por quais chaves de atributo estão presentes — estes são os tipos de processo que podem aparecer:

| Produto                      | Atributos distintivos                      |
| ---------------------------- | ------------------------------------------ |
| Crossramp Checkout           | `currency_entry`, `fixed_link`             |
| Onramp para Conta Global     | `currency_entry`, `currency_exit_received` |
| Onramp para Endereço Externo | os acima, mais `wallet`, `tx_hash`         |
| Offramp da Conta Global      | `currency_exit`, `amount_sent`             |
| Offramp de Endereço Externo  | `deposit_address`, `exact_deposit_amount`  |
| Saque                        | `amount_discounted`, `address`             |

O objeto `attributes` contém os campos relevantes para aquele produto. Consulte as páginas de cada recurso para as tabelas completas de atributos.

## Códigos de retorno

| HTTP  | Quando                        |
| ----- | ----------------------------- |
| `200` | Sucesso                       |
| `401` | `api-key` ausente ou inválida |
| `500` | Erro interno                  |

<RequestExample>
  ```bash cURL theme={null}
  curl "https://checkout.noxpay.io/v2/statement?limit=20&offset=0" \
    -H "api-key: <key>"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://checkout.noxpay.io/v2/statement",
      headers={"api-key": "<key>"},
      params={"limit": 20, "offset": 0},
  )
  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({ limit: 20, offset: 0 });
  const response = await fetch(
    `https://checkout.noxpay.io/v2/statement?${params}`,
    { headers: { "api-key": "<key>" } }
  );
  const data = await response.json();
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "total": 128,
    "limit": 20,
    "offset": 0,
    "entries": [
      {
        "id": 4521,
        "date": "2024-05-01T12:00:00Z",
        "account": {
          "id": 42,
          "name": "USDT TRC20 disponível",
          "code": "2.1.1.100.1.1.1",
          "currency": "TRX_USDT_S2UZ",
          "currency_pretty_name": "USDT (TRX)"
        },
        "debit": 0.00,
        "credit": 100.00,
        "previous_balance": 50.00,
        "balance": 150.00,
        "transaction": {
          "end2end": "NOXabc123",
          "created_at": "2024-05-01T11:59:00Z",
          "updated_at": "2024-05-01T12:00:00Z",
          "process": "success.completed",
          "status": { "en": "Success", "pt": "Sucesso", "es": "Éxito" },
          "substatus": { "en": "Success", "pt": "Sucesso", "es": "Éxito" },
          "message": { "en": "Transaction completed successfully", "pt": "Transação concluída com sucesso", "es": "Transacción completada con éxito" },
          "error_message": { "en": "", "pt": "", "es": "" },
          "attributes": {
            "quote": 5.45,
            "currency_exit_received": "USDT (TRX)",
            "amount_payment": 550.00,
            "amount_received": 100.00,
            "client_name": "João Silva",
            "client_tax_id": "12345678901"
          }
        }
      }
    ]
  }
  ```
</ResponseExample>
