Technical Specifications for PCF Data Exchange (Version 3.0.0)

Release

Latest published version:
https://docs.carbon-transparency.org/ref/data-exchange-protocol/3.0.0/
Previous Versions:
Feedback:
pact@wbcsd.org with subject line “[data-exchange-protocol] … message topic …
GitHub

Abstract

This document specifies a data model for GHG emission data at product level based on the PACT Methodology (previously Pathfinder Framework) Version 3, and a protocol for interoperable exchange of GHG emission data at product level.

1. Introduction

This document contains the necessary technical foundation for the PACT Network, an open and global network for emission data exchange.

The goal of this document is to enable the interoperable exchange of Product Carbon Footprints across conforming host systems.

The methodological foundation of the specification is the PACT Methodology Version 3.0, see [PACT-METHODOLOGY].

For an overview of changes since the last version (2.3), see the Appendix A: Changelog.

1.1. Status of This Document

Comments regarding this document are welcome. Please file issues directly on GitHub, or send them to pact@wbcsd.org.

This document was published by Partnership for Carbon Transparency (PACT) after an update to the PACT Methodology was made.

The technical specifications within this document are the result of consensus processes by PACT members and the WBCSD.

PACT recommends the wide deployment of this specification.

1.2. Scope

The scope of this document is to reach interoperability for product-level GHG emission data exchange through the definition of a data model (§ 4 Data Model) based on the PACT Methodology Version 3.0 and the definition of a HTTP REST API (§ 5 HTTP REST API).

1.3. Intended Audience

This technical specification is for

1.4. About PACT and the PACT Network

The PACT (previously Pathfinder) Network is a concept developed by PACT and powered by the World Business Council for Sustainable Development (WBCSD). PACT is working toward the vision of an open and global network of interoperable solutions for the secure peer-to-peer exchange of accurate, primary and verified product emissions data – across all industries and value chains.

For further information, please refer to the PACT website and the PACT Pathfinder Network Vision Paper.

1.5. Disclaimer

While PACT encourages the implementation of the technical specifications by all entities to start creating a harmonized system, neither PACT, WBCSD, nor any other individuals who contributed to the development of this document assume responsibility for any consequences or damages resulting directly or indirectly from the use of this document.

1.6. Acknowledgements

WBCSD would like to thank all PACT members, WBCSD staff, and others who shared their detailed and thoughtful input and contributed actively to the development of this document.

PACT would also like to expressly thank the 40+ solutions which implemented V2 of the PACT Technical Specifications and became conformant during 2023 and 2024, resulting in significant learnings and feedback which is now incorporated in V3.

1.7. License

Refer to the LICENSE for use of this document.

2. Terminology

Data Model Extension

A data model extension is a set of definitions that extends the data model of this document.

The encoding of a data model extension in the data model is specified in § 4.8 DataModelExtension

See [DATA-MODEL-EXTENSIONS] and [EXTENSIONS-GUIDANCE] for further details.

Data recipient

The company requesting and/or receiving PCF data from another company, using the technical means specified in this document.

Data owner

The company exchanging PCF data with another company, using the technical means specified in this document.

interoperable

The quality of being able to exchange data between host systems irrespective of the vendors of the host systems, without the need for translation or transformation of the data.

Greenhouse Gas (emissions) (GHG)

Gaseous constituents of the atmosphere, both natural and anthropogenic, that absorb and emit radiation at specific wavelengths within the spectrum of infrared radiation emitted by the Earth’s surface, its atmosphere and clouds. GHGs include CDCO₂, Methane (CH4), Nitrous Oxide(N₂O), Hydrofluoro-Carbons (HFCs), Perfluorocarbons (PFCs) and Sulfur Hexafluoride (SF6).

OpenId Provider Configuration Document

A OpenId Provider Configuration Document document provided in accordance with [OPENID-CONNECT] Section 4

Partnership for Carbon Transparency (PACT)

A WBCSD-led group of companies and organizations working together to develop a global and open network for the secure peer-to-peer exchange of accurate, primary and verified product emissions data. See www.carbon-transparency.org for more information.

PACT Methodology Version 3.0 (PACT Methodology)

Guidance for the Accounting and Exchange of Product Life Cycle Emissions, building on existing standards and protocols, such as the GHG Protocol Product standard. Previously named PACT Framework. See [PACT-METHODOLOGY] for further details.

PACT Network

An information network (previously Pathfinder Network) of and for companies to securely exchange environmental data with each other, with an initial focus on PCF data.

Product Carbon Footprint (PCF)

The carbon (equivalent) emissions relating to a product. Products can be any kind of item exchanged between entities, including metric or volumetric quantities of a product. The ProductFootprint data model is a digital representation of a PCF in accordance with the PACT Methodology.

Solution Provider

An entity providing technical solutions to companies by implementing and offering host systems.

Solution

Any PACT-conformant software host system is called a solution.

UN geographic region, UN geographic subregion

See https://unstats.un.org/unsd/methodology/m49/ for details.

3. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words MAY, MUST, MUST NOT, SHALL, SHALL NOT, OPTIONAL, RECOMMENDED, REQUIRED, SHOULD, and SHOULD NOT in this document are to be interpreted as described in [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

A conforming host system is any algorithm realized as software and/or hardware that complies with the relevant normative statements in § 5 HTTP REST API.

A conforming requesting data recipient is any algorithm realized as software and/or hardware that complies with the relevant normative statements in § 5 HTTP REST API.

4. Data Model

4.1. Introduction

This section specifies a data model for product footprints conforming with the PACT Methodology Version 3.

The overall data model is designed for interactions between data owners and data recipients, to enable (i) interoperability, (ii) comparability of and transparency over product footprints, or (iii) the calculation of derived CarbonFootprints from other CarbonFootprints.

The data model consists of the following major data types:

  1. ProductFootprint: contains information to identify a product, plus further information such as the CarbonFootprint

  2. CarbonFootprint: contains information related to the carbon footprint of a product.

  3. DataModelExtension: contains additional information beyond the data model specified in this document.

Additional uses of the data model are supported through the concept of Data Model Extensions. These allow data owners to add further information to a ProductFootprint.

4.2. Validation

This specification defines two distinct validation layers that serve different purposes:

  1. OpenAPI Schema Definition - The schema definition for the data model API specifies the technical requirements for machine-to-machine communication and exchange of PCFs. Software implementations MUST adhere to these requirements for interoperability.

  2. PACT Methodology Reporting Rules - A set of rules that state what data to include to properly follow carbon reporting practices. These rules indicate which properties are expected to be filled in according to the PACT Methodology.

A conformant software implementation MUST adhere to the OpenAPI schema for all API methods and data objects.

Additionally, implementations CAN incorporate functionality to assist end-users with following the PACT Methodology reporting rules, such as by validating inputs or signaling missing information. This logic should be implemented in the user interface of the application, while inter-machine communication is governed solely by the OpenAPI schema.

4.3. OpenAPI Schema

The data model and API actions described here are formally defined in the [OpenAPI] specification available at https://docs.carbon-transparency.org/.

The OpenAPI schema serves two critical functions:

  1. It defines the complete structure of the PACT data model, including all data types, properties, and their relationships.

  2. It specifies the technical requirements for API compliance, including:

Implementations MUST conform to this schema to ensure interoperability when exchanging product footprints through the REST API. The schema should be considered the authoritative technical reference for all implementation decisions related to data structure and API communication.

4.3.1. Basic Types

The following basic types are used in the data model:

Type Description
string Any string of undetermined length, including the empty string ""
"Sample string"
string<uuid> String representation of a UUID, see RFC4122
"{91715e5e-fd0b-4d1c-8fab-76290c46e6ed}"
string<urn> String representation of a URN, see RFC8141
"urn:gtin:5695872369587"
string<decimal> Non-integer numbers in the data model MUST be represented as decimal strings.
"12.3456",
"-9876.5432102"
"1.2345e+6"
integer Non-fractional numbers SHOULD be represented as integers.
123,
-456
string<datetime> Dates MUST be formatted according to [ISO8601-1]
"2025-04-23T18:25:43.511Z"
"2025-04-24T12:13:44Z"
boolean Boolean flag: true or false
true

4.3.2. Qualifiers

Types can have the following qualifiers. Any data object send to or from the API MUST to adhere to these for interoperability between host systems.

Qualifier Description
Required The property MUST be provided and MUST NOT be null.
NonEmpty The string or array MUST have a length >= 1
Unique All items in an array MUST be unique

4.4. PACT Methodology Reporting Rules

In addition to the technical requirements defined in the OpenAPI schema, the PACT Methodology defines a set of reporting expectations for carbon footprint data.

These rules indicate which properties SHALL, SHOULD or MAY be provided in specific reporting contexts, even if they are technically optional in the API schema. These reporting rules are expressed using the following notation:

Where applicable, the specification below also includes information on the unit of certain properties (e.g. kgCO2e: kilogram CO2 equivalent) and if values are expected to be negative or positive.

SHALL Value is required to report on
BIO Required if biogenic and land sector related emissions are applicable, 0 if not applicable, blank if unknown or unavailable
BIO-2027 Required per 31/12/2027 if biogenic and land sector related emissions are applicable , 0 if not applicable, blank if unknown or unavailable.
CCU Required if CCU applicable and data known and available, blank otherwise.
CCS Required if CCS applicable and data known and available, blank otherwise.
SHOULD Value is recommended to report on, exceptions are possible.
MAY Value is optional to report on

See PACT Methodology for more details.

4.5. Undefined Properties

In a JSON object, a property is deemed undefined if it is either not present in the object or explicitly set to null. For example:

{
  "property1": "value1",
  "property2": null
}

In this example, property2 is considered undefined. Also, any property not present in the object, for example property3 is also considered undefined.

4.6. ProductFootprint

ProductFootprint is a data type which represents the carbon footprint of a product under a specific scope (§ 4.7.1 Scope of a CarbonFootprint) and with values calculated in accordance with the PACT Methodology.

The objective of a ProductFootprint is to provide interoperability between the creator (the data owner) and the consumer (the data recipient) of ProductFootprints. The details on the exchange of ProductFootprints are specified in § 5 HTTP REST API.

Conceptually, the data type ProductFootprint is modeled as a multi-purpose container for product-specific emission factors which is supported by extensibility through Data Model Extensions.

Data Model Extensions enable data owners to exchange additional information related to a product with data recipients. The details are specified in § 4.8 DataModelExtension as well as [EXTENSIONS-GUIDANCE], and [DATA-MODEL-EXTENSIONS].

Each ProductFootprint can and should be updated over time, for instance to incorporate new or refined data from data owners (see § 7 Product Footprint Lifecycle).

4.6.1. Properties

Name Description
id
required string <uuid>

A unique identifier that a system uses to refer to the entire dataset of the PCF. This is typically an automatically-generated number by the solution to maintain the required technical references to data within the system.

"id": "f4b1225a-bd44-4c8e-861d-079e4e1dfd69"
specVersion
required string

The version of the PACT Technical Specifications that the data being shared complies with. This is a string in the format of "major.minor.patch" (e.g. "3.0.0").

"specVersion": "3.0.0"
precedingPfIds
array of string <uuid>

A given PCF may change over time, due to updates to the calculation. This is a list of IDs that reflect "past versions" of the current PCF, maintained by the solution. If defined, MUST be non-empty set of IDs.

See § 7 Product Footprint Lifecycle for details.

"precedingPfIds": [
  "f4b1225a-bd44-4c8e-861d-079e4e1dfd69",
  "079e425a-464f-528d-341d-4a944a1dfd70"
]
created
required string <date-time>

The date and time when the PCF was created. This is typically an automatically generated field by the solution. It SHOULD NOT be used to derive status of validity of the PCF.

See § 7 Product Footprint Lifecycle for details.

"created": "2024-10-31T00:00:00Z"
status
required string <enum>
"Active" "Deprecated"

The status of the PCF. Active means that the PCF is the most recent version and is the one that SHOULD be used by a data recipient, e.g. for product footprint calculations. Deprecated means that the PCF is no longer the most recent version and SHOULD NOT be used by data recipients.

See § 7 Product Footprint Lifecycle for details.

"status": "Active"
validityPeriodStart
string <date-time>

The start date of the validity period: the time interval during which the ProductFootprint is declared as valid for use by a receiving data recipient.

If no validity period is specified, the ProductFootprint is valid for 3 years after the referencePeriodEnd

See § 7.3 Validity Period for details.

Methodology section 3.2.3
validityPeriodEnd
string <date-time>

The end date and time of the validity period. After this date the ProductFootprint is not valid for use anymore. See § 7.3 Validity Period for more details.

Methodology section 3.2.3
companyName
required string

The name of the company that is the PCF Data Owner

companyIds
required array of string <urn>

The non-empty set of Uniform Resource Names (URN). Each value of this set is supposed to uniquely identify the ProductFootprint Data Owner.

"companyIds": [
  "urn:company:example:company1"
]
productDescription
required string

The free-form description of the product, including any additional relevant information such as production technology, packaging, process, feedstock and technical parameters (e.g. dimensions). Products which are services (i.e. consulting) should include a short description of the service.

productIds
required array of string <urn>

The non-empty set of Product IDs in URN format. Each of the values in the set is supposed to uniquely identify the product. See § 8.1 Product Identifier URN’s for syntax and examples.

productClassifications
array of string <urn>

The non-empty set of Product Classifications in URN format. Each of the values in the set can classify the product as part of distinct groupings and categorizations. See § 8.2 Product Classification URNs.

"productClassifications": [
  "urn:pact:productclassification:un-cpc:1234"
]
productNameCompany
required string

The name with which the company producing the product refers to it, i.e. the product’s trade name. Recognizable by the receiver of the PCF information.

comment
string

Any additional information related to the PCF. Whereas the property productDescription contains product-level information, comment should be used for information and instructions related to the calculation of the PCF, or other information which informs the ability to interpret (e.g. LUC not included as unable to calculate LUC), to audit, or to verify the PCF.

Information explaining the current status of the PCF, what was changed since the last version, etc. If the PCF was changed since a previous version, indicate all methodological and/or production process change(s) that occurred to result in the PCF change. For example, include the relevant change(s) from the list below:

  1. In case product or sector specific guidance used does not align with PACT Methodology’s requirement, the areas of disalignment should be specified in the comment section (e.g. allocation rules, exemption rules, data quality metrics).

  2. Information explaining the current status of the PCF, what was changed since the last version, etc. If the PCF was changed since a previous version, indicate all methodological and/or production process change(s) that occurred to result in the PCF change. E.g., include the relevant change(s) from the list below:

Methodological:

  • Access to new Emission Factor data (database, supplier-specific, company-specific)

  • Updated upstream data (i.e. upstream supplier updated their PCF based on methodology change)

Production Process:

  • Change in process

  • Change in feedstock

  • Change from conventional to certified sustainable material

  • Change in energy source

  • Change in upstream supplier

  • Updated upstream data (i.e. upstream supplier updated their PCF based on process change)

  1. Additional information on biogenic emissions & removals calculation should be specified. This includes information on tools used for calculations (e.g. Cool Farm Tool), and methodological choices made in calculation of biogenic emissions and removals (e.g. Statistical or Direct Land use change calculation for DLUC calculations).

pcf

The carbon footprint of the given product with value conforming to the data type CarbonFootprint.

extensions

If defined, 1 or more data model extensions associated with the ProductFootprint. See DataModelExtension for details.

4.7. CarbonFootprint

A CarbonFootprint represents the carbon footprint of a product and related data in accordance with the PACT Methodology.

4.7.1. Scope of a CarbonFootprint

Each CarbonFootprint is scoped by

  1. Time Period: the time period is defined by the properties referencePeriodStart and referencePeriodEnd (see PACT Methodology section 3.2.3)

  2. Geography: further set by the properties geographyRegionOrSubregion, geographyCountry, and geographyCountrySubdivision (see PACT Methodology section 3.2.3)

If a CarbonFootprint

  1. Has geographical granularity Global, then the properties geographyCountry and geographyRegionOrSubregion and geographyCountrySubdivision MUST be undefined;

  2. Has a regional or sub-regional geographical granularity, then the property geographyRegionOrSubregion MUST be defined and the properties geographyCountry and geographyCountrySubdivision MUST be undefined;

  3. Has a country-specific geographical granularity, then property geographyCountry MUST be defined AND the properties geographyRegionOrSubregion and geographyCountrySubdivision MUST be undefined;

  4. Has a country subdivision-specific geographical granularity, then property geographyCountrySubdivision MUST be defined AND the properties geographyRegionOrSubregion and geographyCountry MUST be undefined.

4.7.2. Properties

Name Description
declaredUnitOfMeasurement
required string <enum>
"liter" "kilogram" "cubic meter" "kilowatt hour" "megajoule" "ton kilometer" "square meter" "piece" "hour" "megabit second"

The unit of measurement of the product. Together with declaredUnitAmount this defines the 'declared unit' of the product. Emissions in this carbon footprint are expressed in kgCO2e per 'declared unit'.

For example: a PCF for a 12 liter bottle of Ethanol states 2 kg of CO2e in emissions. In this case the declared unit is 12 liter Ethanol, thus the declaredUnitOfMeasurement is "liter", and the declaredUnitAmount is 12.

Methodology section 3.2.4
declaredUnitAmount
required string <decimal>

The amount of units contained within the product to which the PCF is referring.

For example: if the product is a car door weighing 80kg, declaredUnitAmount will be 80 and declaredUnitOfMeasurement will be kilogram.

declared unit, > 0
Methodology section 3.2.4
productMassPerDeclaredUnit
required string <decimal>

The mass (in kg) of the product excluding packaging. The 'declared unit' is the declaredUnitAmount times declaredUnitOfMeasurement.

For example, if the declared unit is piece, this attribute MUST be populated with the mass of declaredUnitAmount pieces of the product. If the declared unit is liter, this attribute MUST be populated with the mass of declaredUnitAmount liters of the product.

If the product mass is not relevant (i.e. PCF is for an energy (kWh, MJ), logistics (ton.km) or service related product), this attribute SHALL be populated with 0.

For the full list of declared units requiring to report a mass per declared unit attribute please refer to table 4 in the PACT Methodology.

Methodology section 3.2.4
referencePeriodStart
required string <date-time>

The start (inclusive) of the time boundary for which the PCF value is considered to be representative. Specifically, this start date represents the earliest date from which activity data was collected to include in the PCF calculation.

Methodology section 3.2.3
referencePeriodEnd
required string <date-time>

The end (exclusive) of the time boundary for which the PCF value is considered to be representative. Specifically, this end date represents the latest date from which activity data was collected to include in the PCF calculation.

Methodology section 3.2.3
geographyRegionOrSubregion
string <enum>
"Africa" "Americas" "Asia" "Europe" "Oceania" "Australia and New Zealand" "Central Asia" "Eastern Asia" "Eastern Europe" "Latin America and the Caribbean" "Melanesia" "Micronesia" "Northern Africa" "Northern America" "Northern Europe" "Polynesia" "South-eastern Asia" "Southern Asia" "Southern Europe" "Sub-Saharan Africa" "Western Asia" "Western Europe"

If present, the value MUST be one of the UN geographic regions or UN geographic subregions. See § 4.7.1 Scope of a CarbonFootprint for further details. Additionally, see the PACT Methodology Section 3.2.3.

"geographyRegionOrSubregion": "Eastern Asia"
Methodology section 3.2.3
geographyCountry
string

If present, the value MUST conform to the ISO 3166-1 alpha-2 country code. See § 4.7.1 Scope of a CarbonFootprint for further details.

"geographyCountry": "US"
SHOULD, ISO 3166-1 alpha-2
Methodology section 3.2.3
geographyCountrySubdivision
string

If present, a ISO 3166-2 country and subdivision code. See § 4.7.1 Scope of a CarbonFootprint for further details.

"geographyCountrySubdivision": "US-CA"
SHOULD, ISO 3166-2
Methodology section 3.2.3
boundaryProcessesDescription
string

Brief description of the processes attributable to each life cycle stage included in the PCF (e.g. electricity consumption for manufacturing), especially those that significantly contribute manufacturing steps of the product (including general description of used technologies).

Methodology section 3.2
pcfExcludingBiogenicUptake
required string <decimal>

The PCF of the product:

Including:

  • All fossil emissions (CO2, CH4, N2O, HFCs, SF6, NF3, PFCs, HFEs, PFPEs, CFCs and HCFSs) from stationary/mobile combustion, industrial processes and fugitive emissions

  • All land sector-related related emissions (CO2, N2O, PFCs)

  • All biogenic emissions (biogenic CH4, biogenic CO2)

  • Land management removals and technological removals

Excluding:

  • Biogenic Product CO2 uptake

kgCO2e/declared unit
Methodology section 3.3.1
pcfIncludingBiogenicUptake
required string <decimal>

The PCF of the product:

Including:

  • All fossil emissions (CO2, CH4, N2O, HFCs, SF6, NF3, PFCs, HFEs, PFPEs, CFCs and HCFSs) from stationary/mobile combustion, industrial processes and fugitive emissions

  • All land sector-related related emissions (CO2, N2O, PFCs)

  • All biogenic emissions (biogenic CH4, biogenic CO2)

  • Land management removals and technological removals

  • Biogenic Product CO2 uptake

kgCO2e/declared unit
Methodology section 3.3.1
fossilCarbonContent
required string <decimal>

The fossil carbon content of the product (mass of carbon).

kgC/declared unit, >= 0
Methodology section 3.3.2.4
biogenicCarbonContent
string <decimal>

The biogenic carbon content of the product (mass of carbon).

kgC/declared unit, >= 0
Methodology section 3.3.2.4
recycledCarbonContent
string <decimal>

The carbon content (both biogenic and fossil) from recycled material in the product (mass of carbon).

kgC/declared unit, >= 0
Methodology section 3.3.2.2
fossilGhgEmissions
required string <decimal>

The emissions from fossil sources as a result of fuel combustion, from fugitive emissions, and from process emissions.

Expressed in kgCO2e per declared unit.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.4
landUseChangeGhgEmissions
string <decimal>

GHG emissions from land-use change, such as deforestation or conversion from natural forest to plantation forest, that cause carbon stock loss.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.4
landCarbonLeakage
string <decimal>

Placeholder for indirect land use change causing displacement of food production, outside of value-chain

kgCO2e/declared unit, >= 0
landManagementFossilGhgEmissions
string <decimal>

Fossil CO2, N2O, fossil CH4, HFCs and PFCs emissions due to land management practices.

Note: fossilGhgEmissions already includes these emissions.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.4
landManagementBiogenicCO2Emissions
string <decimal>

Biogenic CO2 emissions occurring due to recurring land management actions on land within the same land-use category.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.4
landManagementBiogenicCO2Removals
string <decimal>

Biogenic CO2 removals resulting from a net increase in carbon stored in land-based carbon pools (e.g. reforestation and afforestation). Subject to traceability requirements.

kgCO2e/declared unit, <= 0
Methodology section 3.3.2.4
biogenicCO2Uptake
string <decimal>

Temporary CO2 uptake of biomass in the product at point of leaving factory gate.

kgCO2e/declared unit, <= 0
Methodology section 3.3.2.4
biogenicNonCO2Emissions
string <decimal>

CH4 emissions from land management practices and the oxidation and transformation or degradation of biomass.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.4
landAreaOccupation
string <decimal>

The amount of agricultural land occupied in the reporting year to produce the product.

(m2/year) / declared unit, >= 0
Methodology section 3.3.2.4
aircraftGhgEmissions
string <decimal>

If present, the GHG emissions resulting from aircraft engine usage for the transport of the product, excluding radiative forcing.

The aircraft emissions are excluding biogenic CO2 uptake.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.1
packagingEmissionsIncluded
boolean

Indicates whether packaging emissions are included in the scope and boundary of the product carbon footprint.

If true, packaging emissions are included in the product carbon footprint, and the packagingGhgEmissions property SHOULD be defined.

If false, packaging emissions are not included in the product carbon footprint, and the packagingGhgEmissions property MUST be undefined.

Methodology section 3.3.1.1
packagingGhgEmissions
string <decimal>

Emissions resulting from the packaging of the product. SHOULD be defined if packagingEmissionsIncluded is true and MUST be undefined if packagingEmissionsIncluded is false.

Packaging emissions are excluding biogenic CO2 uptake.

kgCO2e/declared unit, >= 0
Methodology section 3.3.1.1
packagingBiogenicCarbonContent
string <decimal>

The biogenic carbon content of the packaging (mass of carbon).

kgC/declared unit, >= 0
Methodology section 3.3.1.1
outboundLogisticsGhgEmissions
string <decimal>

Emissions resulting from outbound logistics should be calculated and reported separately up to the point where another company (e.g., customer) takes over responsibility for the product (i.e. own or pay for the outbound logistics). MUST be undefined if the company calculating and exchanging the PCF is not responsible for the outbound logistics.

The outbound logistics emissions are excluding biogenic CO2 uptake.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.1
ccsTechnologicalCO2CaptureIncluded
boolean

Indicates whether CCS (including BECCS) take place within the scope and boundary of the product carbon footprint.

If true, ccsTechnologicalCO2Capture, technologicalCO2Removals and technologicalCO2CaptureOrigin shall be defined if known and available.

If false, ccsTechnologicalCO2Capture, technologicalCO2Removals and technologicalCO2CaptureOrigin shall be undefined.

Methodology section 3.3.2.5
ccsTechnologicalCO2Capture
string <decimal>

The amount of CO2 captured with Carbon Capture and Storage (CCS) technologies.

kgCO2e/declared unit, <= 0
Methodology section 3.3.2.5
technologicalCO2CaptureOrigin
string

For CCU: Information about the origin (fossil or biogenic) and path of the captured CO2 used in CCU, including the name and location of the capture facility. This information enhances transparency and traceability, enabling tracking of CO2 across the value chain.

For CCS: Traceability data, i.e. information on location injection site, geological reservoir as part of the overall technological CO2 capture origin data point for the PCF.

Methodology section 3.3.2.5
technologicalCO2Removals
string <decimal>

CO2 removed directly from the atmosphere or via biogenic CO2 capture. Subject to reporting requirements.

kgCO2e/declared unit, >= 0
Methodology section 3.3.2.5
ccuCarbonContent
string <decimal>

The amount of captured carbon (both biogenic and fossil) during CCU (Carbon Capture & Usage) in the product.

kgC/declared unit, >= 0
Methodology section 3.3.2.5
ccuCalculationApproach
string <enum>
"Cut-off" "Credit"

The calculation approach for CCU: "Cut-off" or "Credit."

Methodology section 3.3.2.5
ccuCreditCertification
string <uri>

(Only for Credit Approach) a URL to documentation verifying the certification from an external bookkeeping scheme. This attribute ensures reliability and avoids double counting of credits within the crediting system.

Methodology section 3.3.2.5
ipccCharacterizationFactors
required array of string

The characterization factors from one or more IPCC Assessment Reports used in the calculation of the PCF. It MUST be a non-empty set of strings with the format AR$VERSION$, where $VERSION$ stands for the IPCC report version number and MUST be an integer.

Per the Methodology the latest available characterization factor version shall be used, i.e., ["AR6"]. In the event this is not possible, include the set of all characterization factors used.

"ipccCharacterizationFactors": [
  "AR6"
]
Methodology section 3.2.2
crossSectoralStandards
required array of string <enum>
"ISO14067" "ISO14083" "ISO14040-44" "GHGP-Product" "PEF" "PACT-1.0" "PACT-2.0" "PACT-3.0"

The cross-sectoral standards applied for calculating or allocating GHG emissions.

It MUST be a non-empty array and SHOULD contain only the following values without duplicates:

ISO14067

for the ISO 14067 Standard, "Greenhouse gases — Carbon footprint of products — Requirements and guidelines for quantification"

ISO14083

for the ISO 14083 Standard, "Greenhouse gases — Quantification and reporting of greenhouse gas emissions arising from transport chain operations"

ISO14040-44

for the ISO 14040-44 Standard, "Environmental management — Life cycle assessment — Principles and framework"

GHGP-Product

for the Greehouse Gas Protocol (GHGP) Product Standard

PEF

for the EU Product Environmental Footprint Guide

PACT-1.0
PACT-2.0
PACT-3.0

for a given version of the PACT Methodology. It is recommended to use the latest version of the Methodology.

PAS2050

for the Publicly Available Specification (PAS) 2050, "Specification for the assessment of the life cycle greenhouse gas emissions of goods and services". The use of this standard is permitted but not recommended.

The enumeration of standards above CAN evolve in future revisions. A host system MUST accept ProductFootprints from later revisions with crossSectoralStandards containing values that are not defined in this specification.

"crossSectoralStandards": [
  "ISO14067",
  "PACT-3.0"
]
Methodology section 3.1.2
productOrSectorSpecificRules

The product-specific or sector-specific rules applied for calculating or allocating GHG emissions. If no product or sector specific rules were followed, this set MUST be empty.

"productOrSectorSpecificRules": [
  {
    "operator": "PEF",
    "ruleNames": [
      "PEF 1.0",
      "PEF 2.0"
    ]
  },
  {
    "operator": "PCR",
    "ruleNames": [
      "PCR-A"
    ]
  }
]
Methodology section 3.1.2
exemptedEmissionsPercent
required string <decimal>

The percentage of emissions excluded from the PCF.

"exemptedEmissionsPercent": "5.3"
Methodology section 3.3.1.2
exemptedEmissionsDescription
string

Rationale behind exclusion of specific PCF emissions, CAN be the empty string if no emissions were excluded.

Methodology section 3.3.1.2
allocationRulesDescription
string

Description of the allocation rules applied to the PCFs foreground data including an explanation of the underlying reasons (way of allocating all activities from manufacturing steps to the declared unit).

Methodology section 3.3.1.3
secondaryEmissionFactorSources

If secondary data was used to calculate the CarbonFootprint, then it MUST include the property secondaryEmissionFactorSources with value the emission factors used for the CarbonFootprint calculation.

If no secondary data is used, this property MUST BE undefined.

"secondaryEmissionFactorSources": [
  {
    "name": "ecoinvent",
    "version": "3.7"
  }
]
Methodology section 3.2.3
primaryDataShare
string <decimal>

Share of primary data in the final absolute PCF value excluding biogenic CO2 uptake (pcfExcludingBiogenicUptake).

Methodology section 4.2.2
dqi

Data Quality Indicators (dqi) in accordance with the PACT Methodology.

Methodology section 4.2.3
verification

The presence of the Verification object indicates whether or not the CarbonFootprint has been verified in line with PACT Methodology requirements.

4.8. DataModelExtension

Each data model extension MUST be a valid JSON object conforming with the JSON Representation of a Data Model Extension.

See [DATA-MODEL-EXTENSIONS] for technical details and [EXTENSIONS-GUIDANCE] for data model extension guidance.

Example imaginary Data Model Extension for encoding shipment-related data, encoded in JSON:
{
  "specVersion": "2.0.0",
  "dataSchema": "https://reg.carbon-transparency.org/shipment/1.0.0/data-model.json",
  "data": {
    "shipmentId": "S1234567890",
    "consignmentId": "Cabc.def-ghi",
    "shipmentType": "PICKUP",
    "weight": 10,
    "transportChainElementId": "ABCDEFGHI"
  }
}

4.8.1. Properties

Name Description
specversion
string

The version of the Data Model Extension specification. The value MUST be a string in the format major.minor.patch as defined in Semantic Versioning 2.0.0.

dataSchema
required string <uri>

The value MUST be the URL to the publicly accessible Extension Schema File

documentation
string <uri>

The value MUST be the URL to the publicly accessible Extension Documentation.

data
required object

The value MUST be a JSON Object that conforms to the extension schema file referenced by the dataSchema property.

4.9. ProductOrSectorSpecificRule

A ProductOrSectorSpecificRule refers to a set of product or sector specific rules published by a specific operator and applied during product carbon footprint calculation.
{
  "operator": "PEF",
  "ruleNames": [
    "PEF 1.0",
    "Other"
  ]
}

4.9.1. Properties

Name Description
operator
required string <enum>
"PEF" "EPD International" "Other"

Selection of operator of PCR being used for the PCF calculation. If operator is not available in the given list, or if a sector specific guidance has been followed, please set "Other" and include details under "otherOperatorName".

"operator": "PEF"
ruleNames
required array of string

Names of the product or sector specific rules being used for the PCF calculation.

"ruleNames": [
  "PEF 1.0",
  "PEF 2.0"
]
otherOperatorName
string

If operator is Other, then this attribute must be populated with the name of the operator.

4.10. EmissionFactorSource

References emission factor databases, see PACT Methodology Section 4.1.3.2.
{
  "name": "ecoinvent",
  "version": "3.9.1"
}

4.10.1. Properties

Name Description
name
required string

Name of the secondary emission factor database

"name": "ecoinvent"
version
required string

Version of the secondary emission factor database

"version": "3.9.1"

4.11. DataQualityIndicators

Data type DataQualityIndicators contains the quantitative data quality indicators.
Example value for the case that all DQIs are known but no coverage after exemption assessment performed:
{
  "technologicalDQR": "5.0",
  "geographicalDQR": "2.0"
  "temporalDQR": "3.0",
}

4.11.1. Properties

Name Description
technologicalDQR
required string <decimal>

Quantitative data quality rating (DQR) based on the data quality matrix, scoring the technological representativeness of the sources used for the final absolute PCF excluding biogenic CO2 uptake calculation based on weighted average of all inputs.

The value MUST be between 1 and 5 inclusive.

geographicalDQR
required string <decimal>

Quantitative data quality rating (DQR) based on the data quality matrix, scoring the geographical representativeness of the sources used for the final absolute PCF excluding biogenic CO2 uptake calculation based on weighted average of all inputs.

The value MUST be between 1 and 5 inclusive.

temporalDQR
required string <decimal>

Quantitative data quality rating (DQR) based on the data quality matrix, scoring the temporal representativeness of the sources used for the final absolute PCF excluding biogenic CO2 uptake calculation based on weighted average of all inputs.

The value MUST be between 1 and 5 inclusive.

4.12. Verification

Contains the verification in conformance with the PACT Methodology.
{
  "coverage": "PCF program",
  "providerName": "My Auditor",
  "completedAt": "2025-04-08T14:47:32Z"
  "standardName": "ISO 14044"
}

4.12.1. Properties

Name Description
coverage
string <enum>
"PCF calculation model" "PCF program" "product level"

The coverage of the verification defines the type and level of GHG data to be verified.

Methodology section 5.3.3
providerName
string

The non-empty name of the independent third party engaged to undertake the verification.

Methodology section 5.3.7
completedAt
string <date-time>

The date at which the verification was completed

standardName
string

Name of the standard against which the PCF was assured

comments
string

Any additional comments that will clarify the interpretation of the verification.

4.13. Error

Object with error code and description, to be returned by the API methods in case of error. See § 5.4 Error Handling for details.
{ 
  "code": "NotFound",
  "message": "The requested footprint could not be found." 
}

4.13.1. Properties

Name Description
code
required string <enum>
"BadRequest" "AccessDenied" "TokenExpired" "NotFound" "InternalError" "NotImplemented"

Error code identifier.

message
required string

Human readable error message.

5. HTTP REST API

5.1. Introduction

This section defines an HTTP-based API for the interoperable exchange of Product Footprint data between host systems.

The scope of the HTTP API is minimal by design. Additional features will be added in future versions of this specification.

5.2. Host System

A host system serves the needs of a single or multiple data owners. Additionally, a host system can also serve the needs of data recipients if it retrieves data from other host systems by calling their API.

In other words, any host system which implements the API endpoints as described in this specification can play the role of data owner as well as of data recipient, thus mirroring real-world supply chains. See § 6 Exchanging Footprints for more details.

A host system MUST implement the following actions:

The host system MUST make footprints available for a data recipient through BOTH Action ListFootprints AND Action Events. Any product footprint obtained through an asynchronous request MUST also be retrievable through both synchronous methods, AND vice versa. This symmetry ensures any conformant host system in a supply chain can act as a data owner and a data recipient

A host system SHOULD implement access management to control what PCFs it accepts and makes available to which data recipients.

A host system MUST offer its actions over HTTPS only.

A host system MUST authenticate any client prior to using the above actions.

A host system SHOULD offer an OpenId Provider Configuration Document for the client to obtain the token endpoint for Action Authenticate.

A host system MUST offer all actions except Action Authenticate under the same Base URL, e.g. https://api.example.org/, or https://example.org/pact-api/ Note that for version 3 these actions can be found under $base-url$/3/...

A host system MAY offer the OpenId Provider Configuration Document or Action Authenticate under a different URL (Auth Base Url): $auth-base-url$/.well-known/openid-configuration or $auth-base-url$/auth/token. See § 5.5 Authentication Flow.

5.3. Out of scope

Non-normative

This standard focuses on the necessary definitions to enable interoperable data exchange between data owners and data recipients. This is mediated through a host system which implements the HTTP REST API defined in this document.

Within the PACT Project, conforming host systems are called solutions.

Solutions add further functionality on top of this standard in order to enable meaningful and interoperable data exchanges.

The following section briefly describes some of the additional functionality which is beyond the scope of this document:

  1. Footprint calculation according to the PACT Methodology
  2. Authentication and access management: the act of deciding and setting which product footprint may be accessed by each data recipient
  3. Credentials management: the overall functionality to generate access credentials for data recipients, to exchange these credentials with data recipients, to rotate or revoke such credentials, etc.
  4. Logging: creation and storage of access logs and audit trails related to data exchange, authentication processes, etc.

5.4. Error Handling

The actions GetFootprint, ListFootprints and Events MUST return an appropriate HTTP status code and MUST include a JSON Error object with information on the error.

Error responses are specified in detail such that data recipients can understand the cause of the error, and so that potentially host systems can act on and resolve errors automatically.

Error responses from Action Authenticate follow the OAuth specification [rfc6750]. See § 5.5 Authentication Flow

5.5. Authentication Flow

The API requires authentication using the OAuth 2.0 client credentials flow. Clients must obtain an access token before making requests to protected endpoints.

Host systems MUST implement this action in conformance with [rfc6749] Section 4.4.

5.5.1. Obtaining an Access Token

Clients SHOULD retrieve the token endpoint dynamically via the OpenID Connect discovery mechanism. The OpenID configuration can be found at:

$auth-base-url$/.well-known/openid-configuration

If provided by the host system, this document contains the token_endpoint to be used by the client.

If no OpenID configuration is provided by the host system, clients MUST assume $auth-base-url$/auth/token to be the token endpoint.

After determining the token endpoint, clients MUST obtain an access token by making a request to:

POST $token-endpoint$ 

with the following request parameters:

Example request:

POST /auth/token HTTP/1.1
Host: id.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic {base64(client_id:client_secret)}

grant_type=client_credentials

5.5.2. Token Response

A successful response returns an access token in the following format:

{
  "access_token": "<token>",
  "token_type": "Bearer",
  "expires_in": 3600
}

If the client cannot be authenticated, the host system MUST respond with a 400 or 401 status code, and provide details on the error:

{
  "error": "invalid_client",
  "error_description": "Authentication failed"
}

For details and possible values for error see [rfc6749] section 5.2

5.5.3. Using the Access Token

Once obtained, the access token must be included in the Authorization header of API requests, following the OAuth 2.0 Bearer Token Usage standard (RFC 6750):

GET <base-url>/3/<action> HTTP/1.1
Authorization: Bearer <access_token>

The host system MUST check the Access Token and return a 401 when it has expired or is invalid.

Access tokens SHOULD expire. In this case, data recipients MUST retrieve a new access token as described in this section.

5.6. Action ListFootprints

GET /3/footprints?params=value&...

Retrieve a list of Product Carbon Footprints (PCFs) from the data owner. The data recipient can specify various criteria to filter the list, and the data owner can paginate the result set, if necessary.

Host systems SHOULD implement an access management system and only return the product footprints for which the data owner granted access to the requesting data recipient.

The host system SHOULD include footprints which have been deprecated in the resulting list of footprints, except if the status query parameter explicity requests only active footprints.

5.6.1. Pagination

  1. The host system MUST NOT return more product footprints than requested in case a limit parameter was specified by a data recipient

  2. The host system MUST return an HTTP Link header if there are additional ProductFootprints ready to be retrieved, such that

    • The Link header conforms to [RFC8288]

    • The value of the rel parameter is equal to next

    • the target URI of the Link header is absolute

    • The value of host of the target URI is equal to the value of the host request header from the original ListFootprints HTTP request

  3. The target URI from the Link header is called a pagination link.

  4. A pagination link MUST be valid for at least 180 seconds after creation

  5. The data recipient CAN call the pagination link more than once

  6. Upon each call, the host system

    • MUST NOT return more product footprints than requested in case limit was defined by a data recipient

    • MUST return a Link header conforming with the previous description in case there are additional ProductFootprints available

      link: <https://api.example.com/3/footprints?geography=FR&limit=10&offset=10>; rel="next"
      
  7. If a response contains a second pagination link and the data recipient has called that second pagination link, the previous pagination link MAY no longer work: data recipients MUST NOT assume that previous pagination links continue to return results after advancing in the pagination process.

5.6.2. Filtering

The host system MUST support filtering of the list of footprints by criteria described under Parameters. Note that these are the same filters used by the § 5.8.1 Request Created Event Event.

A host system MAY provide additional filter criteria for the data recipient to use. These parameters MUST be prefixed with x-<identifier>-.

For example, to add functionality to search for product footprints based on an invoice number, a software solution could choose to support a parameter x-atq-invoice-id.

/3/footprints/?geography=FR&x-atq-invoice-id=12345&limit=100

the ODataV4 $filter syntax present in v2.x has been deprecated in v3.0.

5.6.3. Parameters

Name Description
limit (query)
integer <uint>

The maximum number of footprints to return. The host system MAY return fewer footprints, but MUST return a Link header conforming to [RFC8288] if there are additional ProductFootprints ready to be retrieved.

productId (query)
array of string <urn>

One or more product IDs. Will return all footprints which have a corresponding ID in their productIds attribute. The match must be-case insensitive. Note that a footprint itself can also have multiple product IDs.

companyId (query)
array of string <urn>

One or more company IDs. Will return all footprints which have a corresponding ID in their companyId attribute. The match must be case-insensitive. Note that a footprint itself can also have multiple company IDs.

geography (query)
array of string

One or more geographic specifiers. Values specified can denote geographyRegion or geographyCountry or geographyCountrySubdivision. Will return all footprints within the specified geography(s). The match must be-case insensitive.

classification (query)
array of string <urn>

One or more product classifications. Will return all footprints with corresponding values in the productClassifications attribute. Note that a footprint itself can have multiple classifications. The match must be-case insensitive.

validOn (query)
string <date-time>

If present, MUST match all PCFs which were valid on the date specified: validityPeriodStart <= validOn <= validityPeriodEnd. See § 7.3 Validity Period for determining validity period.

validAfter (query)
string <date-time>

If present, MUST match PCFs with validityPeriodStart > validAfter. See § 7.3 Validity Period for determining validity period.

validBefore (query)
string <date-time>

If present, MUST match PCFs with validityPeriodEnd < validBefore See § 7.3 Validity Period for determining validity period.

status (query)
string <enum>
"Active" "Deprecated"

If present, MUST be "Active" or "Deprecated". If not specified, will return footprints regardless of status. The match must be-case insensitive.

5.6.4. Responses

content-type: application/json
Status Response
200 The host system succesfully returns a list of product footprints. This list MAY be incomplete, in which case the host system MUST return a Link header conforming to [RFC8288], also see § 5.6.1 Pagination. The list MUST NOT be larger than the limit, if specified.
HTTP/1.1 200 OK
link: <https://api.example.com/3/footprints?geography=FR&limit=10&offset=10>; rel="next"
content-type: application/json
{
  "data": [ 
    {"id": "079e425a-464f-528d-341d-4a944a1dfd70", ... },
    {"id": "f4b1225a-bd44-4c8e-861d-079e4e1dfd69", ... }
    ...
  ]
}

The list MAY also be empty. If the list is empty, the host system MUST return an empty JSON array. The list MUST NOT be NULL.

{
  "data": [] // MUST NOT be null
}
data
required array of ProductFootprint

List of ProductFootprint objects.

400 Bad request.

Response body MUST contain a JSON Error object

401 The request is not authorized, the access token is invalid or has expired.

Response body MUST contain a JSON Error object

403 Access Denied.

Response body MUST contain a JSON Error object

500 Internal Error.

Response body MUST contain a JSON Error object

5.7. Action GetFootprint

GET /3/footprints/{id}

Retrieve a single Product Carbon Footprint (PCF) by its unique identifier.

If the requested ProductFootprint is deprecated, the host system SHOULD return the deprecated ProductFootprint, if it is still available.

If the requested ProductFootprint is not found, the host system MUST return a 404 Not Found response.

Host systems SHOULD implement an access management system and only return the product footprints for which the data owner granted access to the requesting data recipient.

If it determines that a data recipient is not allowed to access the requested ProductFootprint, the host system MUST return a 403 Forbidden response.

5.7.1. Parameters

Name Description
id (path)
required string <uuid>

The value of property id of a product footprint a data recipient intends to retrieve.

5.7.2. Responses

content-type: application/json
Status Response
200 Indicates success: the product footprint was found and returned by the host system.

Example response body:

{
  "data": {
    "id": "079e425a-464f-528d-341d-4a944a1dfd70",
    "productIds": ["urn:pact:sample.com:product-id:44055-9c05bc35-68f8"]},
    "productNameCompany": "Sample Product",
    ...
  }
}
data

