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 2.0, see [PACT-METHODOLOGY].
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 consent 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 (§ 5 Data Model) based on the PACT Methodology Version 2.0 and the definition of a HTTP REST API (§ 8 HTTP REST API).
1.3. Intended Audience
This technical specification is for
-
software developers who want to build software for the exchange of product footprints according to the PACT Methodology;
-
auditors and sustainability experts who want to understand the data semantics of product footprints or how they are exchanged between partners; and
-
anyone that wants to understand more about the technological foundations of the PACT Network.
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.
WBCSD would also like to express special thanks to the companies participating in the pilot for testing the interoperable exchange of GHG emissions data across different solutions, as well as to those Solution Providers who have contributed to this document.
1.7. License
The license can be found in Appendix A: License.
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 § 5.5 Data Type: 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.com for more information.
- PACT Methodology Version 2.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.
- 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, 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 § 8 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 § 8 HTTP REST API.
4. Guidance and Business Cases
Note: This chapter is non-normative.
Due to the complexity and nature of global supply chains, achieving transparency in carbon emissions at the product level is a challenging task. As the PACT Methodology Version 2.0 provides the methodological foundations for calculating product carbon footprints (PCFs), 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.
However, these two aspects can be combined in various ways to achieve different business objectives.
This chapter serves as a guidance to the technical specifications in general by providing examples for inter-company business cases related to the exchange of PCFs. The different business cases are explained in a structured way, with business objectives presented through the lenses of interoperable data exchange processes enabled by the different aspects of this specification.
For now, this chapter focuses on asynchronous event processing. It will be expanded with additional business cases over time.
4.1. Asynchronous Event Processing
4.1.1. The General Principles of Event Processing
-
A host system should strive to accept an event unless for the following reasons
-
event processing is not support by the host system
-
the syntax in the event is not supported (e.g. when the event failed “syntax checks” of the request host system)
-
-
Whenever a host system’s
Event
endpoint returns an error response, no follow up response event (or error event) will be sent back to the original requester -
The requested host system will attempt to always send a response event to the requesting host system, but the requesting host system should not rely on this behavior and retry after an appropriate amount of time by sending another new request event.
4.1.2. Business Case 1: Requesting Product Footprints
4.1.2.1. Context and Assumptions
-
This business case is triggered by a data recipient if they wish to access a Product Footprint they could not yet access through the
ListFootprints
API. -
The data recipient and data owner have a mutually agreed upon way to identify products.
4.1.2.2. Workflow
A graphical representation of the workflow is given below. However, this flow is for illustrative purposes only and does not replace or otherwise alter the text below the diagram.
Note: All requests to the /events
endpoint require authentication (omitted from the diagram
below). See § 8.3 Authentication Flow for details.
-
The data recipient sends a
ProductFootprintFragment
to theEvents Endpoint
of the data owner. The data recipient should always include 1 or more product ids in propertyproductIds
. The data recipient should limit each fragment to exactly 1 specific product (e.g. a specific type of apple instead of all apples that somebody is offering)-
If the recipient is requesting a specific reference period, it should include the reference period accordingly
-
If the recipient is requesting a specific geography, it should include the geographic scope accordingly
-
If the recipient has another need that is not covered above, the data recipient should express it as clearly as possible to the best of their ability and following the syntactic rules of the data model
-
Note: it is possible that this request will not be commonly understood by the data owner’s host system
-
-
4.1.2.3. Cases
-
Case 0: The solution does not support this kind of processing
-
Either because the event processing does not exit at all, or the product footprint fragment as it is submitted by the data recipient is not supported by the requested host system
-
The
events
endpoint responds with HTTP error code400
and with a body with error codeNotImplemented
-
-
Case 1: A PCF does not exist (yet) or a partially matching PCF exists
-
Accept the event (HTTP Code 200 returned by the events endpoint)
-
In case of a partial match, the data owner needs to decide whether to calculate the PCF(s) or not.
-
Note: the decision making and decision making protocol for this case is up to the discretion of each data owner
-
-
In case the data owner decided or needs to calculate the PCF and the calculation succeeded,
-
the host system makes the newly calculated footprints also available to the data recipient through
ListFootprints
-
the host system of the data owner sends back the 1 or more product footprints in a single event to the data requester
-
-
In case the data owner decided to not make additional PCFs available
-
the host system responds listing the (partially) matching PCFs
-
-
If the product cannot be found or otherwise identified through the product footprint fragment
-
the host system of the data owner responds with a PF Response Error Event with code
NoSuchFootprint
-
-
If the PCF calculation failed for other reasons
-
the host system SHOULD send **
PF Response Error Event
** with error codeInternalError
-
-
-
Case 2: The PCF(s) exists
-
The host system accepts the event (Code 200)
-
If the data recipient does not have access to the PCF yet
-
the data owner decides on making the PCF available or not
-
if the data owner made the matching PCF(s) available, their host system returns the PCFs to the data recipient
-
otherwise, the host system of the data owner responds with a error event with error code
AccessDenied
-
-
If the data recipient has access to the PCF(s)
-
the data owner responds by sending
-
-
-
Default / Backup Case:
-
The host systems accepts the event (Code 200)
-
The host system sends back a
PF Response Error Event
with codeBadRequest
-
5. Data Model
This section specifies a data model for product footprints conforming with the PACT Methodology Version 2.
The data model consists of the following major data types:
-
ProductFootprint
: contains information to identify a product, plus further information such as theCarbonFootprint
(see § 5.1 Data Type: ProductFootprint) -
CarbonFootprint
: contains information related to the carbon footprint of a product (see § 5.2 Data Type: CarbonFootprint) -
DataModelExtension
: contains additional information beyond the data model specified in this document.
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
.
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
.
5.1. Data Type: ProductFootprint
ProductFootprint
is a data type which represents the carbon footprint
of a product under a specific scope (§ 5.2.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 § 8 HTTP REST API.
Conceptually, the data type ProductFootprint
is modeled as a multi-purpose
container for product-specific emissions 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 § 5.5 Data Type: 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 § 6 Product Footprint Lifecycle).
5.1.1. Properties
A ProductFootprint has the following properties:
Property | Type | Req | Specification |
---|---|---|---|
id : PfId
| String | M | The product footprint identifier, See § 5.30 Data Type: PfId for details. |
specVersion
| String | M |
The version of the ProductFootprint data specification with value 2.3.0 .
Subsequent revisions will update this value according to Semantic Versioning 2.0.0. |
precedingPfIds : PfId
| Array of Strings | O | If defined, MUST be non-empty set of preceding product footprint identifiers without duplicates. See § 5.30 Data Type: PfId and § 6.2 Change Definition and Classification for details. |
version
| Number | M | The version of the ProductFootprint with value an integer in the inclusive range of 0..2^31-1 .
|
created : DateTime
| String | M | A ProductFootprint MUST include the property created with value the timestamp of the creation of the ProductFootprint.
|
updated : DateTime
| String | O | A ProductFootprint SHOULD include the property updated with value the timestamp of the ProductFootprint update. A ProductFootprint MUST NOT include this property if an update has never been performed. The timestamp MUST be in UTC.
|
status
| String | M |
Each ProductFootprint MUST include the property status with value one of the following values:
See § 6 Product Footprint Lifecycle for details. |
statusComment
| String | O |
If defined, a descriptive reasoning 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:
Methodological:
Production Process:
See § 6 Product Footprint Lifecycle for details. |
validityPeriodStart : DateTime
| String | O |
If defined, the start of the validity period of the ProductFootprint.
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 If no validity period is specified, the ProductFootprint is valid for 3 years starting with If a validity period is to be specified, then
|
validityPeriodEnd : DateTime
| String | O | The end (excluding) of the valid period of the ProductFootprint. See validityPeriodStart for further details.
|
companyName
| String | M | The name of the company that is the ProductFootprint Data Owner, with value a non-empty String. |
companyIds : CompanyIdSet
| Array | M | The non-empty set of Uniform Resource Names (URN). Each value of this set is supposed to uniquely identify the ProductFootprint Data Owner. See CompanyIdSet for details. |
productDescription
| String | M | 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 : ProductIdSet
| Array | M | The non-empty set of ProductIds in URN format. Each of the values in the set is supposed to uniquely identify the product. See {#product-identifiers} for syntax and examples. |
productClassifications
| Array of ProductClassification | O | The non-empty set of ProductClassifications in URN format. Each of the values in the set can classify the product as part of distinct groupings and categorizations. See {#product-identifiers}. This property will supersede the CpcCode property in version 3 of the Technical Specifications. |
productCategoryCpc : CpcCode
| String | M |
This property will become DEPRECATED in version 3 of the Technical Specifications. It will be replaced by productClassifications The UN Central Product Classification (CPC) that the given product belongs to. |
productNameCompany
| String | M | The non-empty trade name of the product. |
comment
| String | M |
This property will become OPTIONAL in version 3 of the Technical Specifications. The additional information related to the product footprint. Whereas the property |
pcf : CarbonFootprint
| Object | M | The carbon footprint of the given product with value conforming to the data type CarbonFootprint .
|
extensions : DataModelExtension []
| Array | O |
If defined, 1 or more data model extensions associated with the ProductFootprint.
|
5.2. Data Type: CarbonFootprint
A CarbonFootprint represents the carbon footprint of a product and related data in accordance with the PACT Methodology.
5.2.1. Scope of a CarbonFootprint
Each CarbonFootprint is scoped by
-
Time Period: the time period is defined by the properties
referencePeriodStart
andreferencePeriodEnd
(see PACT Methodology section 6.1.2.1) -
Geography: further set by the properties
geographyRegionOrSubregion
,geographyCountry
, andgeographyCountrySubdivision
(see PACT Methodology section 6.1.2.2)
If a CarbonFootprint
-
Has geographical granularity
Global
, then the propertiesgeographyCountry
andgeographyRegionOrSubregion
andgeographyCountrySubdivision
MUST beundefined
; -
Has a regional or sub-regional geographical granularity, then the property
geographyRegionOrSubregion
MUST bedefined
and the propertiesgeographyCountry
andgeographyCountrySubdivision
MUST beundefined
; -
Has a country-specific geographical granularity, then property
geographyCountry
MUST bedefined
AND the propertiesgeographyRegionOrSubregion
andgeographyCountrySubdivision
MUST beundefined
; -
Has a country subdivision-specific geographical granularity, then property
geographyCountrySubdivision
MUST bedefined
AND the propertiesgeographyRegionOrSubregion
andgeographyCountry
MUST beundefined
.
An overview of the relationship between the geographic scope and the definedness or undefinedness of properties is given in the following table:
Geographical Granularity / Level of aggregation | Property geographyRegionOrSubregion
| Property geographyCountry
| Property geographyCountrySubdivision
|
---|---|---|---|
Global | undefined
| undefined
| undefined
|
Regional or Subregional | defined
| undefined
| undefined
|
Country | undefined
| defined
| undefined
|
Subdivision | undefined
| undefined
| defined
|
5.2.2. Properties
The properties of a CarbonFootprint are listed in the table below.
The properties marked with O*
are OPTIONAL only for reference periods
before 2025, and for reference periods including the beginning of calendar
year 2025 or later, the properties marked with O*
MUST be defined.
Property | Type | Req | Specification |
---|---|---|---|
declaredUnit : DeclaredUnit
| String | M | The unit of analysis of the product. See Data Type DeclaredUnit for further information.
|
unitaryProductAmount : Decimal
| String | M | The amount of Declared Units contained within the product to which the PCF is referring to. The value MUST be strictly greater than 0 .
|
productMassPerDeclaredUnit : Decimal
| String | O |
This property is optional in v2.3 but will be released in v3 as a mandatory attribute. The mass (in kg) of the product per the provided |
pCfExcludingBiogenic : Decimal
| String | M | The product carbon footprint of the product excluding biogenic CO2 emissions. The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal equal to or greater than zero.
|
pCfIncludingBiogenic : Decimal
| String | O* |
If present, the product carbon footprint of the product including all biogenic emissions (CO2 and otherwise). The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal.
Note: the value of this property can be less than |
fossilGhgEmissions : Decimal
| String | M | The emissions from fossil sources as a result of fuel combustion, from fugitive emissions, and from process emissions. The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal equal to or greater than zero.
|
fossilCarbonContent : Decimal
| String | M | The fossil carbon content of the product (mass of carbon). The value MUST be calculated per declared unit with unit kg Carbon per declared unit (kgC / declaredUnit ), expressed as a decimal equal to or greater than zero.
|
biogenicCarbonContent : Decimal
| String | M | The biogenic carbon content of the product (mass of carbon). The value MUST be calculated per declared unit with unit kg Carbon per declared unit (kgC / declaredUnit ), expressed as a decimal equal to or greater than zero.
|
dLucGhgEmissions : Decimal
| String | O* | If present, emissions resulting from recent (i.e., previous 20 years) carbon stock loss due to land conversion directly on the area of land under consideration. The value of this property MUST include direct land use change (dLUC) where available, otherwise statistical land use change (sLUC) can be used.
The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal equal to or greater than zero.
See PACT Methodology (Appendix B) for details.
|
landManagementGhgEmissions : Decimal
| String | O* | If present, GHG emissions and removals associated with land-management-related changes, including non-CO2 sources.
The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal.
|
otherBiogenicGhgEmissions : Decimal
| String | O* | If present, all other biogenic GHG emissions associated with product manufacturing and transport that are not included in dLUC (dLucGhgEmissions ), iLUC (iLucGhgEmissions ), and land management (landManagementGhgEmissions ).
The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal equal to or greater than zero.
|
iLucGhgEmissions : Decimal
| String | O | If present, emissions resulting from recent (i.e., previous 20 years) carbon stock loss due to land conversion on land not owned or controlled by the company or in its supply chain, induced by change in demand for products produced or sourced by the company.
The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal equal to or greater than zero.
See PACT Methodology (Appendix B) for details.
|
biogenicCarbonWithdrawal : Decimal
| String | O* | If present, the Biogenic Carbon contained in the product converted to kilogram of CO2e. The value MUST be calculated per declared unit with unit kgCO2e / declaredUnit expressed as a decimal equal to or less than zero.
|
aircraftGhgEmissions : Decimal
| String | O | If present, the GHG emissions resulting from aircraft engine usage for the transport of the product, excluding radiative forcing. The value MUST be calculated per declared unit with unit kg of CO2 equivalent per declared unit (kgCO2e / declaredUnit ), expressed as a decimal equal to or greater than zero.
|
characterizationFactors
| String | M |
This property is DEPRECATED and only kept to ensure backwards-compatibility. It will be removed in version 3 of these Technical Specifications. It does not replace the (also mandatory) property The IPCC version of the GWP characterization factors used in the calculation of the PCF (see PACT Methodology Section 3.2.2). In case several characterization factors are used, indicate the earliest version used in your calculations, disregarding supplier provided PCFs. The value MUST be one of the following:
|
ipccCharacterizationFactorsSources
| Array of Strings | M |
The characterization factors from one or more IPCC Assessment Reports used in the calculation of the PCF (see PACT Methodology Section 3.2.2).
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.
Example values: ["AR6"]
["AR5", "AR6"]
Per the Methodology the latest available characterization factor version shall be used, i.e., |
crossSectoralStandardsUsed : CrossSectoralStandardSet
| Array | M |
This property is DEPRECATED and only kept to ensure backwards-compatibility. It will be removed in version 3 of these Technical Specifications. It does not replace the (also mandatory) property The cross-sectoral standards applied for calculating or allocating GHG emissions |
crossSectoralStandards
| Array of Strings | M |
The cross-sectoral standards applied for calculating or allocating GHG emissions.
It MUST be a non-empty array and MUST contain only the following values without duplicates:
The enumeration of standards above CAN evolve in future revisions. A host system MUST accept ProductFootprints from later revisions with |
productOrSectorSpecificRules : ProductOrSectorSpecificRuleSet
| Array | O | 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. |
biogenicAccountingMethodology
| String | O* |
The standard followed to account for biogenic emissions and removals. If defined, the value MUST be one of the following:
The enumeration of standards above will be evolved in future revisions. Account for this when implementing the validation of this property. |
boundaryProcessesDescription
| String | M |
This property will become OPTIONAL in version 3 of the Technical Specifications. The processes attributable to each lifecycle stage. Example text value: Electricity consumption included as an input in the production phase |
referencePeriodStart : DateTime
| String | M |
The start (including) 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.
See the PACT Methodology section 6.1.2.1 for further details. Can also be referred to as 'reporting period'. |
referencePeriodEnd : DateTime
| String | M |
The end (excluding) 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. Can al
See the PACT Methodology section 6.1.2.1 for further details. Can also be referred to as 'reporting period'. |
geographyCountrySubdivision
| String |
If present, a ISO 3166-2 Subdivision Code. See § 5.2.1 Scope of a CarbonFootprint for further details.
Example value for the State of New York in the United States of America: US-NY FR-89 | |
geographyCountry : ISO3166CC
| String |
If present, the value MUST conform to data type ISO3166CC. See § 5.2.1 Scope of a CarbonFootprint for further details.
Example value in case the geographic scope is France FR | |
geographyRegionOrSubregion : RegionOrSubregion
| String | If present, the value MUST conform to data type RegionOrSubregion . See § 5.2.1 Scope of a CarbonFootprint for further details. Additionally, see the PACT Methodology Section 6.1.2.2.
| |
secondaryEmissionFactorSources : EmissionFactorDSSet
| Array | O |
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 |
exemptedEmissionsPercent
| Number | M |
The upper boundary of this property (currently The Percentage of emissions excluded from PCF, expressed as a decimal number between |
exemptedEmissionsDescription
| String | M |
This property will become OPTIONAL in version 3 of the Technical Specifications. Rationale behind exclusion of specific PCF emissions, CAN be the empty string if no emissions were excluded. |
packagingEmissionsIncluded
| Boolean | M | A boolean flag indicating whether packaging emissions are included in the PCF (pCfExcludingBiogenic , pCfIncludingBiogenic ).
|
packagingGhgEmissions : Decimal
| String | O | Emissions resulting from the packaging of the product.
If present, the value MUST be calculated per declared unit with unit kg of CO2 equivalent per kilogram (kgCO2e / declared unit ), expressed as a decimal equal to or greater than zero.
The value MUST NOT be defined if packagingEmissionsIncluded is false .
|
allocationRulesDescription
| String | O | If present, a description of any allocation rules applied and the rationale explaining how the selected approach aligns with PACT Methodology rules (see Section 3.3.1.4). |
uncertaintyAssessmentDescription
| String | O | If present, the results, key drivers, and a short qualitative description of the uncertainty assessment. |
primaryDataShare : Percent
| Number | O* |
The share of primary data in percent. See the PACT Methodology Sections 4.2.1 and 4.2.2, Appendix B.
For reference periods ending before the beginning of year 2025, at least property For reference periods including the beginning of year 2025 or after, this property MUST be defined. |
dqi : DataQualityIndicators
| Object | O* |
If present, the Data Quality Indicators (dqi) in accordance with the PACT Methodology Sections 4.2.1 and 4.2.3, Appendix B.
For reference periods ending before the beginning of year 2025, at least property For reference periods including the beginning of year 2025 or after, this property MUST be defined. |
assurance : Assurance
| Object | O | If present, the Assurance information in accordance with the PACT Methodology. |
5.3. Data Type: DataQualityIndicators
Data type DataQualityIndicators
contains the quantitative data quality indicators in conformance with PACT Methodology Section 4.2.3 and Appendix B.
Each property is optional until the reference period includes the beginning of calendar year 2025, or later, when all properties MUST be defined.
The following properties are defined for data type DataQualityIndicators
:
Property | Type | Specification |
---|---|---|
coveragePercent : Percent
| Number | Percentage of PCF included in the data quality assessment based on the >5% emissions threshold.
|
technologicalDQR
| Number |
Quantitative data quality rating (DQR) based on the data quality matrix (See PACT Methodology Table 9),
scoring the technological representativeness of the sources used for PCF calculation based on
weighted average of all inputs representing >5% of PCF emissions.
The value MUST be a decimal between |
temporalDQR
| Number |
Quantitative data quality rating (DQR) based on the data quality matrix (Table 9),
scoring the temporal representativeness of the sources used for PCF calculation based on
weighted average of all inputs representing >5% of PCF emissions.
The value MUST be between |
geographicalDQR
| Number |
Quantitative data quality rating (DQR) based on the data quality matrix (Table 9),
scoring the geographical representativeness of the sources used for PCF calculation
based on weighted average of all inputs representing >5% of PCF emissions.
The value MUST be between |
completenessDQR
| Number |
Quantitative data quality rating (DQR) based on the data quality matrix (Table 9),
scoring the completeness of the data collected for PCF calculation based on
weighted average of all inputs representing >5% of PCF emissions.
The value MUST be between |
reliabilityDQR
| Number |
Quantitative data quality rating (DQR) based on the data quality matrix (Table 9),
scoring the reliability of the data collected for PCF calculation based on
weighted average of all inputs representing >5% of PCF emissions.
The value MUST be between |
{ "technologicalDQR" : 2.0 , "temporalDQR" : 2.0 , "geographicalDQR" : 2.0 , "completenessDQR" : 2.0 , "reliabilityDQR" : 2.0 }
5.4. Data Type: Assurance
Data type Assurance
contains the assurance in conformance with PACT Methodology chapter 5 and appendix B.
The following properties are defined for data type Assurance
:
Property | Type | Req | Specification |
---|---|---|---|
assurance
| Boolean | M | A boolean flag indicating whether the CarbonFootprint has been
assured in line with PACT Methodology requirements (section 5).
|
coverage
| String | O |
Level of granularity of the emissions data assured, with value equal to
This property MAY be undefined only if the kind of assurance was not performed. |
level
| String | O |
Level of assurance applicable to the PCF, with value equal to
This property MAY be undefined only if the kind of assurance was not performed. |
boundary
| String | O |
Boundary of the assurance, with value equal to
This property MAY be undefined only if the kind of assurance was not performed. |
providerName
| String | M |
The non-empty name of the independent third party engaged to undertake the assurance.
Given this property was incorrectly and unintentionally published in V2 of the Technical Specifications as Mandatory, it will be reverted to Optional in version 3 of the Technical Specifications. |
completedAt : DateTime
| String | O | The date at which the assurance was completed. See data type DateTime for details. |
standardName
| String | O | Name of the standard against which the PCF was assured. |
comments
| String | O |
Any additional comments that will clarify the interpretation of the assurance.
This value of this property MAY be the empty string. |
{ "assurance" : true , "coverage" : "PCF system" , "level" : "limited" "boundary" : "Cradle-to-Gate" "providerName" : "My Auditor" , "completedAt" : "2022-12-08T14:47:32Z" "standardName" : "ISO 14044" }
5.5. Data Type: DataModelExtension
Each data model extension MUST be a valid JSON object conforming with the JSON Representation of Data Model Extensions (§ 5. JSON Representation of a Data Model Extension).
See [DATA-MODEL-EXTENSIONS] for technical details and [EXTENSIONS-GUIDANCE] for data model extension guidance.
{ "specVersion" : "2.0.0" , "dataSchema" : "https://catalog.carbon-transparency.com/shipment/1.0.0/data-model.json" , "data" : { "shipmentId" : "S1234567890" , "consignmentId" : "Cabc.def-ghi" , "shipmentType" : "PICKUP" , "weight" : 10 , "transportChainElementId" : "ABCDEFGHI" } }
5.6. Data Type: RegionOrSubregion
The data type RegionOrSubregion
MUST be encoded as a String with value equal to one of the following values:
Africa
-
for the UN geographic region Africa
Americas
-
for the UN geographic region Americas
Asia
-
for the UN geographic region Asia
Europe
-
for the UN geographic region Europe
Oceania
-
for the UN geographic region Oceania
Australia and New Zealand
-
for the UN geographic subregion Australia and New Zealand
Central Asia
-
for the UN geographic subregion Central Asia
Eastern Asia
-
for the UN geographic subregion Eastern Asia
Eastern Europe
-
for the UN geographic subregion Eastern Europe
Latin America and the Caribbean
-
for the UN geographic subregion Latin America and the Caribbean
Melanesia
-
for the UN geographic subregion Melanesia
Micronesia
-
for the UN geographic subregion Micronesia
Northern Africa
-
for the UN geographic subregion Northern Africa
Northern America
-
for the UN geographic subregion Northern America
Northern Europe
-
for the UN geographic subregion Northern Europe
Polynesia
-
for the UN geographic subregion Polynesia
South-eastern Asia
-
for the UN geographic subregion South-eastern Asia
Southern Asia
-
for the UN geographic subregion Southern Asia
Southern Europe
-
for the UN geographic subregion Southern Europe
Sub-Saharan Africa
-
for the UN geographic subregion Sub-Saharan Africa
Western Asia
-
for the UN geographic subregion Western Asia
Western Europe
-
for the UN geographic subregion Western Europe
5.7. Data Type: EmissionFactorDSSet
A set of Emission Factor Data Sources
of size 1 or larger.
5.7.1. JSON Data Representation
As an array of objects, with each object conforming to the JSON representation of EmissionFactorDS
.
5.8. Data Type: EmissionFactorDS
An EmissionFactorDS references emission factor databases (see PACT Methodology Section 4.1.3.2).
5.8.1. Properties
name
(mandatory, data type: NonEmptyString)-
The non-empty name of the emission factor database.
version
(mandatory, data type: NonEmptyString)-
The non-empty version of the emission factor database.
5.8.2. JSON Representation
Each EmissionFactorDS
MUST be encoded as a JSON object.
5.9. Data Type: CrossSectoralStandard
Advisement: This data type is DEPRECATED and will be removed in version 3 of these Technical Specifications.
CrossSectoralStandard is the enumeration of accounting standards used for product carbon footprint calculation. Valid values are
GHG Protocol Product standard
-
for the GHG Protocol Product standard
ISO Standard 14067
-
for ISO Standard 14067
ISO Standard 14044
-
for ISO Standard 14044
5.9.1. JSON Representation
Each CrossSectoralStandard MUST be encoded as a JSON string.
5.10. Data Type: CrossSectoralStandardSet
This data type is DEPRECATED and will be removed in version 3 of these Technical Specifications.
A set of CrossSectoralStandard
values.
5.10.1. JSON Representation
As an array of strings, with each string conforming to the JSON representation of CrossSectoralStandard
.
5.11. Data Type: 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.
5.11.1. Properties
operator
(mandatory, data type:ProductOrSectorSpecificRuleOperator
)-
A ProductOrSectorSpecificRule MUST include the property
operator
with the value conforming to data typeProductOrSectorSpecificRuleOperator
. ruleNames
(mandatory, data type: NonEmptyStringVector)-
A ProductOrSectorSpecificRule MUST include the property
ruleNames
with value the non-empty set of rules applied from the specifiedoperator
. otherOperatorName
(optional, data type: NonEmptyString)-
If the value of property
operator
isOther
, aProductOrSectorSpecificRule
MUST include the propertyotherOperatorName
with value the name of the operator. In this case, the operator declared MUST NOT be included in the definition ofProductOrSectorSpecificRuleOperator
. If the value of property operator is NOT Other, the propertyotherOperatorName
of aProductOrSectorSpecificRule
MUST beundefined
.
5.11.2. JSON Representation
Each ProductOrSectorSpecificRule
MUST be encoded as a JSON object.
5.12. Data Type: ProductOrSectorSpecificRuleSet
A set of ProductOrSectorSpecificRule of size 1 or larger.
5.12.1. JSON Representation
Each ProductOrSectorSpecificRuleSet MUST be encoded as an array of JSON objects, with each object conforming to § 5.11.2 JSON Representation.
5.13. Data Type: ProductOrSectorSpecificRuleOperator
A ProductOrSectorSpecificRuleOperator is the enumeration of Product Category Rule (PCR) operators. Valid values are:
PEF
-
for EU / PEF Methodology PCRs
EPD International
-
for PCRs authored or published by EPD International
Other
-
for a PCR not published by the operators mentioned above
5.13.1. JSON Representation
Each value is encoded as a JSON String.
5.14. Data Type: NonEmptyStringVector
A list of NonEmptyString of length 1 or greater.
5.14.1. JSON Representation
Each NonEmptyStringVector MUST be encoded as an array of NonEmptyStrings.
5.15. Data Type: CpcCode
A CpCode represents a UN CPC Code version 2.1 value.
Example value of the CPC code for "wood in chips or particles":
5.15.1. JSON Representation
Each CpcCode MUST be encoded as a JSON String.
5.16. Data Type: DeclaredUnit
DeclaredUnit is the enumeration of accepted declared units with values
liter
-
for special SI Unit
litre
(see [SI-Unit] Table 8) kilogram
-
for SI Base Unit
kilogram
(see [SI-Unit]) cubic meter
-
for cubic meter, the Derived Unit from SI Base Unit
metre
kilowatt hour
-
for kilowatt hour, the Derived Unit from special SI Unit
watt
megajoule
-
for megajoule, the Derived Unit from special SI Unit
joule
ton kilometer
-
for ton kilometer, the Derived Unit from SI Base Units
kilogram
andmetre
square meter
-
for square meter, the Derived Unit from SI Base Unit
metre
v3 will also include the following DeclaredUnit
: piece
, for a piece, a unit of product
5.16.1. JSON Representation
The value of each DeclaredUnit
MUST be encoded as a JSON String.
5.17. Data Type: NonEmptyString
A String with 1 or more characters.
5.17.1. JSON Representation
Each NonEmptyString MUST be encoded as a JSON String.
5.18. Data Type: CompanyIdSet
A set of CompanyIds of length 1 or greater.
5.19. Data Type: CompanyId
Each CompanyId MUST be a URN.
5.19.1. Custom Company Ids (Company Codes)
If the data owner wishes to use a custom company code assigned to it by a data recipient as a CompanyId value, the data owner SHOULD use the following format:
urn:pact:company:customcode:buyer-assigned:$custom-company-code$
where $custom-company-code$
stands for the custom company code assigned by the data recipient.
4321
by a buyer, the value of the CompanyId is then:
urn:pact:company:customcode:buyer-assigned:4321
.
If the data owner wishes to use its own custom company code known by a data recipient as a CompanyId value, the data owner SHOULD use the following format:
urn:pact:company:customcode:vendor-assigned:$custom-company-code$
where $custom-company-code$
stands for the custom company code set by the data recipient.
6789
which is known to a buyer, the value of the CompanyId is then:
urn:pact:company:customcode:vendor-assigned:6789
.
5.20. Data Type: ProductIdSet
A set of ProductIds of size 1 or larger.
5.20.1. JSON Representation
Each ProductIdSet MUST be encoded as an array of strings.
5.21. Data Type: ProductId
Each ProductId MUST be a URN, see § 7 Product Identification and Classification for details and examples.
5.22. Data Type: ProductClassification
A ProductClassification MUST be a URN conforming to the syntax described under § 7 Product Identification and Classification.
"productClassifications" : [ "urn:pact:catalog.company.com:category-id:550010" , "urn:cpc:0151" ]
5.23. Data Type: URN
A String conforming to the URN syntax.
5.23.1. JSON Representation
Each URN MUST be encoded as a JSON String.
5.24. Data Type: String
A regular UTF-8 String.
5.24.1. JSON Data Representation
Each String MUST be encoded as a JSON String.
5.25. Data Type: Percent
A Decimal number in the range of and including 0
and 100
.
Example values:
5.25.1. JSON Representation
Each Percent MUST be encoded in IEEE-754 double-precision floating-point format as a JSON number.
5.26. Data Type: StrictlyPositiveDecimal
A positive, non-zero Decimal.
Example values:
5.26.1. JSON Representation
See [§ 5.29.1 JSON Representation].
5.27. Data Type: DateTime
Each DateTime MUST be a date and time string conforming to ISO 8601. The timezone MUST be UTC.
Example value for beginning of March, the year 2020, UTC:
5.27.1. JSON Representation
Each DateTime MUST be encoded as a JSON String.
5.28. Data Type: ISO3166CC
An ISO 3166-2 alpha-2 country code.
Example value for tue alpha-2 country code of the United States:
5.28.1. JSON Representation
Each ISO3166CC MUST be encoded as a JSON String.
5.29. Data Type: Decimal
A dotted-decimal number.
Example values:
5.29.1. JSON Representation
Each Decimal MUST be encoded as a JSON String.
5.30. Data Type: PfId
A PfId MUST be a UUID v4 as specified in [RFC9562].
5.30.1. JSON Representation
Each PfId MUST be encoded as a JSON String.
Example JSON string value:
6. Product Footprint Lifecycle
6.1. Introduction
The contents of a Product Footprints
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.
For this, changes to ProductFootprint properties are defined and classified into minor change and major change (§ 6.2 Change Definition and Classification). Depending on the change classification,
-
major changes must result in a new ProductFootprint (§ 6.4 New ProductFootprint creation from major changes) made available to its data recipients,
-
minor changes result in either version updates (§ 6.3 ProductFootprint version creation from minor changes) or new ProductFootprint creation (§ 6.4 New ProductFootprint creation from major changes)
In addition, if a Product Footprint is no longer valid, data owners can communicate this by applying a minor change through setting the status
to Deprecated
6.2. Change Definition and Classification
A change to a ProductFootprint
is defined as a change to one or more properties of a ProductFootprint
, including a change of 1 or more properties from being undefined or to no longer being defined.
A ProductFootprint
with status
Deprecated
MUST NOT be changed.
There are 2 classes of changes to a ProductFootprint
:
- minor change
-
A minor change refers to a set of 1 or more changes to attributes to a
ProductFootprint
, including embedded data such asCarbonFootprint
, etc.minor changes to a
ProductFootprint
SHOULD BE limited to correct errors, to incorporate changes in upstream data sources, or to incorporate changes in secondary data sources.A minor change is limited to the following
CarbonFootprint
properties:-
pCfExcludingBiogenic
,pCfIncludingBiogenic
,fossilCarbonContent
,biogenicCarbonContent
,dLucGhgEmissions
,landManagementGhgEmissions
,otherBiogenicGhgEmissions
,iLucGhgEmissions
,biogenicCarbonWithdrawal
,aircraftGhgEmissions
,packagingEmissionsIncluded
,packagingGhgEmissions
,fossilGhgEmissions
,biogenicCarbonContent
,primaryDataShare
,secondaryEmissionFactorSources
,dqi
,primaryDataShare
as a result of a change resulting from upstream ProductFootprints or an update to secondary data sources -
as a result of changes to the description properties
boundaryProcessesDescription
,allocationRulesDescription
,uncertaintyAssessmentDescription
-
After a change to the assurance statement
assurance
from beingundefined
to being defined
A minor change MUST NOT change the
id
or the scope (§ 5.2.1 Scope of a CarbonFootprint) of theProductFootprint
. -
- major change
-
A major change refers to a set of 1 or more changes with 1 or more changes NOT conforming to the minor change definition.
Additionally, a data owner CAN decide to handle a minor change as a major change (see § 6.4 New ProductFootprint creation from major changes for further details).
Global
(§ 5.2.1 Scope of a CarbonFootprint).
The host system of the data owner then performs the following logical steps:
-
deprecating the current Product Footprint (§ 6.3 ProductFootprint version creation from minor changes) by creating a new version with status set to
Deprecated
-
creating 1 or more new Product Footprints for each new geographical granularity (§ 6.4 New ProductFootprint creation from major changes),
-
finally, making the new Product Footprints available to its data recipients
fossilGhgEmissions
of one of its own Product Footprints.
The host system of the data owner then performs the following logical steps:
-
incorporating the
fossilGhgEmissions
of the downstream Product Footprint into its Product Footprint -
creating a new version of the Product Footprint with the updated
fossilGhgEmissions
by following the specification from § 6.3 ProductFootprint version creation from minor changes -
finally, making the new Product Footprints available to its data recipients
6.3. ProductFootprint version creation from minor changes
A minor change to a ProductFootprint
MAY result in a new version of a ProductFootprint
.
The data owner CAN represent a minor change to a ProductFootprint
by creating 1 or more new ProductFootprints
by following the specification from § 6.4 New ProductFootprint creation from major changes.
A version update to a ProductFootprint
MUST be represented in the ProductFootprint
by
-
incorporating the changes
-
incrementing
version
by 1 (or more) -
setting
updated
to the time and date of the minor change. If defined,updated
MUST be strictly greater than the previous value ofupdated
. Additionally, the value ofupdated
MUST be strictly greater than the value ofcreated
.
6.4. New ProductFootprint creation from major changes
A Major change to 1 or more preceding ProductFootprints
MUST result in
-
at least 1 new
ProductFootprint
being available to respective data recipients -
for each of the preceding ProductFootprints, a new version being available to respective data recipients by
-
following § 6.3 ProductFootprint version creation from minor changes
-
setting
status
toDeprecated
For each new ProductFootprint, the data owner MUST
-
make the necessary calculations for the new ProductFootprint
-
assign the new ProductFootprint a unique
id
-
set
updated
toundefined
-
set
precedingPfIds
to the set ofid
of the 1 or more preceding ProductFootprints
7. Product Identification and Classification
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 ProductClassifications contain URN’s, using well-known namespaces when applicable, or a custom pact
namespace if needed.
7.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:
-
If an IANA-registered URN namespace exists and is applicable, this SHOULD be used. See IANA Registered Namespaces for existing specifications, like ISBN.
-
If a widely used URN schema exists and is applicable, this SHOULD be used, for example GTIN product identifiers.
-
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. -
7.2. Examples of Product Identifiers
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 |
|
ISBN
Well known ISBN standard, see iana.org |
|
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 |
|
UUID
Globally Unique Identifiers. See [RFC9562] |
|
CAS Registry Number
Unique identification number assigned to every chemical substance described in the open scientific literature See cas.org |
|
InChI (International Chemical Identifier)
InChI is a standard identifier for chemical databases that facilitates effective information management across chemistry. See inchi-trust.org |
|
Combined example of a substance
Combined example of a substance (Titan Dioxide of supplier Sigmaaldrich) |
|
7.3. Examples of Product Classifications
Similar to ProductIds a ProductClassification 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:
-
If an IANA-registered URN namespace exists and is applicable, this SHOULD be used. See IANA Registered Namespaces for existing specifications. Example: 'urn:iso'
-
If a widely used URN namespace exists and is applicable, this SHOULD be used.
-
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.
-
7.4. Product Classification Examples
Description | Example |
Custom category | |
UN Central Product Classification
This is an international standard for categorizing goods and services. | |
UN Standard Products and Services Code
UNSPSC is a global classification system for products and services, often used in procurement. | |
ECLASS
ECLASS is a standard classification system for products and services, widely used in industrial and engineering contexts. | |
ISO
Used for identifying ISO standards, which include many technical standards for materials and products. |
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.
8. HTTP REST API
8.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.
8.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 host systems by calling the HTTP REST API (§ 8 HTTP REST API).
Interoperable data exchange between a data owner and a data recipient can be achieved by
-
the data owner offering
ProductFootprint
data through a host system that implements the HTTP REST API, and -
the data recipient making authenticated calls to retrieve ProductFootprint data; e.g. by calling the Action ListFootprints.
8.2.1. Out of scope
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:
- Footprint calculation according to the PACT Methodology
- Authentication and access management: the act of deciding and setting which product footprint may be accessed by each data recipient
- 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.
- Logging: creation and storage of access logs and audit trails related to data exchange, authentication processes, etc.
8.3. Authentication Flow
A host system requires a data recipient to first authenticate before successfully calling an Action (such as Action ListFootprints or Action Events). The data recipient MUST perform the authentication flow:
-
data recipient attempting to perform the OpenId Connect-based flow, by
-
retrieving and validating the OpenId Provider Configuration Document of the host system (see [OPENID-CONNECT]), and then
-
using as AuthEndpoint the value of the
token_endpoint
property of the OpenId Provider Configuration Document
-
-
otherwise, data recipient using AuthHostname
/
AuthSubpath/auth/token
as the AuthEndpoint in the next step. -
data recipient retrieving the access token from AuthEndpoint (see § 8.5.1 Request Syntax (HTTP/1.1)).
Note: The authentication flow is defined such that a Version 2.3.0 data recipient can authenticate against host versions irrespective of their support for OpenID-Connect.
Once the authentication flow is complete, the data recipient can call the other actions of the host system
-
using the value of
access_token
of the response of the Action Authenticate call as the value for a [rfc6750] Bearer token -
presenting the Bearer token for subsequent call(s) to the host system in accordance with [rfc6750] Section 2.1
Access tokens SHOULD expire. In this case, data recipients MUST retrieve a new access token as described in this section.
8.4. Host system minimum requirements
A host system MUST implement actions Action Authenticate, Action ListFootprints, Action GetFootprint, and Action Events.
A host system MUST offer its actions under https method only.
A host system SHOULD offer an OpenId Provider Configuration Document as specified in [OPENID-CONNECT].
A host system MUST offer all actions under the same Hostname and Subpath except for the token endpoint (Action Authenticate and the endpoint returned from the OpenId Provider Configuration Document).
A host system CAN offer the OpenId Provider Configuration Document and Action Authenticate under AuthHostname and AuthSubpath which are different from Hostname and Subpath.
If a host system does not offer an OpenId Provider Configuration Document, data recipients MUST assume that Action Authenticate is offered under AuthHostname/
AuthSubpath/auth/token
(see § 8.3 Authentication Flow).
example.org
and the subpath is /wbcsd
whereas the ID management system uses a id.example.org
domain with an empty subpath. The URIs would then be:
8.5. Action Authenticate
Request an access token using client credentials.
Host systems MUST implement this action in conformance with [rfc6749] Section 4.4 (OAuth2 Client Credentials).
Host systems MAY offer this action under a dedicated AuthHostname and AuthSubpath.
8.5.1. Request Syntax (HTTP/1.1)
For reasons of backwards-compatibility with data recipients implementing the Version 2.0 authentication flow only,
Host systems MUST offer this action under path AuthSubpath/auth/token
and hostname AuthHostname.
POST AuthSubpath /auth/token HTTP / 1.1 host : AuthHostname accept : application/json content-type : application/x-www-form-urlencoded authorization : Basic BasicAuth content-length : ContentLength AuthBody
In addition, if a host system supports OpenId Connect, the host system CAN offer and implement this Action under a second URL, and set this URL as the value of token_endpoint
of the OpenId Provider Configuration Document.
POST AuthEndpoint HTTP / 1.1 accept : application/json content-type : application/x-www-form-urlencoded authorization : Basic BasicAuth content-length : ContentLength AuthBody
With Request parameters:
- AuthEndpoint
-
The endpoint to request an access token after discovering the value by performing the authentication flow.
- AuthSubpath:
-
If a host system uses a relative subpath dedicated to serving an OpenId Provider Configuration Document and creating an access token, then the requesting data recipient MUST use this subpath.
- AuthHostname
-
The requesting data recipient MUST use the domain name of the host system dedicated to serving an OpenId Provider Configuration Document and creating an access token.
- BasicAuth
-
See [rfc6749] Section 4.4.2
- AuthBody
-
See [rfc6749] Section 4.4
- ContentLength
-
The length of the Body. See [rfc9112].
8.5.2. Response Syntax
HTTP/1.1 AuthStatusCode OK content-type: application/json content-length: ContentLength AuthResponseBody
With action-specific response parameters
- AuthStatusCode
-
A HTTP response code conforming to [rfc6749] Section 4.4 and Section 5.
- AuthResponseBody
-
A JSON Object conforming to either RFC 6749 Section 4.4 in case of successful authentication (containing an access token), or RFC 6749 Section 5.2 otherwise. See § 8.3 Authentication Flow for further details
8.5.2.1. Example Successful Response
Example AuthResponseBody for a successful authenticate call:
8.5.2.2. Example Error Response
Example HTTP call, for instance generated because username or password did not match:
HTTP / 1.1 400 Bad Request date : Mon, 23 Oct 2023 19:33:16 GMT content-type : application/json
{ "error" : "invalid_client" , "error_description" : "Authentication failed" }
For further details, for instance on the list of specified values of property error
, consult [rfc6749] Section 5.2.
8.6. Action ListFootprints
Lists product footprints with pagination and optional filtering.
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.
8.6.1. Filtering
Filtering CAN be requested by a data recipient by setting a conforming Filter request parameter.
Note: The filter statement syntax is described at the Filter request parameter.
Support for filtering by a host system is OPTIONAL such that
-
if a host system does not implement Filtering, it MUST process the request as if no Filter was provided
-
If a host system implements Filtering, it CAN process the filter statement on a best-effort basis:
-
it CAN ignore the filter statement or parts of the filter statement, or
-
it CAN refuse to process the specific filter statement if it does not support the filter statement or parts of it. In this case, it MUST return an error response with code NotImplemented.
-
8.6.2. Pagination
Host systems MUST implement pagination server-side such that
-
The host system MAY return less ProductFootprints than requested through the Limit request parameter
-
The host system MUST return a
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 tonext
-
the target IRI (RFC8288, section 3.1) of the
Link
header is absolute -
The value of
host
of the target IRI is equal to the value of thehost
request header from the originalListFootprints
HTTP request
The target IRI from a pagination link
header is called a pagination link.
Upon a host system returning a pagination link
-
a data recipient CAN call the pagination link more than once
-
upon each call, the host system
-
MUST return the same set of Product Footprints upon successful authentication (i.e. a Bearer token authentication as defined in § 8.3 Authentication Flow)
-
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
-
-
If a response contains a second pagination link and the data recipient upon calling the second pagination link, the previous pagination link MAY no longer work
-
i.e. data recipients MUST NOT assume that previous pagination links continue to return results after advancing in the pagination process
-
-
a pagination link MUST be valid for at least 180 seconds after creation
-
a data recipient SHOULD retry calling the pagination link after the server returned an error
-
and SHOULD use a randomized exponential back-off strategy when retrying
8.6.3. Request Syntax (HTTP/1.1)
GET Subpath /2/footprints? Filter & Limit HTTP / 1.1 host : Hostname authorization : Bearer BearerToken
with request parameters:
- Subpath
-
If a host system uses a relative subpath, then the requesting data recipient MUST prepend this subpath.
- Hostname
-
The requesting data recipient MUST use the domain name of the host system.
- BearerToken
-
see Bearer Token of section § 8.3 Authentication Flow
- Filter
-
Filter
is an OPTIONAL request parameter. If defined,-
the name of the HTTP request parameter MUST be
$filter
-
the value of the HTTP request parameter MUST conform to the
$filter
syntax as defined by the ODatav4 specification.
Additionally, the
$filter
statement MUST only include the following operators and properties:-
Logical operators
eq
,lt
,le
,gt
,ge
on propertiescreated
,updated
,productCategoryCpc
,geographyCountry
,referencePeriodStart
,referencePeriodEnd
. -
Logical operator
and
. -
Lambda operator
any
on collection-valued propertiescompanyIds
,productIds
. The expression argument of the operator MUST only include theeq
operator.
-
- Limit
-
Limit
is an OPTIONAL request parameter. If defined,-
the name of the HTTP request parameter MUST be
limit
-
and the value MUST be a positive integer.
-
8.6.4. Response Syntax
HTTP/1.1 ListStatusCode ListStatusText content-type: application/json content-length: ContentLength ListResponseBody
With response parameters
- ListStatusCode
-
If the host system returns a list of product footprints, the
HttpStatusCode
MUST be either 200 or 202:-
HttpStatusCode
200 indicates the returned list is the complete result of the given query. -
HttpStatusCode
202 indicates the returned list is an incomplete result of the given query. The host system MAY return thisHttpStatusCode
if it principally decides that it’s able to obtain the remaining data in the future. ThisHttpStatusCode
MUST NOT be returned if the request parameterFilter
is not defined. The data recipient MAY continue to send the same request with exponential-backoff until it receives the complete result, indicated byHttpStatusCode
200.
If the host system responds with an error response, the
HttpStatusCode
MUST match the HTTP Status Code of the respective error response code.If the host system does not return the list of ProductFootprints, it MUST return an error HTTP Status Code (4xx, 5xx).
-
- ListStatusText
-
The HTTP Status text conforming to the HTTP status code ListStatusCode.
- ListResponseBody
-
If the host system accepts the access token, the body MUST be a JSON object with property
data
with value the list ofProductFootprints
. The list MUST be encoded as a JSON array. If the list is empty, the host system MUST return an empty JSON array.The host system MUST return the latest version of each footprint and MAY return previous versions. Among the footprints with identical
id
values, the one with the maximumversion
value is called the latest version and the rest are called the previous versions.If the request parameter
Filter
is defined, the specified expression SHOULD be evaluated for each ProductFootprint in the collection as described in OData v4 specification, and onlyProductFootprints
where the expression evaluates to true SHOULD be included in the response. ProductFootprints for which the expression evaluates to false or which are not made available for the data recipient SHOULD be omitted from the list returned in the response.If the access token is valid, but the client does not have the necessary permissions to access the requested
ProductFootprints
, the host system MUST return an error response with code AccessDenied.If the host system does not accept the access token because it expired, the body SHOULD be an error response with code TokenExpired.
In all other cases, the body SHOULD be an error response with code BadRequest.
8.7. Action GetFootprint
Retrieves product footprints.
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.
8.7.1. Request Syntax
GET Subpath /2/footprints/ GetPfId HTTP / 1.1 Host : Hostname authorization : Bearer BearerToken
with request-specific parameters:
- GetPfId
-
The value of property
id
of a product footprint a data recipient intends to retrieve.
8.7.2. Response Syntax
HTTP/1.1 GetStatusCode GetStatusText content-type: application/json content-length: ContentLength GetResponseBody
With response parameters:
- GetStatusCode
-
The HTTP Status Code of the response.
If the host system accepts the access token, the HTTP Status Code MUST be 200.
If the host system responds with an error response, the HTTP status code MUST match the HTTP Status Code of the respective error response code.
If the host system does NOT return a product footprint, the host system MUST return an error HTTP Status Code (4xx, 5xx). - GetStatusText
-
The HTTP Status text conforming to the HTTP status code GetStatusCode.
- GetResponseBody
-
If the host system accepts the access token and allows the requesting data recipient to access the requested product footprint, the body MUST be a JSON object with property data. The value of property data MUST be the product footprint with footprint identifier GetPfId.
If there were changes to the requested product footprint with identifier GetPfId, the host system SHOULD return the latest product footprint identified with identifier GetPfId and the maximum value of property version.
Note: If a host system implements the life cycle rules, then the “latest” version of the requested product footprint is the one with the maximum value of version with
id
equal to GetPfId.If the access token is valid, but the client does not have the necessary permissions to access the requested
ProductFootprint
, the host system MUST return an error response with code AccessDenied.If the host system does not accept the access token because it expired, the host system SHOULD return an error response with code TokenExpired.
The host system MAY return an error response with code NoSuchFootprint.
In all other cases, the body SHOULD be an error response with code BadRequest.
8.8. Action Events
The Action Events enables the exchange of event data between data owners and data recipients.
The Action Events endpoint is specified for the following use cases:
-
enabling a data owner to notify a data recipient on updates to 1 or more Product Footprints (see § 8.8.3 Notification of data recipients on Product Footprint updates)
-
enabling a data recipient to request product footprints from a data owner by sending an event to the data owner’s Action Events endpoint (see § 8.8.4 Asynchronous request and retrieval of Product Footprints).
A host system SHOULD only accept events after authentication (see § 8.3 Authentication Flow).
The Action Events endpoint accepts CloudEvent events (see [CE]) encoded in "Structured Content Mode" (see [CE-Structured-Content-Mode].
Support for Action Events is MANDATORY.
If a host system does NOT implement the Action Events endpoint,
-
it SHOULD respond with a conforming error response and HTTP error response code.
-
it SHOULD respond to authenticated Action Events calls with an error response with code NotImplemented.
-
it MUST respond with an error HTTP Status Code (4xx, 5xx).
8.8.1. Request Syntax
The general request syntax is:
POST Subpath /2/events HTTP / 1.1 host : Hostname authorization : Bearer BearerToken content-type : application/cloudevents+json; charset=UTF-8 Event Body
With request parameters:
- EventBody
-
The EventBody MUST be
-
a CloudEvents event (see [CE])
-
encoded as a JSON object as defined in [CE-JSON]
-
using "Structured Content Mode" (see [CE-Structured-Content-Mode]).
Further details on the EventBody syntax and semantics are given in § 8.8.3 Notification of data recipients on Product Footprint updates and § 8.8.4 Asynchronous request and retrieval of Product Footprints.
-
8.8.2. Response Syntax
The host system upon accepting the event MUST respond with HTTP Status Code 200 and an empty body:
HTTP / 1.1 200 OK content-length : 0
The host system upon not accepting the event SHOULD respond with an error response (see § 8.9 Error responses).
8.8.3. Notification of data recipients on Product Footprint updates
A data owner CAN notify a data recipient about changes to 1 or more product footprints by sending a PF Update Event to the data recipient’s Action Events endpoint.
A data recipient upon receiving such an PF Update Event CAN retrieve the product footprints through the Action GetFootprint.
Accordingly, the data owner of the host system sending the event MUST make the referenced Product Footprints available to the data recipient notified through the PF Update Event.
The PF Update Event is defined as a JSON-encoded CloudEvent event with the following syntax:
{ "type" : "org.wbcsd.pathfinder.ProductFootprint.Published.v1" , "specversion" : "1.0" , "id" : " EventId " , "source" : "// EventHostname / EventSubpath " , "time" : "2022-05-31T17:31:00Z" , "data" : { "pfIds" : Pf Ids} }
with
- EventId
-
A unique identifier for the event set by the host system sending the event. The EventId MUST be a string (see [CE-JSON]).
- PfIds
-
A list of product footprint that have been updated. The PfIds MUST be the non-empty list of
id
values of the updated Product Footprints, encoded as a JSON array. - EventHostname
-
The Hostname of the host system sending the event.
- EventSubpath
-
The handler of the host system sending the event.
8.8.4. Asynchronous request and retrieval of Product Footprints
A data recipient CAN request a data owner to send a product footprint by sending a PF Request Event to the data owner’s Action Events endpoint.
A data owner upon receiving a PF Request Event can then decide how to process the request
-
by sending a PF Response Event to the data recipient’s Action Events endpoint
-
by sending a PF Response Error Event to the data recipient’s Action Events endpoint to notify the data recipient that the request cannot be processed, or
-
by not sending any event to the data recipient’s Action Events endpoint.
If a data owner accepted a PF Request Event, the host system MUST send the response back to the host system referenced in source
of the PF Request Event.
The host system of the data owner MUST validate the value of source
before sending the response.
If the host system of the original requestor (the data recipient) is not available or does not accept the response with a HTTP success code (2xx), the data owner’s host system SHOULD retry sending the response event using exponential backoff.
A host system SHOULD NOT retry sending a response event for more than 3 days.
8.8.4.1. PF Request Event syntax
The PF Request Event MUST be a CloudEvent event sent from a data recipient to a data owner containing a Product Footprint fragment that references a single product. The data recipient CAN add additional properties to a fragment to further limit which PCF is requested, such as to select PCFs with specific scope(s) (§ 5.2.1 Scope of a CarbonFootprint).
Note: this specification does not yet specify the processing requirements of a host system upon receiving such an event. This means the host system can e.g. ignore 1 or more properties, it might not accept specific patterns of requests (for instance it might support querying by reference period but not by geography), etc.
The PF Request Event is defined as a JSON-encoded CloudEvent event with the following syntax:
{ "type" : "org.wbcsd.pathfinder.ProductFootprintRequest.Created.v1" , "specversion" : "1.0" , "id" : " EventId " , "source" : "// EventHostname / EventSubpath " , "time" : "2022-05-31T17:31:00Z" , "data" : { "pf" : Product Foot print Fragment , "comment" : PFRequest Comment } }
with
- ProductFootprintFragment
-
A JSON object with a subset of
ProductFootprint
properties, including nested properties. It is RECOMMENDED to include at least the ProductIds in the PF Request Event request body. - PFRequestComment
-
The OPTIONAL comment by the data recipient to the data owner about the request. If defined, the PFRequestComment MUST be encoded as a JSON string.
The property data.comment
of a PF Request Event is OPTIONAL.
8.8.4.2. PF Response Event syntax
The PF Response Event is defined as a CloudEvent event sent from a data owner to a data recipient after having received a PF Request Event from a data recipient and upon successfully fulfilling the request.
The PF Response Event is defined as a JSON-encoded CloudEvent event with the following syntax:
{ "type" : "org.wbcsd.pathfinder.ProductFootprintRequest.Fulfilled.v1" , "specversion" : "1.0" , "id" : " EventId " , "source" : "// EventHostname / EventSubpath " , "data" : { "requestEventId" : " ReqEventId " , "pfs" : Pfs } }
with
- ReqEventId
-
The EventId of the PF Request Event that the PF Response Event is responding to. The ReqEventId MUST be a string (see [CE-JSON]).
- Pfs
-
The list of product footprints that have been requested with the PF Request Event and that are accessible to the data recipient, encoded as an array of
ProductFootprint
in JSON.Otherwise, the value of Pfs MUST be the empty JSON array.
8.8.4.3. PF Response Error Event syntax
The PF Response Error Event is defined as a CloudEvent event sent from a data owner to a data recipient after having received a PF Request Event from a data recipient and upon NOT successfully fulfilling the request.
The PF Response Event is defined as a JSON-encoded CloudEvent event with the following syntax:
{ "type" : "org.wbcsd.pathfinder.ProductFootprintRequest.Rejected.v1" , "specversion" : "1.0" , "id" : " EventId " , "source" : "..." , "data" : { "requestEventId" : " ReqEventId " , "error" : ReqErrorResponse } }
with
- ReqErrorResponse
-
The error response that the data owner is sending to the data recipient to notify the data recipient that the request cannot be processed.
The value of ReqErrorResponse MUST be an error response (see § 8.9 Error responses).
8.9. Error responses
The actions Action GetFootprint, Action ListFootprints, and Action Events specify general error response handling.
This section specifies the shared HTTP error response handling across these actions.
Error responses are specified in detail such that data recipients can understand the cause of the error, and so that potentially host systems can react on and resolve errors automatically.
Note: Action Authenticate specifies its own error responses (see § 8.5.2 Response Syntax).
Whenever a host system returns an error response, it MUST send a HTTP response such that
-
the HTTP Status Code equals the
HTTP Status Code
defined for the respective error response code (see Error Codes Table) -
with content type set to
application/json
, and -
with response body the error response
A error response is a JSON object with the following properties:
-
code
: a error response code encoded as a String -
message
: a error message encoded as a String
A error response code is a value from column Error Response Code
from the table below.
A error message is a human-readable error description. Example values are in column Example Message
in the table below.
A host system MAY return error messages different from the table below, for instance localized values depending on a data recipient.
Error Response Code
| Example Message
| HTTP Status Code
|
---|---|---|
AccessDenied | Access denied | 403 |
BadRequest | Bad Request | 400 |
NoSuchFootprint | The specified footprint does not exist. | 404 |
NotImplemented | The specified Action or header you provided implies functionality that is not implemented | 400 |
TokenExpired | The specified access token has expired | 401 |
InternalError | An internal or unexpected error has occurred | 500 |
8.9.1. Error processing by a data recipient
A requesting data recipient MUST use the code property and potentially also the HTTP Status Code to differentiate between the different errors.
8.10. Examples
8.10.1. Example Action ListFootprints request and response
Example request:
GET /2/footprints?limit=10 HTTP / 2 host : api.pathfinder.sine.dev authorization : Bearer [BearerToken]
Example response HTTP headers:
HTTP / 1.1 200 OK date : Mon, 23 May 2022 19:33:16 GMT content-type : application/json content-length : 1831 server : Pathfinder link : <https://api.pathfinder.sine.dev/2/footprints?limit=10&offset=10>; rel="next"
Example response body:
{ "data" : [ { "id" : "91715e5e-fd0b-4d1c-8fab-76290c46e6ed" , "specVersion" : "2.0.0" , "version" : 1 , "created" : "2022-03-01T09:32:20Z" , "status" : "Active" , "validityPeriodStart" : "2022-03-01T09:32:20Z" , "validityPeriodEnd" : "2024-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" ], "productCategoryCpc" : "6398" , "productNameCompany" : "Green Ethanol" , "comment" : "" , "pcf" : { "declaredUnit" : "liter" , "unitaryProductAmount" : "1" , "pCfExcludingBiogenic" : "1.63" , "pCfIncludingBiogenic" : "1.85" , "fossilGhgEmissions" : "1.5" , "fossilCarbonContent" : "0" , "biogenicCarbonContent" : "0.41" , "dLucGhgEmissions" : "0.8" , "landManagementGhgEmissions" : "0.6" , "otherBiogenicGhgEmissions" : "0.4" , "iLucGhgEmissions" : "0" , "biogenicCarbonWithdrawal" : "-1.5" , "aircraftGhgEmissions" : "0.2" , "characterizationFactors" : "AR6" , "ipccCharacterizationFactorsSources" : [ "AR6" ], "crossSectoralStandardsUsed" : [ "GHG Protocol Product standard" , "ISO Standard 14067" ], "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" : "2021-01-01T00:00:00Z" , "referencePeriodEnd" : "2022-01-01T00:00:00Z" , "geographyRegionOrSubregion" : "Western Europe" , "secondaryEmissionFactorSources" : [ { "name" : "Ecoinvent" , "version" : "3.1" } ], "exemptedEmissionsPercent" : 0 , "exemptedEmissionsDescription" : "" , "packagingEmissionsIncluded" : false , "allocationRulesDescription" : "Using mass allocation following the product specific rule as per PACT Framework decision-making tree" , "uncertaintyAssessmentDescription" : "A model of corn production is involved in predicting emissions from the production of the corn feedstock. Emissions of N2O due to application of nitrogen fertilizers are based on a linear modeling of interactions of the fertilizer with the soil and plant systems. As these interactions are more complicated than the model assumes, there is uncertainty regarding the emissions resulting from this model" , "primaryDataShare" : 12.9 , "dqi" : { "coveragePercent" : 78 , "technologicalDQR" : 1.6 , "temporalDQR" : 2.6 , "geographicalDQR" : 1.8 , "completenessDQR" : 1.7 , "reliabilityDQR" : 2.1 }, "assurance" : { "assurance" : false , "providerName" : "" } }, "extensions" : [ { "specVersion" : "2.0.0" , "dataSchema" : "https://catalog.carbon-transparency.com/shipment/1.0.0/data-model.json" , "data" : { "shipmentId" : "S1234567890" , "consignmentId" : "Cabc.def-ghi" , "shipmentType" : "PICKUP" , "weight" : 10 , "transportChainElementId" : "ABCDEFGHI" } } ] } ] }
Example response empty body:
{ "data" : [] }
8.10.2. Example Error Response
Example request:
GET /2/footprints HTTP / 2 host : api.pathfinder.sine.dev
Example response headers:
HTTP / 1.1 403 Forbidden date : Mon, 23 May 2022 19:33:16 GMT content-type : application/json content-length : 44 server : Pathfinder
Example response body:
{ "message" : "Access Denied" , "code" : "AccessDenied" }
8.10.3. Example PF Request and Response Events
Example PF Request Event:
POST Subpath/2/events HTTP / 1.1 host : api.pathfinder.sine.dev authorization : Bearer [BearerToken] content-type : application/cloudevents+json; charset=UTF-8
Example PF Request Event body
{ "type" : "org.wbcsd.pathfinder.ProductFootprintRequest.Created.v1" , "specversion" : "1.0" , "id" : "848dcf00-2c18-400d-bcb8-11e45bbf7ebd" , "source" : "//RequesterEventHostname/EventSubpath" , "time" : "2023-11-06T16:23:00Z" , "data" : { "pf" : { "productIds" : [ "urn:gtin:4712345060507" ] }, "comment" : "Please provide current PCF value." } }
Example PF Request Event response headers
HTTP / 1.1 200 OK content-length : 0
POST Subpath/2/events HTTP / 1.1 host : api.pathfinder.sine.dev authorization : Bearer [BearerToken] content-type : application/cloudevents+json; charset=UTF-8
Example PF Response Event body
{ "type" : "org.wbcsd.pathfinder.ProductFootprintRequest.Fulfilled.v1" , "specversion" : "1.0" , "id" : "5afe8fbf-0ea9-477c-a1df-2d3c95f7eec0" , "source" : "//ProviderEventHostname/EventSubpath" , "time" : "2023-11-08T13:26:00Z" , "data" : { "requestEventId" : "848dcf00-2c18-400d-bcb8-11e45bbf7ebd" , "pfs" : [ { "id" : "91715e5e-fd0b-4d1c-8fab-76290c46e6ed" , "specVersion" : "2.0.0" , "version" : 1 , "created" : "2022-03-01T09:32:20Z" , "status" : "Active" , "validityPeriodStart" : "2022-03-01T09:32:20Z" , "validityPeriodEnd" : "2024-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" ], "productCategoryCpc" : "6398" , "productNameCompany" : "Green Ethanol" , "comment" : "" , "pcf" : { "declaredUnit" : "liter" , "unitaryProductAmount" : "1" , "pCfExcludingBiogenic" : "1.63" , "pCfIncludingBiogenic" : "1.85" , "fossilGhgEmissions" : "1.5" , "fossilCarbonContent" : "0" , "biogenicCarbonContent" : "0.41" , "dLucGhgEmissions" : "0.8" , "landManagementGhgEmissions" : "0.6" , "otherBiogenicGhgEmissions" : "0.4" , "iLucGhgEmissions" : "0" , "biogenicCarbonWithdrawal" : "-1.5" , "aircraftGhgEmissions" : "0.2" , "characterizationFactors" : "AR6" , "ipccCharacterizationFactorsSources" : [ "AR6" ], "crossSectoralStandardsUsed" : [ "GHG Protocol Product standard" , "ISO Standard 14067" ], "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" : "2021-01-01T00:00:00Z" , "referencePeriodEnd" : "2022-01-01T00:00:00Z" , "geographyRegionOrSubregion" : "Western Europe" , "secondaryEmissionFactorSources" : [ { "name" : "Ecoinvent" , "version" : "3.1" } ], "exemptedEmissionsPercent" : 0 , "exemptedEmissionsDescription" : "" , "packagingEmissionsIncluded" : false , "allocationRulesDescription" : "Using mass allocation following the product specific rule as per PACT Framework decision-making tree" , "uncertaintyAssessmentDescription" : "A model of corn production is involved in predicting emissions from the production of the corn feedstock. Emissions of N2O due to application of nitrogen fertilizers are based on a linear modeling of interactions of the fertilizer with the soil and plant systems. As these interactions are more complicated than the model assumes, there is uncertainty regarding the emissions resulting from this model" , "primaryDataShare" : 12.9 , "dqi" : { "coveragePercent" : 78 , "technologicalDQR" : 1.6 , "temporalDQR" : 2.6 , "geographicalDQR" : 1.8 , "completenessDQR" : 1.7 , "reliabilityDQR" : 2.1 }, "assurance" : { "assurance" : false , "providerName" : "" } }, "extensions" : [ { "specVersion" : "2.0.0" , "dataSchema" : "https://catalog.carbon-transparency.com/shipment/1.0.0/data-model.json" , "data" : { "shipmentId" : "S1234567890" , "consignmentId" : "Cabc.def-ghi" , "shipmentType" : "PICKUP" , "weight" : 10 , "transportChainElementId" : "ABCDEFGHI" } } ] } ] } }
Example Response Event response headers
HTTP / 1.1 200 OK content-length : 0
8.10.4. Example Action GetFootprint request and response
Example request:
GET /2/footprint/91715e5e-fd0b-4d1c-8fab-76290c46e6ed HTTP / 2 host : api.pathfinder.sine.dev authorization : Bearer [BearerToken]
Example response HTTP headers:
HTTP / 1.1 200 OK date : Mon, 23 May 2022 19:33:16 GMT content-type : application/json content-length : 1831 server : Pathfinder
Example response body:
{ "data" : { "id" : "91715e5e-fd0b-4d1c-8fab-76290c46e6ed" , "specVersion" : "2.0.0" , "version" : 1 , "created" : "2022-03-01T09:32:20Z" , "status" : "Active" , "validityPeriodStart" : "2022-03-01T09:32:20Z" , "validityPeriodEnd" : "2024-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" ], "productCategoryCpc" : "6398" , "productNameCompany" : "Green Ethanol" , "comment" : "" , "pcf" : { "declaredUnit" : "liter" , "unitaryProductAmount" : "1" , "pCfExcludingBiogenic" : "1.63" , "pCfIncludingBiogenic" : "1.85" , "fossilGhgEmissions" : "1.5" , "fossilCarbonContent" : "0" , "biogenicCarbonContent" : "0.41" , "dLucGhgEmissions" : "0.8" , "landManagementGhgEmissions" : "0.6" , "otherBiogenicGhgEmissions" : "0.4" , "iLucGhgEmissions" : "0" , "biogenicCarbonWithdrawal" : "-1.5" , "aircraftGhgEmissions" : "0.2" , "characterizationFactors" : "AR6" , "ipccCharacterizationFactorsSources" : [ "AR6" ], "crossSectoralStandardsUsed" : [ "GHG Protocol Product standard" , "ISO Standard 14067" ], "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" : "2021-01-01T00:00:00Z" , "referencePeriodEnd" : "2022-01-01T00:00:00Z" , "geographyRegionOrSubregion" : "Western Europe" , "secondaryEmissionFactorSources" : [ { "name" : "Ecoinvent" , "version" : "3.1" } ], "exemptedEmissionsPercent" : 0 , "exemptedEmissionsDescription" : "" , "packagingEmissionsIncluded" : false , "allocationRulesDescription" : "Using mass allocation following the product specific rule as per PACT Framework decision-making tree" , "uncertaintyAssessmentDescription" : "A model of corn production is involved in predicting emissions from the production of the corn feedstock. Emissions of N2O due to application of nitrogen fertilizers are based on a linear modeling of interactions of the fertilizer with the soil and plant systems. As these interactions are more complicated than the model assumes, there is uncertainty regarding the emissions resulting from this model" , "primaryDataShare" : 12.9 , "dqi" : { "coveragePercent" : 78 , "technologicalDQR" : 1.6 , "temporalDQR" : 2.6 , "geographicalDQR" : 1.8 , "completenessDQR" : 1.7 , "reliabilityDQR" : 2.1 }, "assurance" : { "assurance" : false , "providerName" : "" } }, "extensions" : [ { "specVersion" : "2.0.0" , "dataSchema" : "https://catalog.carbon-transparency.com/shipment/1.0.0/data-model.json" , "data" : { "shipmentId" : "S1234567890" , "consignmentId" : "Cabc.def-ghi" , "shipmentType" : "PICKUP" , "weight" : 10 , "transportChainElementId" : "ABCDEFGHI" } } ] } }
Appendix A: License
-
Definitions.
1.1 "Database Rights" means, to the extent any content in the Licensed Material is subject to any sui generis database right under any applicable law, the rights to extract, reuse, reproduce, and Share all or a substantial portion of the content subject to such database right.
1.2 "Derivative" means any work or other creation that is a derivative work or otherwise derived from, based on, or including or using the Licensed Material, or any information or content thereof, in whatever form, format, or medium, now known or becoming known in the future.
1.3 "Licensed Rights" means any copyrights (including exclusive rights of reproduction, performance, display, creation of derivative works, and distribution), and any Database Rights, in the Licensed Material anywhere in the world owned by Licensor that Licensor has the right to license. Licensed Rights do not include (i) any intellectual property or other rights other than copyrights and Database Rights (including, without limitation, any rights in, to, or under any patent, patent application, trademark, service mark, trade dress, name, domain name, trade secret, or other intellectual property right anywhere in the world), (ii) any rights of integrity or attribution or other moral rights anywhere in the world, (iii) any rights to assert or enforce any copyrights or Database Rights against any other person, including, without limitation, in case of any infringement or violation, or to assert or collect any remedy therefor, and (iv) any copyrights or Database Rights in any subject matter other than the Licensed Material.
1.4 "Licensor" means World Business Council for Sustainable Development.
1.5 "Modified Version" means any copy or version of the Licensed Material that includes any alteration of, editing of, deletion from, addition or supplement to, or change or redaction of, or any variation of any content or information of, the Licensed Material, in whatever form, format, or medium, now known or becoming known in the future.
1.6 "Non-Commercially" means without the primary intent for or directed towards commercial advantage or monetary compensation.
1.7 "Reproduction" means an exact reproduction and copy of the Licensed Material as a whole or of any Translation released by Licensor under this License, without any alteration, edits, deletions, additions, supplements, changes, or redactions, and including, for the avoidance of doubt, this License. A Modified Version is not a Reproduction.
1.8 "Separate Derivative" means any Derivative that does not consist of or include a Reproduction, any Modified Version, or any Translation, or a part of a Reproduction, Modified Version, or Translation that is by itself the subject of Licensed Rights. An example of a Separate Derivative is a software program, course, written material, or program that uses or implements the information included in the Licensed Material without including, displaying, or performing the Licensed Material, any Modified Version, or any Translation, or any portion thereof.
1.9 "Share" means to provide, by any means or process, including by distribution of a copy, reproduction, public display, public performance, dissemination, communication, or importation, or to make available for access on a website or otherwise, to any other person as a member of the public
1.10 "Translation" means any translation of the Licensed Material as a whole (and not only a part thereof) that into any language other than English that reasonably accurately reflects the content of the Licensed Material in such other language.
1.11 "Use" means the practice or exercise of any of the Licensed Rights
-
License.
2.1 Subject to the terms and conditions of this License, Licensor hereby grants User during the Term (as defined in Section 6.1), solely under the Licensed Rights, a non-exclusive, worldwide, royalty-free, non-sublicensable, non-transferable, irrevocable license to Use the Licensed Material solely to: a. reproduce, but not Share (other than as permitted under Section 2.1(c)), the Licensed Material or any part thereof; b. create, but not Share (other than as permitted under Section 2.1(d)), any Derivative; c. Share (subject to compliance with Section 3.1) any Reproduction but only Non-Commercially; d. Share (subject to compliance with Section 3.2) any Separate Derivative, and create from such Separate Derivative any further Separate Derivatives and Share such further Separate Derivatives, all whether Non-Commercially or commercially.
2.2 If User Shares a Reproduction under Section 2.1(c) to another person, User automatically grants such other person an offer from Licensor to Use such Reproduction under this License, and such other person shall be deemed to accept and be subject to this License (and be a User under this License) once such other person make any Use of the Licensed Material or any part thereof. Other than this License, User may not impose any limitations, restrictions (technical, legal, or otherwise), payment, terms, conditions, or requirement of any kind on any such other person related to the access to or Use of such Reproduction under this License.
2.3 User shall make any User and exercise any of the Licensed Rights solely in accordance and compliance with all applicable law, and User shall not infringe any intellectual property right of any third party and/or misappropriate any information or intellectual property of any third party.
-
Attribution.
3.1 If User Shares any Reproduction under Section 2.1(c), User must retain, and not change, obstruct, or obscure in such Reproduction, the following information:
(i) identification of Licensor as the owner or rightholder of the Licensed Rights in the Licensed Material, and the name of any creator(s) of the Licensed Material identified herein; (ii) the copyright notice in this Licensed Material; (iii) the full text of this License.
3.2 If User Shares a Separate Derivative under Section 2.1(d), User must include a written notice in such Separate Derivative reasonably visible to any user of such Separate Derivative that:
(i) identifies the Licensed Material and such Separate Derivative as a derivative work or otherwise derived from, based on, or including or using the Licensed Material; (ii) identifies Licensor as the owner or rightholder of the Licensed Rights in the Licensed Material, and the name of any creator(s) of the Licensed Materials identified herein; (iii) reproduces exactly and in full Section 5 (Disclaimer of Warranties and Limitation of Liability).
3.3 Upon Licensor’s request, User shall remove or modify any of the information required by Section 3.1 or Section 3.2, as applicable, with regard to any Reproduction or Separate Derivative Shared after such request as reasonably practicable.
3.4 Nothing in this License constitutes or shall be construed to be, or shall imply, that User is, or User’s use of the Licensed Material in any way is, connected with, or sponsored, endorsed, or granted official status by, Licensor or any other person associated with Licensor or to whom attribution is to be given under Section 3.1 or Section 3.2.
-
Ownership.
4.1 In connection with this License, and as between Licensor and User, Licensor is and shall remain the sole owner of all rights, title, and interest in and to any and all of the Licensed Rights and the Licensed Material.
4.2 Licensor does not, and shall not be deemed to, assign, transfer, or convey any right, title, or interest in or to any Licensed Right or any other intellectual property or intellectual property right, or grant any license (other than the express license set forth in Section 2.1), lien, option, or claim in or to any Licensed Right or any other intellectual property or intellectual property right.
4.3 Nothing in this License shall prevent User from owning any intellectual property rights in or to any Derivative created by User under and in accordance with the license in Section 2.1, subject to Licensor’s continued ownership and rights in and to the Licensed Rights and Licensed Material. A Derivative does not give, and shall not be deemed to give, User any greater rights in or to any Licensed Rights or Licensed Material, or any right to Use, other than as expressly set forth in Section 2.1.
4.4 Licensor is in no way limited or restricted license, exercise, or exploit any of the Licensed Rights under any other terms or agreements, commercially or Non-Commercially, or to assign, transfer, or convey any of the Licensed Rights, all as decided by Licensor in its sole discretion.
-
Disclaimer of Warranties and Limitation of Liability.
5.1 Licensor offers, provides, makes available, and licenses the Licensed Material, and grants the license and Licensed Rights, "as is" and "as available" without any representations or warranties, express or implied. Licensor hereby disclaims all representations and warranties, express, implied, statutory, or otherwise, under any law, including, without limitation, all representations and warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are limited by applicable law, this disclaimer applies to the greatest extent not limited by such applicable law.
5.2 In no event will Licensor be liable to User or any other person, under contract, negligence, willful misconduct, other tort, property, intellectual property, or other cause or legal theory any legal theory or otherwise, for any direct, indirect, special, incidental, consequential, punitive, exemplary, liquidated, or other losses, costs, expenses, attorneys' or legal fees or costs, or damages of any kind anywhere, under any law, arising or related to this License, any Licensed Right, the Licensed Material, any Derivative, and/or any part thereof or any Use, even if Licensor has been advised of the possibility of such losses, costs, expenses, attorneys' or legal fees or costs, or damages of any kind anywhere. Where the exclusion or limitation of liability is limited by applicable law, this exclusion and limitation of liability applies to the greatest extent not limited by such applicable law.
5.3 The disclaimer of representations and warranties and the exclusion and limitation of liability under Sections 5.1 and 5.2 shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
-
Term and Termination.
6.1 This License and the license and rights hereunder are effective from the time when User accepts and agrees to this License until the expiration or termination of the Licensed Rights or the termination of this Licensed under Section 6.2, whichever occurs earlier (the "Term").
6.2 This License, and the license and rights hereunder, terminate automatically upon User’s breach or non-compliance with any of the terms, conditions, or provisions of this License, provided that, if User fully cures and corrects such breach or non-compliance within thirty (30) days after User’s first discovery of such breach or non-compliance, this License and the license and rights hereunder are reinstated automatically.
6.3 The provisions of Sections 1, 2.1(d) and 3.2 (with regard to any Separate Derivative created by User prior to the expiration or termination of this License), 4, 5, and 7, and this Section 6.3, shall survive any termination or expiration of this License.
-
Miscellaneous.
7.1 User recognizes that any actual or potential violation, breach, or non-performance of, or default under, any provision in this License may cause irreparable injury to Licensor for which Licensor may have no adequate remedy at law. User agrees that Licensor shall be entitled to seek injunctive relief or specific performance, without need or obligation to post any bond, to enforce any obligation, agreement, covenant, term and condition under this License, in addition to any other rights and remedies available to Licensor, all as Licensor elects in its sole discretion.
7.2 This License does not constitute, and shall not be construed as constituting, a partnership or joint venture between User, Licensor, or any other person. No third party shall be any beneficiary, intended or unintended, under this License.
7.3 User may not assign or transfer this License or any right hereunder or part hereof, or delegate any obligation under this License, without the express prior written consent of Licensor; any such unpermitted transfer, assignment, or delegation shall be null and void. Otherwise, this License shall bind any successor and permitted assign of User. Licensor may transfer or assign this Agreement or any right hereunder, or delegate any obligation hereunder, at any time in its sole discretion, including, without limitation, in connection with any assign, transfer, or conveyance of any Licensed Right
7.4 “Section” refers to any of the numbered sections of this License. Any reference to any law shall be construed as a reference to that law as amended or changed at the relevant time. Where a provision of this License states that a party “shall” or “will” perform or act or not act in some manner, such party is legally obligated to do so in accordance with such provision this License. Section headings and titles are intended solely for the convenience of the parties.
7.5 This License constitutes the entire understanding and agreement between User and Licensor related to the subject matter hereof. No right or remedy of User or Licensor under this License may be waived, discharged, or changed other than by a written instrument expressly identifying such right or remedy and signed by User or Licensor, as applicable. No amendment, modification, or change of this License or any term, condition, or provision of this License will be binding upon User and Licensor unless expressly set forth in a writing signed by each of User and Licensor through its authorized representative. A failure of User or Licensor to exercise any right or remedy under this License shall not be deemed to be a waiver of any right or remedy hereunder.
7.6 This License, any performance hereunder, the interpretation, construction, validity, and enforceability of this License and any term, condition, and provision of this License, and any dispute, and the resolution of any dispute, under this License shall be governed by the law of the State of New York, United States of America, without regard to any conflicts of laws provisions thereof that would result in the application of the law of any other jurisdiction.
7.7 If any term, condition, or provision of this License is held to be invalid or unenforceable, the meaning thereof will be construed, to the extent feasible, so as to render the provision enforceable, and if no feasible interpretation shall save such provision, it will be severed from the remainder of this License, as appropriate, which remainder shall remain in full force and effect unless the severed provision is essential and material to the rights or benefits received by User and Licensor, in which case this License shall be deemed terminated (subject to Section 6.3, as applicable).
Appendix B: Changelog
Version 2.3.0 (Oct 24, 2024)
Release.
Version 2.3.0-20241010 (October 10, 2024)
Summary of changes:-
Sunsetting the Pathfinder name replacing Pathfinder Framework with 'PACT Methodology' and 'Pathfinder Network' with 'PACT Network'. Exceptions are technical id’s for the Events (org.wbcsd.pathfinder.xxx) and mentions in the changelog.
-
Added chapter § 7 Product Identification and Classification including specification and examples for a common URN namespace syntax for
productIds
(ADR34) -
Included URN namespace syntax for product classifications (ADR37)
-
Added optional property
productClassifications
(ADR37) -
Advisement that property
productCategoryCpc
will be deprecated in version 3 (ADR37)
Version 2.3.0-20240904 (September 4, 2024)
Summary of changes:-
Replaced the term 'reporting period' with 'reference period' for consistency with the attributes
referencePeriodStart
andreferencePeriodEnd
.
Version 2.3.0-20240625 (June 25, 2024)
Summary of changes:-
Revision of
productDescription
to be more descriptive, following decision to keep attribute as mandatory -
Indication of deprecation of
crossSectoralStandardsUsed
and introduction ofcrossSectoralStandards
, reflecting consensus reached on ADR32 -
Addition of advisement that
piece
will be added as aDeclaredUnit
in v3; addition of attributeproductMassPerDeclaredUnit
, per consensus reached on ADR33. -
Clarification added to
statusComment
attribute, per consensus reached in Methodology WG, to include descriptive reasoning behind a given change in status. -
Update contact email, Editor, and Former Editors
Version 2.2.1-20240624 (June 24, 2024)
Summary of changes:
-
add diagram with visual representation of asynchronous event processing workflow
Version 2.2.1-20240513 (May 13, 2024)
Summary of changes:
-
fixed § 8.10.1 Example Action ListFootprints request and response, § 8.10.3 Example PF Request and Response Events, § 8.10.4 Example Action GetFootprint request and response, and § 4.1.2.2 Workflow by removing spurious
geographicScope
object
Version 2.2.1-20240507 (May 7, 2024)
Summary of changes:
-
fixed
dqi
value types in all examples -
clarification of
DataQualityIndicators
by removing misleading link to decimal
Version 2.2.1-20240430 (Apr 30, 2024)
Summary of changes:
-
Clarification of
aircraftGhgEmissions
definition to make it explicit that radiative forcing is excluded.
Version 2.2.0 (Apr 10, 2024)
Release.
Version 2.2.0-20240402 (Apr 02, 2024)
Summary of changes:
-
removal of notes referring to the transition from v1 to v2
-
fixed the incomplete
assurance
example and moved it to the appropriate section -
addition of missing examples in the § 4.1.2.2 Workflow section
-
addition of advisement to
exemptedEmissionsPercent
stating that the upper boundary will be removed in version 3 -
clarification of how to handle error codes in ListResponseBody and GetResponseBody
Version 2.2.0-20240327 (Mar 27, 2024)
Summary of changes:
-
addition of the new § 4 Guidance and Business Cases chapter
-
clarification of PF Request Event syntax, including the instruction that the ProductFootprintFragment should refer to one single productm
-
addition of a recommendation to include ProductIds in the PF Request Event request body
-
fixed the incorrect the value of
pCfExcludingBiogenic
in all relevant examples -
addition of advisements to properties
productCategoryCpc
,comment
,boundaryProcessesDescription
, andexemptedEmissionsDescription
stating that they will become OPTIONAL in version 3
Version 2.2.0-20240320 (Mar 20, 2024)
Summary of changes:
-
fixed example 28’s HTTP error code (from 401 to 400) in accordance with [rfc6749]
Version 2.2.0-20240312 (Mar 12, 2024)
Summary of changes:
-
deprecation of the
characterizationFactors
property -
addition of a new
ipccCharacterizationFactorsSources
property -
updates to Action Action Events implementation requirement - changed from OPTIONAL to MANDATORY
-
addition of an Example for a ProductFootprintFragment indicating a query for a PCF via productId
-
addition of Examples of a PCF request and response Action Event flow
Version 2.1.0 (Dec 07, 2023)
This version introduces additional mandatory functionality:
-
A new authentication flow (§ 8.3 Authentication Flow) is specified which allows discovery of the AuthEndpoint through an OpenId Provider Configuration Document. The flow is backwards-compatible with the 2.0.x-series of authentication flow based on the AuthSubpath
/auth/token
syntax.
Version 2.0.1-20231026 (Oct 26, 2023)
Summary of changes:
-
clarification of the error responses of the Action Authenticate endpoint, plus addition of an example error response in line with [rfc6749]
Version 2.0.1-20230927 (Sep 27, 2023)
Summary of changes:
-
definition fixes to properties
primaryDataShare
anddqi
to resolve a discrepancy with the latest version of the Pathfinder Framework: previously, the 2 properties were defined in a mutually-exclusive fashion (either one must be defined but NOT both) whereas the Pathfinder Framework Version 2.0 defines them as follows (Section 4.2.1, Page 39):Initially, companies shall calculate and report, as part of PCF data exchange, on at least one of the following metrics: [...]
-
addition of references to SI Units to data type
DeclaredUnit
Version 2.0.1-20230720 (Jul 20, 2023)
Summary of changes:
-
clarification to specification of property
fossilGhgEmissions
,pCfExcludingBiogenic
,pCfIncludingBiogenic
, andbiogenicCarbonWithdrawal
-
in addition, further clarification on the bounds of the property
biogenicCarbonWithdrawal
which must be equal to0
or less than0
Version 2.0.1-20230629 (Jun 29, 2023)
Summary of changes:
-
clarify unit of properties
fossilCarbonContent
andbiogenicCarbonContent
: was declared askg / declaredUnit
and is now declared askgC / declaredUunit
Version 2.0.1-20230627 (Jun 27, 2023)
This version fixes 5 definition incorrectness
-
property
fossilCarbonContent
: was incorrectly defined with unitkg of CO2e / declaredUnit
. The unit is now defined askg / declaredUnit
-
fix to the
referencePeriod
Filter Example -
fixed typo in the definition of
referencePeriodEnd
-
fixed definition of
landManagementGhgEmissions
: previously, it was incorrectly defined as a non-negative decimal -
fixed definition of
biogenicCarbonWithdrawal
: previously, it was incorrectly defined as a non-negative decimal
In addition, this version:
-
clarifies in § 8.6 Action ListFootprints the semantics of the Filter processing being OPTIONAL by introducing section § 8.6.1 Filtering
-
clarifies that a host system must return HTTP error status codes if it does not implement the events endpoint (see § 8.8 Action Events)
-
clarified the PCF term definition
-
fixed linking to semantic versioning document
-
reworded
referencePeriodStart
andreferencePeriodEnd
Version 2.0.1-20230522 (May 22, 2023)
This version fixes 1 definition incorrectness and includes 4 documentation improvements.
-
property
biogenicCarbonContent
: was incorrectly defined with unitkg of CO2e / declaredUnit
. The unit is now defined askg / declaredUnit
-
property
status
: minor documentation improvements -
Action Action ListFootprints: minor documentation improvements
-
property
biogenicAccountingMethodology
: addition of an advisement -
section § 5.3 Data Type: DataQualityIndicators is now referencing Table 9 of the Pathfinder Framework
Version 2.0.1-20230314 (Mar 14, 2023)
This version fixes 2 discrepancies between the Pathfinder Framework Version 2 and the data model in this specification.
-
property
boundaryProcessesDescription
: was incorrectly defined as optional in v2.0.0, and this typo is now corrected such that the property is correctly marked as mandatory in accordance with the Pathfinder Framework Version 2 -
update to definition of property
primaryDataShare
: it was marked as optional (O
) and is now marked asO*
. This update is in accordance with the Pathfinder Framework and the field’s previous (v2.0.0) semantics; i.e. no semantical update to the specification whatsoever -
formatting fix to the definition of property
productDescription
-
Updates to data type
Assurance
:-
documentation fix to definition of property
coverage
: was marked as mandatory (M
) and is now marked asO
in accordance with its definition and the Pathfinder Framework; i.e. no semantical update to the specification whatsoever -
addition of property
assurance
in accordance with the Pathfinder Framework
-
Version 2.0.0 (Feb 20, 2023)
Summary of the major changes and concepts added with this version:
-
update to Pathfinder Framework Version 2.0, including data model changes which are not backwards-compatible, including
-
addition of data type
DataQualityIndicators
andAssurance
toCarbonFootprint
-
-
event-based communication between host systems (§ 8.8 Action Events)
-
support for data model extensions (§ 5.5 Data Type: DataModelExtension)
-
life cycle management of a
ProductFootprint
(§ 6 Product Footprint Lifecycle)
Data Model Changes
Overview of the changes to the data model compared with the data model version 1.0.1:
-
changes to data type
ProductFootprint
: -
properties
validityPeriodStart
andvalidityPeriodEnd
: added -
life cycle properties
precedingPfIds
,status
andstatusComment
: added -
addition of data type
DataQualityIndicators
toCarbonFootprint
via propertydqi
-
addition of data type
Assurance
toCarbonFootprint
via propertyassurance
-
changes to data type
CarbonFootprint
: -
property
characterizationFactors
: added -
property
exemptedEmissionsPercent
: added -
property
primaryDataShare
: was mandatory is now optional -
property
pCfExcludingBiogenic
: added -
property
pCfIncludingBiogenic
: added -
property
fossilCarbonContent
: added -
property
biogenicCarbonWithdrawal
: added -
property
biogenicAccountingMethodology
: added -
property
packagingEmissionsIncluded
: added -
property
exemptedEmissionsDescription
: added -
property <{CarbonFootprint/packagingGhgEmissions}: added
-
property
uncertaintyAssessmentDescription
: added -
property
reportingPeriodStart
: renamed toreferencePeriodStart
-
property
reportingPeriodEnd
: renamed toreferencePeriodEnd
-
property
emissionFactorSources
: renamed tosecondaryEmissionFactorSources
-
property
aircraftGhgEmissions
: added -
changes to data type
BiogenicEmissions
: -
all properties moved to
CarbonFootprint
and the data type removed fully, plus -
property
landUseChangeGhgEmissions
substituted with propertiesiLucGhgEmissions
anddLucGhgEmissions
-
property
landUseEmissions
renamed tolandManagementGhgEmissions
-
property
otherEmissions
renamed tootherBiogenicGhgEmissions
-
data type CompanyId: added, including instructions on custom company codes
-
changes to data type ProductId: addition of instructions for CAS, InChi and custom URN’s.
API Changes
-
-
rename of filter HTTP query parameter
filter
to$filter
-
introduce additional allowed
$filter
operators and properties:-
Additional operators:
eq
,lt
,le
,gt
,and
,any
-
Additional properties:
created
,updated
,productCategoryCpc
,geographyCountry
,referencePeriodStart
,referencePeriodEnd
,companyIds
,productIds
.
-
-
Addition of alternative Action ListFootprints response
HttpStatusCode
202, and pull-based request/response semantics -
pagination is now mandatory. See § 8.6.2 Pagination
-
-
Action Events: section § 8.8 Action Events added
Version 1.0.1
The following changes have been applied for version 1.0.1
-
Addition of data type
RegionOrSubregion
, cleaning up the definition of propertygeographyRegionOrSubregion
-
Fix to the JSON representation specification in § 5.10.1 JSON Representation
-
Change to the minimum size of the set § 5.12 Data Type: ProductOrSectorSpecificRuleSet from
0
to1
, aligning with the overall specification. -
Removal of unreferenced data type
Boolean
from the data model section -
Rewording, simplified wording of chapter § 8.5 Action Authenticate
-
Addition of an authentication flow specification in chapter § 8.3 Authentication Flow
-
Improved wording of request parameter
Filter
in section § 8.6.3 Request Syntax (HTTP/1.1) -
Improved wording in section § 8.9 Error responses, 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 § 8.9 Error responses
-
addition of list of example situations when an error response is returned
-
-
Addition of Section § 8.10.2 Example Error Response
-
Addition of term interoperable to section § 2 Terminology, plus linking to in respective sections
-
Addition of Terms UN geographic region and UN geographic subregion
-
Introduction of a new property table layout in section § 5.2 Data Type: CarbonFootprint and § 5.1 Data Type: ProductFootprint
-
Removal of data types
PositiveDecimal
,SpecVersionString
,VersionInteger