---
title: "Batch — up to 100 mixed-methodology calculations in one call"
method: POST
path: "/v1/calculate/batch"
tags: ["Calculate"]
---

# Batch — up to 100 mixed-methodology calculations in one call

`POST /v1/calculate/batch`

## Request

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

## Query parameters

- `as_of` string

## Request body

- object
  - `items` object[], required: Each item is dispatched to the same handler as its standalone endpoint, so an item may carry its own optional `country` and gets the same factor.resolution back. There is no batch-level country — items in one batch routinely belong to different countries.
    - `methodology` string
    - `input` object

## Response `200`

Per-item results + summed total

- BatchCalculation: Up to 100 mixed-methodology calculations in one call. A failed item does not fail the batch — it lands in results with its own error.
  - `methodology` string
  - `count` integer
  - `succeeded` integer
  - `failed` integer
  - `total` object: The summed emissions across items that succeeded.
  - `results` object[]: One entry per input item, in order. Each is the engine's own response shape, or an error for that item alone.
  - `meta` CalcMeta
    - `gc_version` string
    - `gc_updated` string
    - `reproducible` string: How to pin this result for an audit.
  - `receipt` Receipt: Deterministic tamper-evidence. To verify: remove the `receipt` and `attribution` keys from the response, sort every object's keys recursively, serialise to JSON with slashes and Unicode unescaped, and SHA-256 the result — it equals `receipt.id` with the `gcr_` prefix stripped. The receipt's own `verify` field states the same recipe.
    - `id` string
    - `algorithm` string
    - `mb_version` string
    - `verify` string: Plain-language instructions for recomputing the digest.
  - `attribution` Attribution, nullable: The credit the licence requires, or null on a plan that waives it. Was a bare STRING before 2026-08-25; the original string is preserved unchanged at `text`. `html` is a ready-to-paste anchor so that complying is less work than not complying, and `url` points at the public proof page for the exact factor and data version this answer used — your own audit evidence, not a marketing link.
    - `text` string: The plain credit line. Identical to the string this field used to be.
    - `html` string: A single anchor, no classes and no styling, ready to paste.
    - `url` string, nullable: Proof page for the factor this answer used, pinned to the data version — e.g. https://verify.greencalculus.com/grid.gbr.electricity.location_based@2026.181. Null where no single factor identifies the answer. The version is deliberate: an unversioned link would silently re-point at whatever the figure becomes.
    - `required` boolean: Whether this plan must display the credit. Reports the licence position, not a technical control.
  - `proof_urls` string[]: Every factor used by this answer, as a public proof URL pinned to the data version. A portfolio calculation may list many; cite per line from here. Contains no request data — each URL is a fact about the GreenCalculus corpus and is identical for every caller.

## Other responses

- `401`: Missing/invalid key
- `422`: A malformed item
- `503`: Shared calculation capacity full — a deliberate global concurrency cap protecting the origin, not an outage. Honour Retry-After. Identical repeat calls are served from a deterministic cache and never consume capacity.

---

[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)
