ClimateCamp implements the PACT v3 Data Exchange Protocol — the WBCSD interoperability standard for exchanging product carbon footprints (PCFs) between trading partners. ClimateCamp acts as a PACT host: the footprints published in your account are served to authorized partners over the standard contract, so any PACT-conformant system can retrieve them — no bespoke integration per customer. This page shows how that exchange works.
PCFs you've calculated in ClimateCamp or uploaded, published to your company profile — shareable via Explore and over PACT.
A conformant PACT endpoint: list and fetch footprints, and exchange asynchronous events — authenticated per partner, scoped to what each partner is entitled to see.
Authorized customers list and fetch your published footprints in the standard schema, or request one on demand via events.
PACT uses OAuth 2.0 client-credentials. The PACT contract defines its own token endpoint — POST {base_url}/pact/auth/token — separate from the main ClimateCamp /auth/token. Exchange your client id/secret for a bearer token, then call the conformant endpoints under {base_url}/pact/. The token is scoped to your partner relationship — you only ever see footprints shared with you. Conformant clients can discover the token endpoint via GET {base_url}/pact/.well-known/openid-configuration.
curl -X POST {base_url}/pact/auth/token \ -d grant_type=client_credentials -d client_id=$ID -d client_secret=$SECRET # → { "access_token": "eyJ…", "token_type": "Bearer", "expires_in": 3600 }
| Action | Endpoint | Purpose |
|---|---|---|
| POST | /pact/auth/token | Auth — OAuth 2.0 client-credentials token endpoint for the PACT contract. |
| GET | /pact/footprints | ListFootprints — page through the footprints shared with you; filter by product or company id. |
| GET | /pact/footprints/{id} | GetFootprint — fetch a single footprint by its PACT id. |
| POST | /pact/events | Events — asynchronous notifications (CloudEvents): request a footprint on demand, and be notified when one is published or fulfilled. |
ProductFootprint objects; follow the Link header for the next page. Filter to narrow by product or supplier.curl "{base_url}/pact/footprints?$filter=productIds/any(p:p eq 'urn:gtin:09506000XXXXXX')" \
-H "Authorization: Bearer $TOKEN"curl "{base_url}/pact/footprints/{id}" -H "Authorization: Bearer $TOKEN"The exchanged object follows the PACT v3 ProductFootprint schema, so it imports directly into any conformant system. Values below are illustrative placeholders.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"specVersion": "3.0.0", "version": 1, "status": "Active",
"companyName": "Supplier A",
"companyIds": ["urn:lei:00000000000000000000"],
"productIds": ["urn:gtin:09506000XXXXXX"],
"productCategoryCpc": "3411",
"productNameCompany": "Example intermediate (1 kg)",
"pcf": {
"declaredUnit": "kilogram", "unitaryProductAmount": "1.0",
"pCfExcludingBiogenic": "2.34", "pCfIncludingBiogenic": "2.41",
"referencePeriodStart": "2025-01-01T00:00:00Z",
"referencePeriodEnd": "2025-12-31T23:59:59Z",
"geographyCountry": "DE", "primaryDataShare": 62.0
}
}
The footprints you exchange over PACT originate inside ClimateCamp. There are two routes, both ending in a published footprint on your company profile — there is no separate PACT "import" API call.
Once published, a footprint is served by the conformant endpoints above — partners retrieve it with ListFootprints / GetFootprint, no extra step on your side.
When a footprint isn't published yet, PACT supports an asynchronous request/fulfilment flow over POST /pact/events: a partner sends a Request event for a product, and the host replies with a Published (fulfilment) event once the footprint is available. Events carry the footprint id, which you then resolve with GetFootprint. This keeps both sides in sync without polling.
Built on the open PACT standard — opens in a new tab: PACT Technical Specifications v3 · Partnership for Carbon Transparency · GHG Protocol Product Standard