greencalculus-com Bulk API

Consolidated corpus feed

Operations 1

GET /v1/corpus Full consolidated factor feed (Business plan and above) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/greencalculus-com:greencalculus-com-bulk-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

greencalculus-com-bulk-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: GreenCalculus Bulk API
  version: v1
  description: 'Sourced greenhouse-gas emission factors and audit-traced carbon calculations. Every value returns with its exact source reference and data version — reproducible and citable. Free key at https://greencalculus.com/developers/.


    SCOPE: this document describes every endpoint we publish a callable example for — the data, calculation, discovery and watch endpoints. It deliberately excludes the control plane behind greencalculus.com (billing, sign-in, key management, admin), which is not a customer contract and is free to change, and /v1/account/webhook, whose configuration is session-only by design and therefore cannot be exercised with the bearer token this document describes. Those exclusions are enumerated and enforced by scripts/check-openapi-drift.mjs, so an endpoint is absent here because it was excluded, never because it was forgotten.'
  contact:
    name: GreenCalculus
    url: https://greencalculus.com/developers/
    email: jeremiah@greencalculus.com
  license:
    name: Attribution required except on Enterprise
    url: https://greencalculus.com/developers/docs/#attribution
servers:
- url: https://api.greencalculus.com
  description: Production
security:
- bearerAuth: []
tags:
- name: Bulk
  description: Consolidated corpus feed
paths:
  /v1/corpus:
    get:
      tags:
      - Bulk
      summary: Full consolidated factor feed (Business plan and above)
      security:
      - bearerAuth: []
      responses:
        '200':
          description: All factors with values + provenance
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Corpus'
        '403':
          description: Requires Business plan
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getV1Corpus
      x-operation-id-source: derived
components:
  schemas:
    Error:
      type: object
      description: The single error envelope, on every non-2xx response from every endpoint. Stated on /developers/docs and enforced at the gateway for origin-raised errors too — read the code from error.code.
      required:
      - error
      additionalProperties: true
      properties:
        error:
          type: object
          required:
          - code
          - message
          additionalProperties: true
          properties:
            code:
              type: string
              description: 'Stable machine-readable code. Transport-level: unauthorized, forbidden_tier, not_found, rate_limited, quota_exceeded, overage_cap_reached, busy, origin_unavailable, invalid_request. Validation codes are namespaced gc_* and named per endpoint (gc_unknown_param, gc_limit_too_large, gc_offset_invalid, gc_cursor_invalid, gc_section_conflict, and the per-engine gc_<engine>_* set).'
              example: gc_unknown_param
            message:
              type: string
              description: Human-readable and specific — a 4xx names the offending parameter and lists the accepted set.
              example: 'Unknown query parameter: bogus. This endpoint accepts: offset, cursor, limit, section, key_prefix, family, search. Free-text lookup is ?search=.'
            docs:
              type: string
              format: uri
              example: https://greencalculus.com/developers/docs/#errors
            details:
              type: object
              additionalProperties: true
              description: Present only when the failing endpoint attached structured detail beyond the HTTP status.
    Corpus:
      type: object
      description: '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.'
      additionalProperties: true
      properties:
        meta:
          type: object
          additionalProperties: true
        factors:
          type: array
          items:
            $ref: '#/components/schemas/FactorRow'
    FactorCitation:
      type: object
      description: '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/'
      externalDocs:
        description: The factor citation specification
        url: https://greencalculus.com/developers/citation/
      additionalProperties: true
      properties:
        text:
          type: string
          example: UK grid electricity — location-based (generation). UK Government GHG Conversion Factors 2026 — Department for Energy Security and Net Zero (DESNZ), cell 'UK electricity'!E25, retrieved 2026-06-18. via GreenCalculus data version 2026.186, factor grid.gbr.electricity.location_based. https://verify.greencalculus.com/grid.gbr.electricity.location_based@2026.186
        source_id:
          type:
          - string
          - 'null'
          example: DEFRA_2026
        cell_ref:
          type:
          - string
          - 'null'
          example: '''UK electricity''!E25'
        version:
          type:
          - string
          - 'null'
          example: '2026.186'
        proof_url:
          type:
          - string
          - 'null'
          example: https://verify.greencalculus.com/grid.gbr.electricity.location_based@2026.186
    Uncertainty:
      type:
      - object
      - 'null'
      additionalProperties: true
      description: The publisher's own stated range, never derived by us. null means NOT RECORDED — explicitly not a claim that no uncertainty exists.
      properties:
        low:
          type:
          - number
          - 'null'
        high:
          type:
          - number
          - 'null'
        basis:
          type:
          - string
          - 'null'
          example: published
        published_as:
          type:
          - string
          - 'null'
          description: The publisher's exact wording, e.g. "±30-50%".
    FactorRow:
      type: object
      description: 'One corpus row as returned by browse/search. Carries the full row INCLUDING factor.value — the browse endpoint is open and unmetered by design, because our data is overwhelmingly open-licensed at source and gating it would make this API worse than the original publisher. What a paid plan adds is the right to REDISTRIBUTE, not the ability to read. (Note: the MCP search_factors tool DOES project rows down to key/name/section — that projection is deliberate and specific to that tool.)'
      additionalProperties: true
      properties:
        key:
          type: string
          example: grid.gbr.electricity.location_based
        name:
          type:
          - string
          - 'null'
        section:
          type:
          - string
          - 'null'
          example: grid
        activity_type:
          type:
          - string
          - 'null'
          example: purchased_energy
        factor:
          type: object
          additionalProperties: true
          properties:
            value:
              type:
              - number
              - 'null'
            unit:
              type:
              - string
              - 'null'
              example: kg CO2e per kWh
            gas:
              type:
              - string
              - 'null'
              example: CO2e
            basis:
              type:
              - string
              - 'null'
            gwp_set:
              type:
              - string
              - 'null'
              example: AR5_100
            gwp_set_basis:
              type:
              - string
              - 'null'
              description: 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:
              type:
              - string
              - 'null'
              example: gbr
            uncertainty:
              $ref: '#/components/schemas/Uncertainty'
            uncertainty_basis:
              type:
              - string
              - 'null'
              description: '"none_published" means the publisher states plainly that no range exists. null means not recorded — a different fact from silence.'
        source:
          $ref: '#/components/schemas/SourceRef'
        scope:
          type:
          - object
          - 'null'
          additionalProperties: true
          properties:
            ghg_protocol:
              type:
              - string
              - 'null'
              example: scope2
            category:
              type:
              - string
              - 'null'
        components:
          type:
          - object
          - 'null'
          description: Per-gas decomposition keyed by gas (co2, ch4, n2o…), each with its own cell_ref. Lets a consumer re-base AR5↔AR6 without us.
          additionalProperties:
            type: object
            additionalProperties: true
        note:
          type:
          - string
          - 'null'
          description: Includes what the publisher did NOT provide, stated verbatim.
        citation:
          $ref: '#/components/schemas/FactorCitation'
        licence:
          type: object
          additionalProperties: true
          description: '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".'
          properties:
            name:
              type: string
              example: Open Government Licence v3.0
            redistributable:
              type: boolean
    SourceRef:
      type: object
      description: 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).
      additionalProperties: true
      properties:
        id:
          type: string
          example: DEFRA_2026
        cell_ref:
          type: string
          example: '''UK electricity''!E25'
        retrieved:
          type: string
          format: date
          example: '2026-06-18'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Your API key, e.g. "Bearer gc_live_…". Get one free at https://greencalculus.com/developers/.
externalDocs:
  description: The factor citation specification — the line that travels with every number
  url: https://greencalculus.com/developers/citation/