---
title: "Get a service statement"
method: GET
path: "/statements/{statement_id}"
tags: ["Statements"]
---

# Get a service statement

`GET /statements/{statement_id}`

## Request

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

One monthly statement with its itemized lines. `statement_id` is the statement's `id` from the list (`ozav_stmt_` followed by the year and month, e.g. `ozav_stmt_202609`).

## Path parameters

- `statement_id` string, required

## Response `200`

The statement.

- StatementDetail: A monthly service statement. Amounts are in USD.
  - `object` 'statement', required: Resource type discriminator; always `statement`.
  - `id` string, required: `ozav_stmt_` followed by the year and month.
  - `month` string, required: The month the statement covers (YYYY-MM).
  - `status` 'pending' | 'issued' | 'overdue' | 'paid' | 'cancelled', required: `issued` past its due date reads as `overdue`.
  - `volume_usd` number, required: Volume processed in the month.
  - `transactions` integer, required: Number of transactions in the month.
  - `active_users` integer, required: Customers active in the month.
  - `spread_client_share_usd` number, required: Your share of the spread for the month.
  - `amount_due_usd` number, required: What you owe OZAV for the month.
  - `amount_credit_usd` number, required: What OZAV owes you for the month.
  - `issued_at` string, date-time, nullable, required: When the statement was issued.
  - `due_at` string, date-time, nullable, required: When payment is due.
  - `paid_at` string, date-time, nullable, required: When it was paid.
  - `grace_period` boolean, required: Whether the month fell in a grace period with no charge.
  - `created_at` string, date-time, required: When the statement was generated.
  - `lines` object[], required: The itemized lines of the statement.
    - `component` string, required: What the line charges or credits.
    - `payment_rail` string, nullable, required: The payment rail
    - `quantity` number, required: Quantity billed.
    - `unit_price_usd` number, required: Price per unit.
    - `amount_usd` number, required: Line total.

## Other responses

- `401`: Missing or invalid API key.
- `403`: The organization lacks the entitlement (code ENTITLEMENT_REQUIRED) or the key lacks the scope (code INSUFFICIENT_SCOPE). On money-moving requests (POST /transfers, POST /wallets/{wallet_id}/transfers) a compliance hold on the customer answers with code COMPLIANCE_HOLD: the hold is reviewed and lifted on OZAV's side; retrying does not clear it. When the only hold is a pause until pending onboarding documents are received, a withdrawal answers CUSTOMER_DOCUMENTS_PENDING instead: send what `requirements` on GET /customers/{id} lists; OZAV lifts the pause after reviewing it. On OZAV Services (live without the platform's KYB), any API outside decisions, screenings, lists and self-custody wallets answers with code PRODUCTION_NOT_ACTIVATED.
- `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.

---

[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)
