---
title: "List a user's monthly statements"
method: GET
path: "/v1/admin/users/{user_id}/statements"
tags: ["Admin"]
---

# List a user's monthly statements

`GET /v1/admin/users/{user_id}/statements`

## Request

- Base URL: `https://api.naturali.ai`
- URL: `https://api.naturali.ai/v1/admin/users/{user_id}/statements`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://api.naturali.ai/authorize`, token URL `https://api.naturali.ai/token`, scopes: `mcp:access`)

The same statements the account reads at `GET /v1/users/me/statements`, for an operator to bill from. Needs the `admin` role.

## Path parameters

- `user_id` string, required

## Query parameters

- `limit` integer
- `cursor` string

## Response `200`

A page of statements.

- StatementPage
  - `data` Statement[], required
    - `id` string, required
    - `cycle` string, required: The billing month, `YYYY-MM` in UTC.
    - `period_from` string, date-time, required
    - `period_to` string, date-time, required: Exclusive.
    - `runs` object, required: Runs that month across every project the account pays for, against the allowance overage was measured against.
      - `used` integer, required
      - `limit` integer, nullable, required
    - `lines` StatementLine[], required
      - `kind` 'subscription' | 'run_overage' | 'prepaid' | 'model_credit_spend' | 'marketplace_fees' | 'marketplace_earnings' | 'platform_take', required: `subscription`, `run_overage` and `prepaid` make up `total_usd` and are charged; `prepaid` is fee already paid by card at an upgrade, netted as a negative amount. The other four report movements of prepaid credit in the cycle and are not part of it.
      - `plan` 'free' | 'pro' | 'business' | 'enterprise', required
      - `description` string, required
      - `period_from` string, date-time, required
      - `period_to` string, date-time, required: Exclusive.
      - `quantity` number, required: For `subscription`, the share of the month the plan was held; for `run_overage`, the runs past the allowance; for `prepaid`, 1.
      - `unit` 'month' | '1,000 runs' | 'payment' | 'USD', required
      - `unit_price_usd` number, required
      - `amount_usd` number, required
    - `total_usd` number, required: What is owed, after anything prepaid.
    - `payment_status` 'unpaid' | 'processing' | 'paid' | 'failed' | 'nothing_due', required: Collection on the saved card. `unpaid` until a charge starts — within an hour of the statement, once a card is saved. `failed` moves the account to Free when the month ends.
    - `created_at` string, date-time, required
  - `next_cursor` string, nullable, required

## Other responses

- `400`: The request was malformed or failed validation.
- `401`: Missing or invalid credentials.
- `403`: The caller does not hold the `admin` role.
- `404`: No such user.

---

[API](https://skmtc.dev/naturali/apis/naturali-ai-api.md) · [All operations](https://skmtc.dev/naturali/apis/naturali-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/naturali/apis/naturali-ai-api/revisions/e4905b78f422?raw)
