# Statements

The Statements API exposes the finalized, period-end documents Rho issues for the accounts your business holds - the same statements you can download from the dashboard. Use it to automate month-end reconciliation, archive PDFs alongside your books, and pull opening/closing balances without scraping the web app.

Stable contract
The Statements API is part of the stable `v1` contract: additive-only, with breaking changes reserved for a new API version. See [Versioning and compatibility](/docs/v1/versioning).

## What a statement represents

A single `statement` record covers one statement period for one statement type. Its top-level fields describe the period; the per-account figures live in an `accounts` array.

| Field | What it tells you |
|  --- | --- |
| `id` | A stable global identifier for the statement. Not the internal row ID. |
| `period_start`, `period_end` | The inclusive boundaries of the statement period. |
| `available_at` | When the finalized statement became available for retrieval. |
| `pdf_url` | A short-lived signed download URL for the PDF, valid for up to 15 minutes, or `null` when the document cannot be linked. If the link lapses, re-fetch the statement with `GET /statements/{id}` for a fresh URL. |
| `accounts` | The per-account figures (see below). Account and treasury statements may span multiple checking/savings accounts; credit statements carry a single entry. |


### Per-account figures

Each entry in `accounts` carries the figures for one account over the period:

| Field | What it tells you |
|  --- | --- |
| `account_id` | The account the figures belong to, or `null` for credit statements, which are not tied to a deposit account. |
| `account_type` | One of checking, savings, credit, or treasury. |
| `opening_balance`, `closing_balance` | Balance at the start of the period and at its close. `closing_balance` is the reconciliation anchor. |
| `total_credits`, `total_debits`, `total_fees` | Sums of credits, debits, and fees posted in the period, in minor units (cents for USD). |
| `repayment_date`, `spending`, `repayments`, `cashback` | Credit statements only; `null` for deposit accounts. |


## Common workflows

### Archiving month-end PDFs

List statements as they become available and download each PDF for your records:

```bash
curl 'https://rhoapi.rho.co/api/v1/statements?period_end_after=2026-05-01&period_end_before=2026-06-01&page_size=100' \
  -H "Authorization: Bearer $RHO_API_TOKEN"
```

Follow the cursor (see [Pagination](/docs/v1/pagination)) until `next_page_token` is `null`, then download each `pdf_url` promptly. A `pdf_url` is a signed link valid for up to 15 minutes. For a long-running archive job, download each PDF soon after you read it rather than collecting URLs up front. If a link lapses mid-run, re-fetch the single statement with `GET /statements/{id}` to get a fresh `pdf_url`:

```bash
curl 'https://rhoapi.rho.co/api/v1/statements/{id}' \
  -H "Authorization: Bearer $RHO_API_TOKEN"
```

### Reconciling balances

For each statement, read the `closing_balance` of the relevant `accounts` entry as the anchor for that account's period, and compare against your ledger. Credit statements expose `spending`, `repayments`, and `cashback` to reconcile the card line.

## Reference

Full endpoint catalogue - paths, parameters, response shapes, and required scopes - lives in the [API Reference](/api/v1/openapi/statements).