> ## Documentation Index
> Fetch the complete documentation index at: https://developers.circle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reporting

> Reference for Managed Payments reporting: the report types available through the /v1/reports API, how to request and download them, and how they differ from Circle Mint reporting.

Managed Payments generates reports through the core Circle Reports API
([`/v1/reports`](/api-reference/circle-mint/account/request-report)). The
following report types cover Managed Payments activity only. They're separate
from the Circle Mint `camt053` daily statement, which isn't available on Managed
Payments keys.

## Report types

| `reportType`                      | Contents                                                              | `timeframe`        | Format |
| --------------------------------- | --------------------------------------------------------------------- | ------------------ | ------ |
| `managed_payin_transactions`      | Payin (deposit) transactions for the period                           | `daily`, `monthly` | CSV    |
| `managed_payout_transactions`     | Payout transactions for the period                                    | `daily`, `monthly` | CSV    |
| `managed_payment_wallet_balances` | Wallet and sub-account balance snapshot                               | `daily`            | CSV    |
| `camt_managed`                    | ISO 20022 CAMT.053 bank-to-customer statement, Managed Payments scope | `daily`            | XML    |

<Note>
  Use `camt_managed` for CAMT.053 statements on Managed Payments. The Circle
  Mint `camt053` type isn't valid on Managed Payments keys. It covers Circle
  Mint accounts, not Managed Payments. See [CAMT.053 daily
  statements](/circle-mint/references/camt053-statements) for the ISO 20022 XML
  structure, which `camt_managed` shares.
</Note>

## Request and download a report

1. Request the report with
   [`POST /v1/reports`](/api-reference/circle-mint/account/request-report),
   passing `reportType`, `date` in `YYYY-MM-DD` format, and `timeframe` where
   the type supports it. Circle interprets `date` in your entity's reporting
   timezone, not UTC. For example, a Circle SG entity uses Singapore Time (SGT).
   Circle generates Managed Payments reports on a schedule:
   * If the report is available, the response is `200 OK` with the report `id`
     and a pre-signed `downloadUrl`.
   * If the report is still being generated, the response is `202 Accepted` with
     a report `id` and no `downloadUrl`.
2. If the response was `202 Accepted`, poll
   [`GET /v1/reports/{id}`](/api-reference/circle-mint/account/get-report-by-id)
   until `status` is `ready` and a `downloadUrl` is present.
3. Download the file from `downloadUrl` before the time given by `expiresAt`.
   Call `GET /v1/reports/{id}` again to get a fresh URL after it expires. You
   can also request the report again. Requests are idempotent, so the same
   parameters return the same report.

```bash theme={null}
curl -X POST https://api-sandbox.circle.com/v1/reports \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"reportType":"camt_managed","timeframe":"daily","date":"2026-06-30"}'
```

```json theme={null}
{
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "reportType": "camt_managed",
    "status": "ready",
    "downloadUrl": "https://s3.amazonaws.com/...",
    "expiresAt": "2026-06-30T15:00:00Z"
  }
}
```

<Info>
  `expiresAt` uses different formats across endpoints. Create (`POST
      /v1/reports`) and get-by-ID (`GET /v1/reports/{id}`) responses return it as an
  ISO 8601 timestamp, as in the preceding example. The list endpoint (`GET
      /v1/reports`) returns it as epoch milliseconds.
</Info>
