---
title: "Full consolidated factor feed (Business plan and above)"
method: GET
path: "/v1/corpus"
tags: ["Bulk"]
---

# Full consolidated factor feed (Business plan and above)

`GET /v1/corpus`

## Request

- Base URL: `https://api.greencalculus.com`
- URL: `https://api.greencalculus.com/v1/corpus`
- Auth: HTTP bearer

## Response `200`

All factors with values + provenance

- Corpus: Bulk feed, Business and above. Redistributable rows ONLY — filtering is driven by a per-source licence tier recorded against the data, and a source whose position has not been assessed is withheld. Every row carries redistributable: true so you can verify what you received.
  - `meta` object
  - `factors` FactorRow[]
    - `key` string
    - `name` string, nullable
    - `section` string, nullable
    - `activity_type` string, nullable
    - `factor` object
      - `value` number, nullable
      - `unit` string, nullable
      - `gas` string, nullable
      - `basis` string, nullable
      - `gwp_set` string, nullable
      - `gwp_set_basis` string, nullable: How we know the GWP set — "published" where the source states it, "inferred" where we deduced it. null means not recorded, which is deliberately NOT the same as published.
      - `country_iso3` string, nullable
      - `uncertainty` Uncertainty, nullable: The publisher's own stated range, never derived by us. null means NOT RECORDED — explicitly not a claim that no uncertainty exists.
        - `low` number, nullable
        - `high` number, nullable
        - `basis` string, nullable
        - `published_as` string, nullable: The publisher's exact wording, e.g. "±30-50%".
      - `uncertainty_basis` string, nullable: "none_published" means the publisher states plainly that no range exists. null means not recorded — a different fact from silence.
    - `source` SourceRef: Provenance to the line. Carried on 100% of rows — where in the source document the value was read, not just which document. A workbook cell where the publisher ships a workbook (DEFRA); otherwise the table, annex clause or page they did ship (IPCC, CBAM, ECCC).
      - `id` string
      - `cell_ref` string
      - `retrieved` string, date
    - `scope` object, nullable
      - `ghg_protocol` string, nullable
      - `category` string, nullable
    - `components` object, nullable: Per-gas decomposition keyed by gas (co2, ch4, n2o…), each with its own cell_ref. Lets a consumer re-base AR5↔AR6 without us.
    - `note` string, nullable: Includes what the publisher did NOT provide, stated verbatim.
    - `citation` FactorCitation: The canonical citation for one factor row, built by the API (src/citation.ts) and printed VERBATIM by every official client (Sheets add-in, JS and Python SDKs, MCP). Format: "<factor name>. <source name> — <publisher>, cell <cell_ref>, retrieved <date>. via GreenCalculus data version <version>, factor <key>. <proof URL>". On GET /v1/factors/{key} the version is the one actually SERVED, so a ?as_of= lookup cites the pin. Present on rows from 2026-09-09. The format is a published specification, free for anyone to implement against their own data: https://greencalculus.com/developers/citation/
      - `text` string
      - `source_id` string, nullable
      - `cell_ref` string, nullable
      - `version` string, nullable
      - `proof_url` string, nullable
    - `licence` object: The licence this row is published under, and whether the Business redistribution grant covers it. Present on the open browse from MB v2026.181 — the full terms, the required credit and the publisher are listed once per source under meta.licences. Absent (not empty) where no licence is on record: an empty value would read as "no licence applies".
      - `name` string
      - `redistributable` boolean

## Other responses

- `403`: Requires Business plan

---

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