---
title: "PCAF Part A financed emissions (attribution + audit trail)"
method: POST
path: "/v1/calculate/pcaf"
tags: ["Calculate"]
---

# PCAF Part A financed emissions (attribution + audit trail)

`POST /v1/calculate/pcaf`

## Request

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

Version pinning is NOT available on this engine: the pin resolves keys named `*factor_key`, and this endpoint is addressed by `sector_key`, or by caller-supplied emissions with no factor at all. Sending ?as_of= here is a 400 rather than a silent fall back to current data — a calculation that carries a receipt has to be the version it claims.

## Request body

- object
  - `asset_class` string
  - `holdings` object[], required: Each holding may carry its own optional `country`, overriding the request-level one — a portfolio routinely spans economies, and the spend-based intensity used for one borrower may come from a different country than the next.
  - `country` string: Optional. The country the ACTIVITY belongs to — ISO3, ISO2 or a name ("deu", "DE", "Germany"). When given, the response carries factor.resolution stating whether the factor used is published for that country (tier: exact), is a global figure applied to it (global), or belongs to a different country (proxy, with proxy_of naming which). Omit it and no geography claim is made — the response is unchanged. A country we do not recognise yields no claim rather than a wrong one.

## Response `200`

Financed emissions + weighted data-quality score + audit

- PcafCalculation: PCAF financed emissions, per holding and in aggregate. The data-quality score is PCAF's 1-5 by DATA SOURCE TYPE — it is a property of YOUR inputs and asset class, not of our factor.
  - `methodology` string
  - `standard` string
  - `asset_class` string, nullable: The single asset class, when every holding shares one; null for a mixed portfolio.
  - `result` object
    - `financed_emissions` object
    - `weighted_data_quality_score` number, nullable
    - `holdings_count` integer
    - `data_quality_coverage` unknown
  - `holdings` object[]: Per holding, so a portfolio total can be traced to the line that produced it.
    - `id` string
    - `outstanding_amount` number
    - `denominator` object: { type: evic | equity_plus_debt, value }.
    - `attribution_factor` number
    - `company_emissions` object
    - `financed_emissions` object
    - `data_quality_score` number, nullable
  - `audit` object: The formula applied, the methodology source, and every factor used.
    - `formula` object: One named formula per step — attribution_factor, financed_emissions, weighted_dq_score — each written out in full.
    - `methodology_source` unknown
    - `factors_used` unknown
  - `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.

---

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