The product footprint requested, see ProductFootprint.

400 Bad request.

Response body MUST contain a JSON Error object

401 The request is not authorized, the access token is invalid or has expired.

Response body MUST contain a JSON Error object

403 The data recipient is not allowed to access the requested ProductFootprint.

Response body MUST contain a JSON Error object

404 The requested ProductFootprint was not found.

Response body MUST contain a JSON Error object

500 Internal Error.

Response body MUST contain a JSON Error object

5.8. Action Events

POST /3/events

The Action Events endpoint supports the following use cases:

  1. enabling a data recipient to request Product Footprints from a data owner by sending a RequestCreatedEvent, to which the data owner can answer by sending RequestFulfilledEvent or a RequestRejectedEvent.

  2. enabling a data owner to notify a data recipient on updates to 1 or more Product Footprints: PublishedEvent

The Action Events endpoint accepts CloudEvent events (see [CE] and [CE-JSON]) encoded in "Structured Content Mode" (see [CE-Structured-Content-Mode]).

The CloudEvents are encoded in the "application/cloudevents+json" media type and MUST be sent as an HTTP POST request body to the Action Events endpoint.

The following events MUST be handled by the host system:

A host system MUST validate the event and return an HTTP 4xx status code if the event is invalid.

Upon accepting the event, the host system MUST return an HTTP 200 status code and SHOULD return an empty response body.

