---
title: "List footprint statements"
method: GET
path: "/api/v1/billing/statements"
tags: ["Billing"]
---

# List footprint statements

`GET /api/v1/billing/statements`

## Request

- Base URL: `https://api.crbonfree.com`
- URL: `https://api.crbonfree.com/api/v1/billing/statements`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/crbonfree/apis/crbonfree-api/docs/api/v1/billing/statements/get.ts> (a function with typed inputs; its response is checked against the schema)

Paginated list of the org's prepared or Trust-signed footprint statements, newest first. Paywalled: free-tier orgs receive 402 PAYMENT_REQUIRED with an `upgradeUrl`.

## Query parameters

- `page` integer
- `limit` integer

## Response `200`

Paginated footprint statements

- object
  - `success` true, required
  - `data` TrustSignedStatement[], required
    - `id` string, uuid, required
    - `billingPeriodId` string, uuid, nullable, required
    - `artifactType` 'footprint_statement', required
    - `statementVersion` integer, required
    - `status` 'pending' | 'signing' | 'signed' | 'failed' | 'unavailable', required
    - `period` object, required
      - `start` string, date-time, required
      - `end` string, date-time, required
    - `usage` object, required
    - `footprint` object, required
    - `methodology` object, required
      - `factorVersions` string[], required
      - `waterFactorVersions` string[], required
      - `layers` object, nullable, required
    - `statementUrl` string, uri, nullable, required
    - `verificationUrl` string, uri, nullable, required
    - `signedAt` string, date-time, nullable, required
    - `createdAt` string, date-time, required
    - `supersededByStatementId` string, uuid, nullable, required
  - `pagination` PaginationMeta, required
    - `page` integer, required
    - `limit` integer, required
    - `total` integer, required
    - `totalPages` integer, required

## Other responses

- `400`: Bad request — validation failed or malformed JSON body
- `401`: Unauthorized — token missing, expired, or invalid
- `402`: Payment required — feature gated behind paid tier; clients should redirect to upgradeUrl
- `429`: Too many requests — rate limit exceeded
- `500`: Internal server error

## Changes

- **2026-10-23** `cab86cd49fc2`: 4 warning, 1 info
  - added the new `failed` enum value to the `data/items/status` response property for the response status `200`
  - added the new `pending` enum value to the `data/items/status` response property for the response status `200`
  - added the new `signing` enum value to the `data/items/status` response property for the response status `200`
  - added the new `unavailable` enum value to the `data/items/status` response property for the response status `200`
  - …1 more
- **2026-09-15** `59b60fef85d2`: 1 breaking, 1 info
  - the response property `data/items/billingPeriodId` became nullable for the status `200`
  - added the required property `data/items/supersededByStatementId` to the response with the `200` status
- **2026-09-11** `a0ca6303ab1e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/crbonfree/apis/crbonfree-api/changes/api/v1/billing/statements/get.md)

---

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