---
title: "Get a footprint statement"
method: GET
path: "/api/v1/billing/statements/{id}"
tags: ["Billing"]
---

# Get a footprint statement

`GET /api/v1/billing/statements/{id}`

## Request

- Base URL: `https://api.crbonfree.com`
- URL: `https://api.crbonfree.com/api/v1/billing/statements/{id}`
- 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/:id/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns the prepared or Trust-signed footprint statement for the statementId returned by the receipt list. It is scoped to the authenticated organization and includes close-time usage, footprint totals, and Trust links when signed. Paywalled.

## Path parameters

- `id` string, uuid, required

## Response `200`

Footprint statement

- object
  - `success` true, required
  - `data` object, required
    - `statement` 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

## 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
- `404`: Resource not found
- `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/statement/status` response property for the response status `200`
  - added the new `pending` enum value to the `data/statement/status` response property for the response status `200`
  - added the new `signing` enum value to the `data/statement/status` response property for the response status `200`
  - added the new `unavailable` enum value to the `data/statement/status` response property for the response status `200`
  - …1 more
- **2026-09-15** `59b60fef85d2`: 1 breaking, 1 info
  - the response property `data/statement/billingPeriodId` became nullable for the status `200`
  - added the required property `data/statement/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/:id/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)