5.8.1. Request Created Event

A data recipient requests a ProductFootprint from the data owner. The data recipient MUST provide the criteria in the data object to enable the data owner to either find an existing relevant PCF or create a new one.

Criteria to provide can be product id, geography, company identifier, validity period, etc, see below for details.

If the data owner can immediately determine that it will not be able to handle this request it MUST respond with an appropriate 4xx error response, otherwise it MUST respond with a 200 (Success), indicating it will be able to process the request asynchronously.

Only in the latter case (after having accepted the request for processing) the data owner MUST send a follow-up event back to the data recipient at some time in the future. This follow up event MUST be either a RequestFulfilledEvent or RequestRejectedEvent.

Request Body

content-type: application/cloudevents+json

Name Description
type
required string = "org.wbcsd.pact.ProductFootprint.RequestCreatedEvent.3"

Event type identifier.

specversion
required string

CloudEvents version.

id
required string

Event identifier. Must be able to uniquely identify the event by source and id.

source
required string

The domain and endpoint of the application from which the event originates.

time
required string <date-time>

The time the event occurred.

data
required object

Criteria for filtering ProductFootprint requests.

data.productId
array of string <urn>

One or more product IDs. Will return all footprints which have a corresponding ID in their productIds attribute. The match must be-case insensitive. Note that a footprint itself can also have multiple product IDs.

