---
title: "List an account's statement"
method: GET
path: "/accounts/{account_id}/movements"
tags: ["Accounts"]
---

# List an account's statement

`GET /accounts/{account_id}/movements`

## Request

- Base URL: `https://developers.ozav.io/v2`
- URL: `https://developers.ozav.io/v2/accounts/{account_id}/movements`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Lists the credits that arrived in a named fiat account, newest first, as the
account's institution reports them. Where the institution exposes a live
statement, it is read at request time, not from an OZAV copy, so it can lag the
institution by a few seconds and it is never older than the account's
`balance.as_of`.

A BRL account lists the Pix credits OZAV has already read from its statement,
which happens every 10 minutes, so a credit can take up to that long to appear.
These are the same credits that move `balance`, and each one also fires
`account.credited`. The 100 newest are returned. Sandbox BRL accounts are
included: `POST /accounts/{account_id}/simulate/credit` adds a credit to them.

Each item is a credit into the account. `reference` is the text the payer sent
with the transfer, when the rail carries one; `received` is present only when the
institution reports the amount that actually landed separately from the amount
the payer sent (international wires lose correspondent charges on the way).

`501 ACCOUNT_MOVEMENTS_NOT_AVAILABLE` means this account's institution does not
expose a statement through OZAV (sandbox accounts in other currencies included);
`503 ACCOUNT_MOVEMENTS_UNAVAILABLE` means it does, and the read failed - retry.

## Path parameters

- `account_id` string, required

## Response `200`

The account's credits, newest first. `has_more` is always `false` today - the full page the institution returns (the 100 newest, on a BRL account) is served.

- object
  - `data` AccountMovement[], required
    - `id` string, required: The entry's identifier. Stable across reads; use it to de-duplicate. It is the institution's own identifier where the statement is read live, and an OZAV id (`ozav_amov_...`) on a BRL account. The same id arrives in `account.credited`.
    - `object` 'account_movement', required
    - `direction` 'credit', required: Only credits are listed today - money that arrived in the account.
    - `amount` string, required: The amount the payer sent, as a decimal string in `currency`.
    - `currency` string, required: Uppercase ISO 4217 code or stablecoin symbol (e.g. BRL, USD, EUR, MXN, USDC, USDT). Uppercase is the canonical form: values are accepted case-insensitively on input but are always uppercase in responses.
    - `occurred_at` string, date-time, required: When the institution booked the credit (RFC 3339, UTC).
    - `reference` string: The free text the payer sent with the transfer, when the rail carries one. Absent means the rail carried none.
    - `payer` object: Who paid, when the institution reports it. Absent when it does not.
      - `name` string
      - `document` string: The payer's tax or registration document, as reported.
    - `received` object: The amount that actually landed, when the institution reports it separately from `amount` (international wires lose correspondent charges). Absent means the institution reports one figure only.
      - `amount` string, required
      - `currency` string, required: Uppercase ISO 4217 code or stablecoin symbol (e.g. BRL, USD, EUR, MXN, USDC, USDT). Uppercase is the canonical form: values are accepted case-insensitively on input but are always uppercase in responses.
  - `has_more` boolean, required
  - `next_cursor` string, nullable, required

## Other responses

- `401`: Missing or invalid API key.
- `404`: The resource does not exist, is not visible to the caller, or the id was malformed for this position (see "Resource ids" under Errors). These share one status; `code` and `message` tell them apart.
- `501`: The route exists and validated your request, but the capability behind it is not wired yet - a build-ahead seam, not a client error. Nothing was created. Do not retry on a loop; check `GET /capabilities` for go-live.
- `503`: A dependency OZAV needs (storage, a resource lookup) could not be reached, so OZAV fails closed rather than guess. Safe to retry with the same `Idempotency-Key` where the operation accepts one.

---

[API](https://skmtc.dev/ozav/apis/ozav-api.md) - [All operations](https://skmtc.dev/ozav/apis/ozav-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ozav/apis/ozav-api/revisions/4133dc2109d7?raw)