data.companyId
array of string <urn>

One or more company IDs. Will return all footprints which have a corresponding ID in their companyId attribute. The match must be case-insensitive. Note that a footprint itself can also have multiple company IDs.

data.geography
array of string

One or more geographic specifiers. Values specified can denote geographyRegion or geographyCountry or geographyCountrySubdivision. Will return all footprints within the specified geography(s). The match must be-case insensitive.

data.classification
array of string <urn>

One or more product classifications. Will return all footprints with corresponding values in the productClassifications attribute. Note that a footprint itself can have multiple classifications. The match must be-case insensitive.

data.validOn
string <date-time>

If present, MUST match all PCFs which were valid on the date specified: validityPeriodStart <= validOn <= validityPeriodEnd. See § 7.3 Validity Period for determining validity period.

data.validAfter
string <date-time>

If present, MUST match PCFs with validityPeriodStart > validAfter. See § 7.3 Validity Period for determining validity period.

data.validBefore
string <date-time>

If present, MUST match PCFs with validityPeriodEnd < validBefore See § 7.3 Validity Period for determining validity period.

data.status
string <enum>
"Active" "Deprecated"

If present, MUST be "Active" or "Deprecated". If not specified, will return footprints regardless of status. The match must be-case insensitive.

data.comment
string

Free text comment.

POST /3/events HTTP/1.1
Host: api.example.com
Content-Type: application/cloudevents+json
Authorizaton: Bearer xxxxxxxxxxxxx

{
  "type": "org.wbcsd.pact.ProductFootprint.RequestCreatedEvent.3",
  "specversion": "1.0",
  "id": "1934405d-4f9b-4b3b-9c05bc35-68f8",
  "source": "//api.example.com/3/events",
  "time": "2025-03-05T17:31:00Z",
  "data": {  
    "productId": ["urn:pact:sample.com:product-id:44055-9c05bc35-68f8"],
    "geography": ["DE"],
    "validAfter": "2025-01-01T00:00:00Z"
  }
}

5.8.2. Request Fulfilled Event

Notification that the request for PCF(s) has been fulfilled by the data owner. This notification will be sent by the data owner back to the data recipient in response to a ProductFootprintRequest.Created event, see § 5.8.1 Request Created Event.

The data object contains the original requestEventId and the resulting list of ProductFootprints which conform to the set of criteria specified by the data recipient in the preceding RequestCreated event. This list MUST be non-empty, as the RequestFulfilled event indicates success. The data owner MUST send a single RequestFulfilled event back to the data recipient per corresponding RequestCreated event.

If there are no product footprints to return, the data owner MUST send a § 5.8.3 Request Rejected Event instead.

If the data recipient cannot be reached by the data owner, the data owner SHOULD retry to send the event at a later time, using an exponential backoff strategy. It SHOULD abandon sending the event after 72 hours.

Request Body

content-type: application/cloudevents+json

Name Description
type
required string = "org.wbcsd.pact.ProductFootprint.RequestFulfilledEvent.3"

Event type identifier.

specversion
required string

CloudEvents version.

id
required string

Event identifier. Must be able to uniquely identify the event by source and id.

source
required string

The domain and endpoint of the application from which the event originates.

time
required string <date-time>

The time the event occurred.

data
required object

data object

data.requestEventId
string

The ID of the request event that has been fulfilled.

data.pfs

The list of ProductFootprints resulting from the original that have been returned. This list MUST be non-empty.

POST /3/events HTTP/1.1
Host: api.example.com
Content-Type: application/cloudevents+json
Authorizaton: Bearer xxxxxxxxxxxxx

{
  "type": "org.wbcsd.pact.ProductFootprint.RequestFulfilledEvent.3",
  "specversion": "1.0",
  "id": "505e5d-4f9b-4b3b-9c05bc35-68f8",
  "source": "//api.example.com/3/events",
  "time": "2025-03-05T17:31:00Z",
  "data": {  
    "requestEventId": "1934405d-4f9b-4b3b-9c05bc35-68f8",
    "pfs": [
      { 
        /* ProductFootprint object */
        "id": "079e425a-464f-528d-341d-4a944a1dfd70",
        "specVersion": "3.0",
        "productIds": ["urn:pact:sample.com:product-id:44055-9c05bc35-68f8"], 
        ...
        "pcf": {
          ...
        }
      }, 
      { 
        "id": "079e425a-464f-528d-341d-4a944a1dfd71",
        ...
      }
    ]
  }
}

5.8.3. Request Rejected Event

Notification that a request for a ProductFootprint can not be fulfilled. The RequestRejectedEvent is an event sent back from the data owner to the data recipient upon NOT successfully fulfilling the preceding RequestCreatedEvent sent by the data recipient.

If the data recipient cannot be reached by the data owner, the data owner SHOULD retry to send the event at a later time, using an exponential backoff strategy. It SHOULD abandon sending the event after 72 hours.

Request Body

content-type: application/cloudevents+json

Name Description
type
required string = "org.wbcsd.pact.ProductFootprint.RequestRejectedEvent.3"

Event type identifier.

specversion
required string

CloudEvents version.

id
required string

Event identifier. Must be able to uniquely identify the event by source and id.

source
required string

The domain and endpoint of the application from which the event originates.

time
required string <date-time>

The time the event occurred.

data
required object

data object

data.requestEventId
string

The ID of the RequestCreateEvent that has been rejected.

data.error

Object with error code and description, to be returned by the API methods in case of error. See § 5.4 Error Handling for details.

POST /3/events HTTP/1.1
Host: api.example.com
Content-Type: application/cloudevents+json
Authorizaton: Bearer xxxxxxxxxxxxx

{
  "type": "org.wbcsd.pact.ProductFootprint.RequestRejectedEvent.3",
  "specversion": "1.0",
  "id": "505e5d-4f9b-4b3b-9c05bc35-68f8",
  "source": "//api.example.com/3/events",
  "time": "2025-03-05T17:31:00Z",
  "data": {  
    "requestEventId": "1934405d-4f9b-4b3b-9c05bc35-68f8",
    "error": {
      "code": "NotFound",
      "message": "The requested footprint could not be found."
    }
  }
}

5.8.4. Published Event

Notification that a ProductFootprint has been published (either new or updated). This event is triggered by the data owner and send to relevant data recipients.

If the data recipient cannot be reached by the data owner, the data owner SHOULD retry to send the event at a later time, using an exponential backoff strategy. It SHOULD abandon sending the event after 72 hours.

The data object of the PublishedEvent contains the list of Product Footprint IDs that have been published or updated by the data owner.

The data recipient can retrieve the actual Product Footprints by calling the Action GetFootprint action on the data owner’s systems.

Request Body

content-type: application/cloudevents+json

Name Description
type
required string = "org.wbcsd.pact.ProductFootprint.PublishedEvent.3"

Event type identifier.

specversion
required string

CloudEvents version.

id
required string

Event identifier. Must be able to uniquely identify the event by source and id.

source
required string

The domain and endpoint of the application from which the event originates.

time
required string <date-time>

The time the event occurred.

data
required object

Object containing the list of Product Footprint Ids that have been published or updated by the data owner.

"data": { 
  "pfIds": [ "uuid1", "uuid2", ... ] 
}
data.pfIds
array of string <uuid>

The list of Product Footprint Ids that have been published or updated by the data owner.

POST /3/events HTTP/1.1
Host: api.example.com
Content-Type: application/cloudevents+json
Authorizaton: Bearer xxxxxxxxxxxxx

{
  "type": "org.wbcsd.pact.ProductFootprint.PublishedEvent.3",
  "specversion": "1.0",
  "id": "1934405d-4f9b-4b3b-9c05bc35-68f8",
  "source": "//api.example.com/3/events",
  "time": "2022-05-31T17:31:00Z",
  "data": {
    "pfIds": ["079e425a-464f-528d-341d-4a944a1dfd70"]
  }
}

5.8.5. Responses

content-type: application/json
Status Response
200 Indicates success: the event was accepted by the host system. The response body will be empty.

No content

400 Bad request.

Response body MUST contain a JSON Error object

401 The request is not authorized, the access token is invalid or has expired.

Response body MUST contain a JSON Error object

403 Access Denied.

Response body MUST contain a JSON Error object

500 Internal Error.

Response body MUST contain a JSON Error object

6. Exchanging Footprints

Note: This chapter is non-normative.

Achieving transparency in carbon emissions at the product level is challenging due to the complexity of global supply chains. This specification focuses on enabling transparency through a peer-to-peer PCF data exchange by specifying necessary aspects for achieving interoperability, such as the Data Model and API.

The PACT API supports two complementary methods for exchanging carbon footprint data, each designed for different use cases.

  1. Synchronous Retrieval: Provides immediate access to carbon footprint data through direct API calls. This approach is ideal for:

  1. Asynchronous Exchange: Enables event-based communication where PCF data can be requested, delivered, and updated over time. This approach is suited for:

    • Situations where a PCF may not be immediately available and needs time to be calculated

    • Workflows requiring notifications when new or updated PCF data becomes available

    • Complex supply chain scenarios where data may change over time

Both methods use the same underlying data model but differ in their communication patterns and implementation requirements.

The following sections describe each exchange method in detail, including the specific API actions, communication flows, and implementation considerations.

6.1. Synchronous Retrieval

The synchronous part of the PACT API allows for immediate retrieval of PCFs. Refer to § 5.6 Action ListFootprints and § 5.7 Action GetFootprint for detailed request and response formats.

6.1.1. Getting a single PCF

A data-recipient can directly obtain a given PCF by its ID by calling GetFootprint.

  1. The data recipient authenticates with the data owner.

  2. The data recipient calls the /footprints/{id} endpoint, providing the PCF ID (in UUID format)

  3. If found, the data owner returns the PCF in ProductFootprint and HTTP status code 200. If not found a 404 (Not found) status code will be returned.

6.1.2. Getting multiple PCFs

The ListFootprints action allows for directly retrieving multiple PCFs. Starting from version 3.0, host systems must provide a way for data recipients to filter the resulting list, with a minimum set of criteria.

  1. The data recipient authenticates with the data owner.

  2. The data recipient calls the /footprints endpoint, optionally providing a filter with search criteria and a limit to obtain a list of PCFs.

  3. After validating the request, the data owner returns a 2xx status code and the list of ProductFootprint objects. On error the data owner returns a relevant HTTP error code. For details, see § 5 HTTP REST API

6.2. Asynchronous Exchange

Exchanging PCFs asynchronously requires both the data owner and the data recipient to run a PACT conformant host system, both sides being able to initiate communication to each other.

6.2.1. Requesting a PCF

Generally, the data recipient sends a RequestCreatedEvent event to the data owner. The data owner will try to fullfil this request and, after some time, send the a RequestFullfilledEvent event back to the recipient.

  1. The data recipient authenticates with the data owner.

  2. The data recipient sends the RequestCreatedEvent event to the data owner, including criteria specifying which PCF it wants to receive, like product ID, reference period or geography.

  3. The data owner validates the incoming event, directly returning a HTTP 2xx success code if OK, or a 4xx status code indicating error.

  4. Asynchronously, the data owner will create a PCF or find an existing relevant PCF.

  5. The data owner will authenticate with the data recipient and send either a RequestFullfilledEvent back with the PCF or a RequestRejectedEvent if it can not produce the PCF.

6.2.2. Sending an updated PCF

At any time after a data owner has sent a PCF to the data recipient, the data owner can send an update, for example because a PCF was updated or deprecated, or a new PCF was published, see § 7 Product Footprint Lifecycle.

In this case the data owner sends a PublishedEvent to the data recipient.

  1. The data owner authenticates with the data recipient and sends a PublishedEvent with the updated or created PCF.

  2. The data recipient should validate this incoming event and directly return a status code indicating succesful receipt (HTTP code 2xx) or an error (HTTP 4xx or 5xx).

Refer to § 5.8 Action Events for detailed request and response formats.

7. Product Footprint Lifecycle

7.1. Introduction

This section is non-normative

The contents of a ProductFootprint can change over time. For instance when a data owner publishes an updated Product Footprint ("upstream Product Footprints") which goes into the calculation of another Product Footprint ("downstream Product Footprint").

Even without upstream changes, a downstream Product Footprint can undergo changes in its own right, for instance when calculation errors are discovered and fixed, or when secondary emission databases are updated.

This section defines how changes to Product Footprints shall be handled by data owners and communicated to data recipients through the ProductFootprint data model.

Starting with version 3.0, any change to a Product Footprint will result in a new Product Footprint with a new ID. The previous Product Footprint will be marked as Deprecated. The properties version, updated and statusComment are now obsolete.

7.2. Change Definition and Handling

A change to a Product Footprint is defined as a change to one or more properties of a ProductFootprint, including a change of properties from being undefined to defined or vice-versa.

After creation of a ProductFootprint this footprint MUST NOT be changed, EXCEPT for changing its status property to Deprecated

A ProductFootprint with status Deprecated MUST NOT be changed anymore.

7.2.1. Updating PCFs

Starting with version 3.0, a change to any part of the footprint MUST result in a new footprint with a new id. The old id SHOULD be added to the PrecedingPfIds list to be able to track back to the previous version. The old PCF MUST have its status set to Deprecated.

7.2.2. Deprecating PCFs

If a PCF becomes obsolete the status property of the PCF needs to be set to Deprecated. Note that this is the only occasion after creation that an already existing PCF will and MUST change.

7.2.3. Obsolete Properties

Starting with version 3.0, the following properties are now obsolete and have been removed from the ProductFootprintL:

7.3. Validity Period

The validity period is the time interval during which the ProductFootprint is declared as valid for use by a receiving data recipient.

The validity period is OPTIONAL defined by the properties validityPeriodStart (including) and validityPeriodEnd (excluding).

If a validity period is specified, it is restricted to a time window between referencePeriodEnd and referencePeriodEnd + 3 years:

If no validity period is specified, the ProductFootprint is valid for 3 years starting with referencePeriodEnd.

8. Product Identification and Classification

Non-normative

To exchange PCF data between organizations, it is necessary to identify the related product or material. Given data owners and data recipients do not always (or often) use the same identification schemes, commonly and uniquely identifying the same product is a challenge - especially at scale. Given this situation, organizations must perform laborious and manual “mapping” exercises to map their identifier(s) for a product to the identify their supplier can understand.

This specification describes how the product ID URN (Uniform Resource Name) should be constructed in cases where no formal namespace for a given product identifier is defined.

This will not eliminate the need for a mapping process but will ease mapping identifiers with a common, easily understood structure. Further, this proposal ensures interoperability with industry-specific product identifiers.

We recognize there are existing relevant namespaces and corresponding URN syntax specifications. These can either be IANA-registered namespaces (like urn:ISBN) or widely used standards like urn:gtin. When product identification based on one or more of these standards is applicable, the corresponding namespaces should be used.

Similar to product identifiers, product classifiers contain URNs, using well-known namespaces when applicable, or a custom pact namespace if needed.

8.1. Product Identifier URN’s

Each ProductID MUST be a URN as specified in [RFC8141]. Accordingly, every URN conforms to the following syntax:
urn:namespace:namespace-specific-string

In determining which URN namespace and corresponding syntax to use, the data owner SHOULD follow the reasoning below:

  1. If an IANA-registered URN namespace exists and is applicable, this SHOULD be used. See IANA Registered Namespaces for existing specifications, like ISBN.

  2. If a widely used URN schema exists and is applicable, this SHOULD be used, for example GTIN product identifiers.

  3. If the data owner wishes to use a product identifier for which an existing URN specification does not exist, the data owner SHOULD use the following format:

    urn:pact:$domain-of-issuer$:$identifier-type$:$id$
    
    • urn:pact: is the fixed sub-string to identify the URN namespace.

    • $domain-of-issuer$ is the fully qualified domain name [RFC1035] of the organization issuing the identifier. Ideally the fully qualified domain points to the product specification. For example: catalog.mycompany.com

    • $identifier-type$ defines the kind of product identifier being specified. This brings clarity to the recipient to understand what kind of identifier is provided.

    • $id$ is the actual id of the product within this context. This can be any string uniquely identifying the product.

    The following $identifier-type$ values are recommended.

    $identifier-type$ Description Notes
    product-id Specifies a product id from a third-party organization, standard, etc. Use this identifier-type when no other, more specific one is applicable.
    buyer-id Specifies a product id created by the buyer, aka data recipient. This is the equivalent of "buyer-assigned" as referenced in Tech Specs V2.
    supplier-id Specifies a product id created by the supplier, aka data owner. This is the equivalent of "vendor-assigned" as referenced in Tech Specs V2.

    This is a non-exhaustive list of $identifier-type$. This set MAY be extended in minor versions of the standard release. Organizations may contact PACT to propose additional $identifier-type$ for consideration to be added as recommended industry-agnostic identifiers.

    Organizations and industry initiatives are encouraged to define the relevant $identifier-type$ for products within their industry separately.

8.1.1. Examples

Below is a list of examples of productIds as used in the ProductFootprint data type clarifying the use of well-known and custom URN namespaces for identifying products.

Product ID type Example
Company-specific Identifiers using the pact namespace, created by a given company for the purposes of uniquely identifying their products
["urn:pact:sample.com:product-id:44055-9c05bc35-68f8"]
["urn:pact:sample-buyer.com:buyer-id:103403453"]
["urn:pact:sample-supplier.com:supplier-id:1234"]
ISBN Well known ISBN standard, see iana.org
["urn:isbn:978-951-0-18435-6"]
GTIN (widely used) GTIN is not an official IANA registered namespace, however in practice it is used to specify GTINs as a URN. See gs1.org
["urn:gtin:4712345060507"]
UUID Globally Unique Identifiers. See [RFC9562]
["urn:uuid:69585GB6-56T9-6958-E526-6FDGZJHU1326"]
Combined Combined example of a substance (Titan Dioxide of supplier Sigmaaldrich)
["urn:pact:sigmaaldrich.com:supplier-id:14021",
"urn:pact:cas.org:substance-number:13463-67-7",
"urn:pact:iupac.org:substance-name:dioxotitanium",
"urn:pact:inchi-trust.org:substance-id:1S,/2O.Ti",
"urn:pact:inchi-trust.org:substance-key:
GWEVSGVZZGPLCZ-UHFFFAOYSA-N"]

8.2. Product Classification URNs

Similar to product identifiers any product classification MUST be a URN as specified in [RFC8141]:

urn:namespace:namespace-specific-string

In determining which URN namespace and corresponding syntax to use, the data owner SHOULD follow the reasoning below:

  1. If an IANA-registered URN namespace exists and is applicable, this SHOULD be used. See IANA Registered Namespaces for existing specifications. Example: 'urn:iso'

  2. If a widely used URN namespace exists and is applicable, this SHOULD be used.

  3. If the data owner wishes to use a product identifier for which an existing URN specification does not exist, the data owner SHOULD use the following format:

    urn:pact:$domain-of-issuer$:$type$:$value$

    • urn:pact: is the fixed sub-string to identify the URN Namespace. Based on feedback from the community we propose the use of pact as the recommended namespace.

    • $domain-of-issuer$ is the fully qualified domain name of the organization issuing the category identifier. The issuer of the code can be an organization, company or industry initiative. Example: categories.mycompany.com

    • $type$ defines the kind of product category or classification being specified. This brings clarity to the recipient to understand what kind of classification is provided.

8.2.1. Examples

Description Example
CAS Registry Number Unique identification number assigned to every chemical substance described in the open scientific literature See cas.org
["urn:pact:cas.org:substance-number:13463-67-7"]
InChI (International Chemical Identifier) InChI is a standard identifier for chemical databases that facilitates effective information management across chemistry. See inchi-trust.org
["urn:pact:inchi-trust.org:substance-id:$INCHI-ID$"]
Custom category
"urn:pact:catalog.company.com:category-id:550010"
UN Central Product Classification This is an international standard for categorizing goods and services. (for wheat)
"urn:cpc:0151"
UN Standard Products and Services Code UNSPSC is a global classification system for products and services, often used in procurement. (for desktop computers)
"urn:unspsc:43211507"
ECLASS ECLASS is a standard classification system for products and services, widely used in industrial and engineering contexts.
"urn:eclass:28070000"
ISO Used for identifying ISO standards, which include many technical standards for materials and products.
"urn:iso:std:iso:4217"

These namespaces allow systems and standards to consistently identify and categorize products, making them useful in a variety of domains like supply chain management, retail, industrial procurement, and publication. If you’re working with a specific product categorization system, you may find these URNs particularly relevant for classification or reference purposes.

9. Examples

Non-normative

9.1. Example Action ListFootprints

Request:

GET /3/footprints?limit=10 HTTP/2
host: api.example.org
authorization: Bearer [BearerToken]

Response:

HTTP/1.1 200 OK
date: Mon, 23 May 2025 19:33:16 GMT
content-type: application/json
content-length: 1831
link: &lt;https://api.example.org/3/footprints?limit=10&amp;offset=10&gt;; rel="next"
{
  "data": [
    {
      "id": "91715e5e-fd0b-4d1c-8fab-76290c46e6ed",
      "specVersion": "3.0.0",
      "version": 1,
      "created": "2025-03-01T09:32:20Z",
      "status": "Active",
      "validityPeriodStart": "2025-03-01T09:32:20Z",
      "validityPeriodEnd": "2026-12-31T00:00:00Z",
      "companyName": "My Corp",
      "companyIds": [
        "urn:uuid:69585GB6-56T9-6958-E526-6FDGZJHU1326",
        "urn:epc:id:sgln:562958.00000.4"
      ],
      "productDescription": "Bio-Ethanol 98%, corn feedstock (bulk - no packaging)",
      "productIds": ["urn:gtin:5695872369587"],
      "productClassifications": ["urn:pact:productclassification:un-cpc:1234"],
      "productNameCompany": "Green Ethanol",
      "comment": "",
      "pcf": {
        "declaredUnitOfMeasurement": "liter",
        "declaredUnitAmount": "1",
        "productMassPerDeclaredUnit": "0.879",
        "pcfExcludingBiogenicUptake": "1.85",
        "pcfIncludingBiogenicUptake": "1.63",
        "fossilGhgEmissions": "1.5",
        "fossilCarbonContent": "0",
        "biogenicCarbonContent": "0.41",
        "landManagementBiogenicCO2Emissions": "0.6",
        "landManagementBiogenicCO2Removals": "-0.4",
        "biogenicCO2Uptake": "-1.5",
        "aircraftGhgEmissions": "0.2",
        "ipccCharacterizationFactors": ["AR6"],
        "crossSectoralStandards": [
          "GHGP-Product",
          "ISO14067"
        ],
        "productOrSectorSpecificRules": [
          {
            "operator": "Other",
            "ruleNames": [
              "The Product Carbon Footprint Guideline for the Chemical Industry, v.2.0"
            ],
            "otherOperatorName": "Tfs"
          }
        ],
        "biogenicAccountingMethodology": "GHPG",
        "boundaryProcessesDescription": "1) Material acquisition and preprocessing, including growth of corn 2) Production: fuel consumption, electricity consumption, water consumption, process-generated direct emissions 3) Distribution and storage: transportation of the finished product from manufacturing site to storage site",
        "referencePeriodStart": "2024-01-01T00:00:00Z",
        "referencePeriodEnd": "2026-01-01T00:00:00Z",
        "geographyRegionOrSubregion": "Western Europe",
        "secondaryEmissionFactorSources": [
          {
            "name": "Ecoinvent",
            "version": "3.1"
          }
        ],
        "exemptedEmissionsPercent": "0",
        "exemptedEmissionsDescription": "",
        "allocationRulesDescription": "Using mass allocation following the product specific rule as per PACT Framework decision-making tree",
        "primaryDataShare": "12.9",
        "dqi": {
          "technologicalDQR": "1.6",
          "temporalDQR": "2.6",
          "geographicalDQR": "1.8"
        }
      },
      "extensions": [
        {
          "specVersion": "3.0.0",
          "dataSchema": "https://example.org/schemas/shipment/1.0.0/data-model.json",
          "data": {
            "shipmentId": "S1234567890",
            "consignmentId": "Cabc.def-ghi",
            "shipmentType": "PICKUP",
            "weight": 10,
            "transportChainElementId": "ABCDEFGHI"
          }
        }
      ]
    }
  ]
}

Example response body when no footprints available:

{
  "data": []
}

9.2. Example Action GetFootprint

Request:

GET /3/footprints/91715e5e-fd0b-4d1c-8fab-76290c46e6ed HTTP/2
host: api.example.org
authorization: Bearer [BearerToken]

Response:

HTTP/1.1 200 OK
date: Mon, 23 May 2025 19:33:16 GMT
content-type: application/json
{
  "data": {
    "id": "91715e5e-fd0b-4d1c-8fab-76290c46e6ed",
    "specVersion": "3.0.0",
    "version": 1,
    "created": "2024-03-01T09:32:20Z",
    "status": "Active",
    "validityPeriodStart": "2024-03-01T09:32:20Z",
    "validityPeriodEnd": "2025-12-31T00:00:00Z",
    "companyName": "My Corp",
    "companyIds": [
      "urn:uuid:69585GB6-56T9-6958-E526-6FDGZJHU1326",
      "urn:epc:id:sgln:562958.00000.4"
    ],
    "productDescription": "Bio-Ethanol 98%, corn feedstock (bulk - no packaging)",
    "productIds": ["urn:gtin:5695872369587"],
    "productClassifications": ["urn:pact:productclassification:un-cpc:1234"],
    "productNameCompany": "Green Ethanol",
    "comment": "",
    "pcf": {
      "declaredUnitOfMeasurement": "liter",
      "declaredUnitAmount": "1",
      "productMassPerDeclaredUnit": "0.879",
      "pcfExcludingBiogenicUptake": "1.85",
      "pcfIncludingBiogenicUptake": "1.63",
      "fossilGhgEmissions": "1.5",
      "fossilCarbonContent": "0",
      "biogenicCarbonContent": "0.41",
      "landManagementBiogenicCO2Emissions": "0.6",
      "landManagementBiogenicCO2Removals": "-0.4",
      "biogenicCO2Withdrawal": "-1.5",
      "aircraftGhgEmissions": "0.2",
      "ipccCharacterizationFactors": ["AR6"],
      "crossSectoralStandards": [
        "GHGP-Product",
        "ISO14067"
      ],
      "productOrSectorSpecificRules": [
        {
          "operator": "Other",
          "ruleNames": [
            "The Product Carbon Footprint Guideline for the Chemical Industry, v.2.0"
          ],
          "otherOperatorName": "Tfs"
        }
      ],
      "biogenicAccountingMethodology": "GHPG",
      "boundaryProcessesDescription": "1) Material acquisition and preprocessing, including growth of corn 2) Production: fuel consumption, electricity consumption, water consumption, process-generated direct emissions 3) Distribution and storage: transportation of the finished product from manufacturing site to storage site",
      "referencePeriodStart": "2024-01-01T00:00:00Z",
      "referencePeriodEnd": "2026-01-01T00:00:00Z",
      "geographyRegionOrSubregion": "Western Europe",
      "secondaryEmissionFactorSources": [
        {
          "name": "Ecoinvent",
          "version": "3.1"
        }
      ],
      "exemptedEmissionsPercent": "0",
      "exemptedEmissionsDescription": "",
      "allocationRulesDescription": "Using mass allocation following the product specific rule as per PACT Framework decision-making tree",
      "primaryDataShare": "12.9",
      "dqi": {
        "technologicalDQR": "1.6",
        "temporalDQR": "2.6",
        "geographicalDQR": "1.8"
      },
      "verification": {
        "providerName": ""
      }
    },
    "extensions": [
      {
        "specVersion": "3.0.0",
        "dataSchema": "https://catalog.carbon-transparency.org/shipment/1.0.0/data-model.json",
        "data": {
          "shipmentId": "S1234567890",
          "consignmentId": "Cabc.def-ghi",
          "shipmentType": "PICKUP",
          "weight": 10,
          "transportChainElementId": "ABCDEFGHI"
        }
      }
    ]
  }
}

9.3. Example Error Response

Example request:

GET /3/footprints/91715e5e-fd0b-4d1c-8fab-76290c46e6ed HTTP/2
host: api.example.org
authorization: Bearer [BearerToken]

Example response:

HTTP/1.1 403 Forbidden
date: Mon, 23 May 2025 19:33:16 GMT
content-type: application/json
content-length: 44
{
  "code": "AccessDenied",
  "message": "Access Denied"
}

9.4. Example Action Events

Example ProductFootprint.RequestCreated

Request:

POST /3/events HTTP/1.1
host: api.example.org
authorization: Bearer [BearerToken]
content-type: application/cloudevents+json; charset=UTF-8
{
  "type": "org.wbcsd.pact.ProductFootprint.RequestCreated.3",
  "specversion": "1.0",
  "id": "848dcf00-2c18-400d-bcb8-11e45bbf7ebd",
  "source": "//api.recipient.org/3/events",
  "time": "2024-11-06T16:23:00Z",
  "data": {
      "productId": ["urn:gtin:4712345060507"],
      "geography": ["DE"],
      "comment": "Please provide current PCF value."
  }
}

Response:

HTTP/1.1 200 OK
content-length: 0

Example ProductFootprint.RequestFulfilled

Request:

POST /3/events HTTP/1.1
host: api.recipient.org
authorization: Bearer [BearerToken]
content-type: application/cloudevents+json; charset=UTF-8
{
  "type": "org.wbcsd.pact.ProductFootprint.RequestFulfilledEvent.3",
  "specversion": "1.0",
  "id": "5afe8fbf-0ea9-477c-a1df-2d3c95f7eec0",
  "source": "//api.example.org/events",
  "time": "2024-11-08T13:26:00Z",
  "data": {
    "requestEventId": "848dcf00-2c18-400d-bcb8-11e45bbf7ebd",
    "pfs": [
      {
        "id": "91715e5e-fd0b-4d1c-8fab-76290c46e6ed",
        "specVersion": "3.0.0",
        "version": 1,
        "created": "2024-03-01T09:32:20Z",
        "status": "Active",
        "validityPeriodStart": "2024-03-01T09:32:20Z",
        "validityPeriodEnd": "2026-12-31T00:00:00Z",
        "companyName": "My Corp",
        "companyIds": [
          "urn:uuid:69585GB6-56T9-6958-E526-6FDGZJHU1326",
          "urn:epc:id:sgln:562958.00000.4"
        ],
        "productDescription": "Bio-Ethanol 98%, corn feedstock (bulk - no packaging)",
        "productIds": ["urn:gtin:5695872369587"],
        "productClassifications": ["urn:pact:productclassification:un-cpc:1234"],
        "productNameCompany": "Green Ethanol",
        "comment": "",
        "pcf": {
          "declaredUnitOfMeasurement": "liter",
          "declaredUnitAmount": "1",
          "productMassPerDeclaredUnit": "0.879",
          "pcfExcludingBiogenicUptake": "1.85",
          "pcfIncludingBiogenicUptake": "1.63",
          "fossilGhgEmissions": "1.5",
          "fossilCarbonContent": "0",
          "biogenicCarbonContent": "0.41",
          "landManagementBiogenicCO2Emissions": "0.6",
          "landManagementBiogenicCO2Removals": "-0.4",
          "biogenicCO2Uptake": "-1.5",
          "aircraftGhgEmissions": "0.2",
          "ipccCharacterizationFactors": ["AR6"],
            "crossSectoralStandards": [
            "GHGP-Product",
            "ISO14067"
          ],
          "productOrSectorSpecificRules": [
            {
              "operator": "Other",
              "ruleNames": [
                "The Product Carbon Footprint Guideline for the Chemical Industry, v.2.0"
              ],
              "otherOperatorName": "Tfs"
            }
          ],
          "biogenicAccountingMethodology": "GHPG",
          "boundaryProcessesDescription": "1) Material acquisition and preprocessing, including growth of corn 2) Production: fuel consumption, electricity consumption, water consumption, process-generated direct emissions 3) Distribution and storage: transportation of the finished product from manufacturing site to storage site",
          "referencePeriodStart": "2023-01-01T00:00:00Z",
          "referencePeriodEnd": "2026-01-01T00:00:00Z",
          "geographyRegionOrSubregion": "Western Europe",
          "secondaryEmissionFactorSources": [
            {
              "name": "Ecoinvent",
              "version": "3.1"
            }
          ],
          "exemptedEmissionsPercent": "0",
          "exemptedEmissionsDescription": "",
          "allocationRulesDescription": "Using mass allocation following the product specific rule as per PACT Framework decision-making tree",
          "primaryDataShare": "12.9",
          "dqi": {
            "technologicalDQR": "1.6",
            "temporalDQR": "2.6",
            "geographicalDQR": "1.8"
          },
          "verification": {
            "providerName": ""
          }
        },
        "extensions": [
          {
            "specVersion": "3.0.0",
            "dataSchema": "https://catalog.carbon-transparency.org/shipment/1.0.0/data-model.json",
            "data": {
              "shipmentId": "S1234567890",
              "consignmentId": "Cabc.def-ghi",
              "shipmentType": "PICKUP",
              "weight": 10,
              "transportChainElementId": "ABCDEFGHI"
            }
          }
        ]
      }
    ]
  }
}

Response:

HTTP/1.1 200 OK
content-length: 0

Appendix A: Changelog

Version 3.0.0 (Apr 30, 2025)

Summary of major changes since version 2.3:

  1. API and Documentation Improvements

  2. Framework and Methodology Enhancements

  3. Carbon Accounting Model Improvements

    • Add Biogenic Emissions and Removals (ADR-45)

    • Include attributes for CCU (Carbon Capture and Utilization) (ADR-46)

    • Consistent typing of real numbers (ADR-39)

    • Additional units for service-related footprints (ADR-40)

    • Clarification of unit of measurement and product amount (ADR-36)

  4. Data Model Changes: Properties added:

    Properties removed:

    • ProductFootprint/productCategoryCpc (deprecated in 2.3, superseded by productClassifications)

    • ProductFootprint/statusComment

    • CarbonFootprint/declaredUnit (replaced by declaredUnitOfMeasurement)

    • CarbonFootprint/UnitaryProductAmount (replaced by declaredUnitAmount)

    • CarbonFootprint/pCfIncludingBiogenic (superseded by pcfIncludingBiogenicUptake)

    • CarbonFootprint/pCfEncludingBiogenic (superseded by pcfExcludingBiogenicUptake)

    • CarbonFootprint/dLucGhgEmissions

    • CarbonFootprint/iLucGhgEmissions

    • CarbonFootprint/landManagementGhgEmissions

    • CarbonFootprint/biogenicCarbonWithdrawal

    • CarbonFootprint/otherBiogenicGhgEmissions

    • CarbonFootprint/crossSectoralStandardsUsed (deprecated in 2.3, replaced by CarbonFootprint/crossSectoralStandards)

    • CarbonFootprint/characterizationFactors (deprecated in 2.2, replaced by CarbonFootprint/ipccCharacterizationFactors)

    • CarbonFootprint/uncertaintyAssessmentDescription

    • DataQualityIndicators/coveragePercent

    • DataQualityIndicators/reliabilityDQR

    • DataQualityIndicators/completenessDQR

    Properties and types renamed:

    Properties with changed optionality:

    Data type changes:

    • Consistent Decimal typing for all fractional numbers (ADR39). The following fields changed from Number to Decimal:

      • primaryDataShare

      • exemptedEmissionsPercent

      • technologicalDQR

      • geographicalDQR

      • temporalDQR

    • DQR ratings technologicalDQR, temporalDQR, geographicalDQR now range between 1 and 5

Version 2.3.0 (Oct 24, 2024)

Summary of changes:

  1. Rebranding: Sunset the Pathfinder name, replacing "Pathfinder Framework" with "PACT Methodology" and "Pathfinder Network" with "PACT Network".

  2. Product Identifiers:

  1. Terminology and Attribute Changes:

Version 2.2.1 (June 24, 2024)

Summary of changes:

  1. Documentation Improvements:

  2. Definition Clarifications:

Version 2.2.0 (Apr 10, 2024)

Summary of changes:

  1. Documentation Improvements:

    • Addition of the new § 6 Exchanging Footprints chapter

    • Addition of missing examples in the § 6 Exchanging Footprints section

    • Fixed the incomplete assurance example and moved it to the appropriate section

    • Fixed the incorrect value of pCfExcludingBiogenic in all relevant examples

    • Removal of notes referring to the transition from v1 to v2

  2. API and Event Processing Updates:

    • Updates to Action Events implementation requirement - changed from OPTIONAL to MANDATORY

    • Clarification of PF Request Event syntax, including the instruction that the ProductFootprintFragment should refer to one single product

    • Addition of a recommendation to include ProductIds in the PF Request Event request body

    • Addition of Examples of a PCF request and response Action Event flow

    • Addition of an Example for a ProductFootprintFragment indicating a query for a PCF via productId

    • Clarification of how to handle error codes in Action ListFootprints and Action GetFootprints

    • Fixed example 28’s HTTP error code (from 401 to 400) in accordance with [rfc6749]

  3. Data Model Changes:

    • Deprecation of the CarbonFootprint/characterizationFactors property

    • Addition of a new CarbonFootprint/ipccCharacterizationFactorsSources property

  4. Future Version Advisements:

Version 2.1.0 (Dec 07, 2023)

This version introduces additional mandatory functionality:

  1. A new authentication flow (§ 5.5 Authentication Flow) is specified which allows discovery of token endpoint through an OpenId Provider Configuration Document. The flow is backwards-compatible with the 2.0.x-series of authentication flow based on the /auth/token syntax.

Version 2.0.1 (Oct 26, 2023)

Summary of changes:

  1. Data Model Corrections and Clarifications:

    • Fixed definition discrepancies between the Pathfinder Framework Version 2 and the specification:

    • boundaryProcessesDescription: Corrected from optional to mandatory

    • primaryDataShare: Marked as O* instead of O to align with Framework

    • dqi: Resolved discrepancy with Framework - updated to indicate at least one of primaryDataShare or dqi must be defined (not mutually exclusive)

    • Unit corrections:

    • fossilCarbonContent: Changed unit from kg of CO2e / declaredUnit to kg / declaredUnit and further clarified as kgC / declaredUunit

    • biogenicCarbonContent: Changed unit from kg of CO2e / declaredUnit to kg / declaredUnit and further clarified as kgC / declaredUunit

    • Value constraint corrections:

    • CarbonFootprint/landManagementGhgEmissions: Fixed incorrect definition as non-negative decimal

    • CarbonFootprint/biogenicCarbonWithdrawal: Fixed incorrect definition as non-negative decimal, clarified must be equal to 0 or less than 0

    • Additional clarifications to:

    • CarbonFootprint/fossilGhgEmissions

    • CarbonFootprint/pCfExcludingBiogenic

    • CarbonFootprint/pCfIncludingBiogenic

    • CarbonFootprint/biogenicCarbonWithdrawal

  2. Assurance Data Type Updates:

    • Documentation fix to Assurance/coverage: Changed from mandatory (M) to optional (O)

    • Added property Assurance/assurance in accordance with Framework

  3. API and Documentation Improvements:

Version 2.0.0 (Feb 20, 2023)

Summary of the major changes and concepts added with this version:

  1. update to Pathfinder Framework Version 2.0, including data model changes which are not backwards-compatible, including

    1. addition of data type DataQualityIndicators and Assurance to CarbonFootprint

  2. event-based communication between host systems (§ 5.8 Action Events)

  3. support for data model extensions (§ 4.8 DataModelExtension)

  4. life cycle management of a ProductFootprint (§ 7 Product Footprint Lifecycle)

Data Model Changes

Overview of the changes to the data model compared with the data model version 1.0.1:

API Changes

Version 1.0.1

The following changes have been applied for version 1.0.1

  1. Addition of data type RegionOrSubregion, cleaning up the definition of property geographyRegionOrSubregion

  2. Fix to the JSON representation specification in crosssectoralstandardset-json

  3. Change to the minimum size of the set productOrSectorSpecificRules from 0 to 1, aligning with the overall specification.

  4. Removal of unreferenced data type Boolean from the data model section

  5. Rewording, simplified wording of chapter § 5.5 Authentication Flow

  6. Addition of an authentication flow specification in chapter § 5.5 Authentication Flow

  7. Improved wording of request parameter Filter in section § 5.6 Action ListFootprints

  8. Improved wording in section § 5.4 Error Handling, specifically

    • addition of error response definition

    • improved specification of the error response JSON representation

    • consolidated specification of overall error response representation as a HTTP Response

    • improvements to previous subsection "List of error codes", plus merging into overall section § 5.4 Error Handling

    • addition of list of example situations when an error response is returned

  9. Addition of Section § 9.3 Example Error Response

  10. Addition of term interoperable to section § 2 Terminology, plus linking to in respective sections

  11. Addition of Terms UN geographic region and UN geographic subregion

  12. Introduction of a new property table layout in section § 4.7 CarbonFootprint and § 4.6 ProductFootprint

  13. Removal of data types PositiveDecimal, SpecVersionString, VersionInteger

Index

Terms defined by this specification

References

Normative References

[CE]
Cloud Events Specification. LS. URL: https://github.com/cloudevents/spec
[CE-JSON]
JSON Event Format for CloudEvents - Version 1.0.2. LS. URL: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md
[CE-Structured-Content-Mode]
HTTP Protocol Binding for CloudEvents - Version 1.0.2. LS. URL: https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/bindings/http-protocol-binding.md#32-structured-content-mode
[DATA-MODEL-EXTENSIONS]
Technical Specification for Data Model Extensions. LS. URL: https://wbcsd.github.io/data-model-extensions/spec/
[EXTENSIONS-GUIDANCE]
Guidance and Criteria Catalog for Pathfinder Data Model Extensions. LS. URL: https://wbcsd.github.io/data-model-extensions/guidance/
[ISO8601-1]
Date and time — Representations for information interchange — Part 1: Basic rules. ISO 8601-1:2019.. 2019. ISO 8601-1:2019. URL: https://www.iso.org/standard/70907.html
[OpenAPI]
OpenAPI Specification v3.1.1. URL: https://spec.openapis.org/oas/v3.1.1.html
[OPENID-CONNECT]
OpenID Connect Discovery 1.0 incorporating errata set 1. URL: https://openid.net/specs/openid-connect-discovery-1_0.html
[PACT-METHODOLOGY]
PACT Methodology: Methodology for Calculating and Exchanging Cradle-to-Gate Product Carbon Footprints (PCFs) Version 3.0. LS. URL: https://docs.carbon-transparency.org/spec/3.0.0/PACT_Methodology_3.0.0.pdf
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC6749]
D. Hardt, Ed.. The OAuth 2.0 Authorization Framework. October 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6749
[RFC6750]
M. Jones; D. Hardt. The OAuth 2.0 Authorization Framework: Bearer Token Usage. October 2012. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6750
[RFC8141]
P. Saint-Andre; J. Klensin. Uniform Resource Names (URNs). April 2017. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc8141
[RFC8174]
B. Leiba. Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[RFC8288]
M. Nottingham. Web Linking. October 2017. Proposed Standard. URL: https://httpwg.org/specs/rfc8288.html
[RFC9112]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. HTTP/1.1. June 2022. Internet Standard. URL: https://httpwg.org/specs/rfc9112.html

Informative References

[RFC1035]
P. Mockapetris. Domain names - implementation and specification. November 1987. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc1035
[RFC9562]
K. Davis; B. Peabody; P. Leach. Universally Unique IDentifiers (UUIDs). May 2024. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc9562