1. Introduction
This document contains the necessary technical foundation for the Pathfinder 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 Pathfinder Framework Version 2.0 ([PATHFINDER-FRAMEWORK]).
This specification document is a work in progress. It is not yet a "final" or otherwise published version. The latest published version (2.0.0) can be accessed here.
1.1. Status of This Document
Comments regarding this document are welcome. Please file issues directly on GitHub, or send them to public-dev@pathfinder.sine.dev.
This document was published by Partnership for Carbon Transparency (PACT) after an update to the Pathfinder Framework) 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 (§ 4 Data Model) based on the Pathfinder Framework Version 2.0 and the definition of a HTTP REST API (§ 6 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 Pathfinder Framework;
-
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 Pathfinder Network.
1.4. About PACT and the Pathfinder Network
The 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 Pathfinder 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 § 4.5 Data Type: DataModelExtension.
See [DATA-MODEL-EXTENSIONS] and [EXTENSIONS-GUIDANCE] for further details.
- Data recipient
-
The Supply Chain Actor requesting and/or receiving PCF data from another SCA.
- Data owner
-
The Supply Chain Actor (SCA) exchanging PCF data with another SCA.
- 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).
- 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.
- Pathfinder Framework Version 2.0 (Pathfinder Framework)
-
Guidance for the Accounting and Exchange of Product Life Cycle Emissions, building on existing standards and protocols, such as the GHG Protocol Product standard. See [PATHFINDER-FRAMEWORK] for further details.
- Pathfinder Network
-
An information network of and for supply chain actors 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 Pathfinder Framework. - Supply Chain Actor (SCA)
-
An entity intending on exchanging PCF data with another entity using the technical means specified in this document.
- Solution Provider
-
An entity providing technical solutions to SCAs 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 § 6 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 § 6 HTTP REST API.
4. Data Model
This section specifies a data model for product footprints conforming with the Pathfinder Framework 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 § 4.1 Data Type: ProductFootprint) -
CarbonFootprint
: contains information related to the carbon footprint of a product (see § 4.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
.
4.1. Data Type: ProductFootprint
ProductFootprint
is a data type which represents the carbon footprint
of a product under a specific scope (§ 4.2.1 Scope of a CarbonFootprint)
and with values calculated in accordance with the Pathfinder Framework.
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 § 6 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 § 4.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 § 5 Product Footprint Lifecycle).
4.1.1. Properties
A ProductFootprint has the following properties:
Property | Type | Req | Specification |
---|---|---|---|
id : PfId
| String | M | The product footprint identifier, See § 4.29 Data Type: PfId for details. |
specVersion
| String | M |
The version of the ProductFootprint data specification with value 2.0.1-20231026 .
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 § 4.29 Data Type: PfId and § 5.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 § 5 Product Footprint Lifecycle for details. |
statusComment
| String | O |
If defined, the value should be a message explaining the reason for the current status.
See § 5 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 plus other information related to it such as production technology or packaging. |
productIds : ProductIdSet
| Array | M | The non-empty set of ProductIds. Each of the values in the set is supposed to uniquely identify the product. What constitutes a suitable product identifier depends on the product, the conventions, contracts, and agreements between the Data Owner and a Data Recipient and is out of the scope of this specification. |
productCategoryCpc : CpcCode
| String | M | A UN Product Classification Code (CPC) that the given product belongs to. |
productNameCompany
| String | M | The non-empty trade name of the product. |
comment
| String | M |
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.
|
4.2. Data Type: CarbonFootprint
A CarbonFootprint represents the carbon footprint of a product and related data in accordance with the Pathfinder Framework.
4.2.1. Scope of a CarbonFootprint
Each CarbonFootprint is scoped by
-
Time Period: the time period is defined by the properties
referencePeriodStart
andreferencePeriodEnd
(see Pathfinder Framework section 6.1.2.1) -
Geography: further set by the properties
geographyRegionOrSubregion
,geographyCountry
, andgeographyCountrySubdivision
(see Pathfinder Framework 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
|
4.2.2. Properties
The properties of a CarbonFootprint are listed in the table below.
The properties marked with O*
are OPTIONAL only for reporting periods
before 2025, and for reporting 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 .
|
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 Pathfinder Framework (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.
Note: version 1 did not explictly include non-CO2 sources. This is now included in the definition. |
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.
Note: version 1.0.0 incorrectly defined this is "all other GHG emissions"; i.e. missing the "biogenic" qualifier. |
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 Pathfinder Framework (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. 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 |
The IPCC version of the GWP characterization factors used in the calculation of the PCF (see Pathfinder Framework Section 3.2.2). The value MUST be one of the following:
The set of characterization factor identifiers will likely change in future revisions. It is recommended to account for this when implementing the validation of this property. |
crossSectoralStandardsUsed : CrossSectoralStandardSet
| Array | M | The cross-sectoral standards applied for calculating or allocating GHG emissions |
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 |
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 Pathfinder Framework section 6.1.2.1 for further details. |
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.
See the Pathfinder Framework section 6.1.2.1 for further details. |
geographyCountrySubdivision
| String |
If present, a ISO 3166-2 Subdivision Code. See § 4.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 § 4.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 § 4.2.1 Scope of a CarbonFootprint for further details. Additionally, see the Pathfinder Framework 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 Percentage of emissions excluded from PCF, expressed as a decimal number between 0.0 and 5 including. See Pathfinder Framework.
|
exemptedEmissionsDescription
| String | M | 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 Pathfinder Framework 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 Pathfinder Framework Sections 4.2.1 and 4.2.2, Appendix B.
For reporting periods ending before the beginning of year 2025, at least property For reporting 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 Pathfinder Framework Sections 4.2.1 and 4.2.3, Appendix B.
For reporting periods ending before the beginning of year 2025, at least property For reporting 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 Pathfinder Framework. |
4.3. Data Type: DataQualityIndicators
Data type DataQualityIndicators
contains the quantitative data quality indicators in conformance with Pathfinder Framework Section 4.2.3 and Appendix B.
Each property is optional until the reporting 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 Pathfinder Framework 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 a decimal 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 a decimal 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 a decimal 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 a decimal between |
{ "assurance" : true , "coveragePercent" : 42.0 , }
{ "technologicalDQR" : 2.0 , "temporalDQR" : 2.0 , "geographicalDQR" : 2.0 , "completenessDQR" : 2.0 , "reliabilityDQR" : 2.0 }
4.4. Data Type: Assurance
Data type Assurance
contains the assurance in conformance with Pathfinder Framework 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 Pathfinder Framework 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. |
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. |
4.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.1" , "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" } }
4.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
4.7. Data Type: EmissionFactorDSSet
A set of Emission Factor Data Sources
of size 1 or larger.
4.7.1. JSON Data Representation
As an array of objects, with each object conforming to the JSON representation of EmissionFactorDS
.
4.8. Data Type: EmissionFactorDS
An EmissionFactorDS references emission factor databases (see Pathfinder Framework Section 4.1.3.2).
4.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.
4.8.2. JSON Representation
Each EmissionFactorDS
MUST be encoded as a JSON object.
4.9. Data Type: CrossSectoralStandard
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
4.9.1. JSON Representation
Each CrossSectoralStandard MUST be encoded as a JSON string.
4.10. Data Type: CrossSectoralStandardSet
A set of CrossSectoralStandard
values.
4.10.1. JSON Representation
As an array of strings, with each string conforming to the JSON representation of CrossSectoralStandard
.
4.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.
4.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
.
4.11.2. JSON Representation
Each ProductOrSectorSpecificRule
MUST be encoded as a JSON object.
4.12. Data Type: ProductOrSectorSpecificRuleSet
A set of ProductOrSectorSpecificRule of size 1 or larger.
4.12.1. JSON Representation
Each ProductOrSectorSpecificRuleSet MUST be encoded as an array of JSON objects, with each object conforming to § 4.11.2 JSON Representation.
4.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
4.13.1. JSON Representation
Each value is encoded as a JSON String.
4.14. Data Type: NonEmptyStringVector
A list of NonEmptyString of length 1 or greater.
4.14.1. JSON Representation
Each NonEmptyStringVector MUST be encoded as an array of NonEmptyStrings.
4.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":
4.15.1. JSON Representation
Each CpcCode MUST be encoded as a JSON String.
4.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
4.16.1. JSON Representation
The value of each DeclaredUnit
MUST be encoded as a JSON String.
4.17. Data Type: NonEmptyString
A String with 1 or more characters.
4.17.1. JSON Representation
Each NonEmptyString MUST be encoded as a JSON String.
4.18. Data Type: CompanyIdSet
A set of CompanyIds of length 1 or greater.
4.19. Data Type: CompanyId
Each CompanyId MUST be a URN.
4.19.1. Custom Company Ids (Company Codes)
If the data owner (SCA) 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:pathfinder: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:pathfinder:company:customcode:buyer-assigned:4321
.
If the data owner (SCA) 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:pathfinder: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:pathfinder:company:customcode:vendor-assigned:6789
.
4.20. Data Type: ProductIdSet
A set of ProductIds of size 1 or larger.
4.20.1. JSON Representation
Each ProductIdSet MUST be encoded as an array of strings.
4.21. Data Type: ProductId
Each ProductId MUST be a URN.
4.21.1. Custom Product Ids (Product Codes)
If the data owner (SCA) wishes to use a custom product code assigned to it by a data recipient as a ProductId value, the data owner SHOULD use the following format:
urn:pathfinder:product:customcode:buyer-assigned:$CUSTOM-PRODUCT-CODE$
where $CUSTOM-PRODUCT-CODE$
stands for the custom product code assigned by the data recipient.
1234
for one of its products by a buyer, the value of the ProductId is then:
urn:pathfinder:product:customcode:buyer-assigned:1234
.
If the data owner (SCA) wishes to use its own custom product code known by
a data recipient as a ProductId
value, the data owner SHOULD use the following format:
urn:pathfinder:product:customcode:vendor-assigned:$CUSTOM-PRODUCT-CODE$
where $CUSTOM-PRODUCT-CODE$
stands for the custom product code set by the data recipient.
8765
which is known to a buyer, the value of the ProductId is then:
urn:pathfinder:product:customcode:vendor-assigned:8765
.
4.21.2. ProductId based on CAS Registry Numbers
If the data owner (SCA) wishes to use a CAS Registry Number as a ProductId value, the data owner SHOULD use the following format:
urn:pathfinder:product:id:cas:$CAS-REGISTRY-NUMBER$
where $CAS-REGISTRY-NUMBER$
stands for a CAS Registry Number.
64-17-5
:
urn:pathfinder:product:id:cas:64-17-5
4.21.3. ProductId based on IUPAC InChi Code
If the data owner (SCA) wishes to use a IUPAC InChi Code as a ProductId value, the data owner SHOULD use the following format:
urn:pathfinder:product:id:iupac-inchi:$INCHI-CODE$
where $INCHI-CODE$
stands for a IUPAC InChi Code.
1S/C9H8O4/c1-6(10)13-8-5-3-2-4-7(8)9(11)12/h2-5H,1H3,(H,11,12)
:
urn:pathfinder:product:id:iupac-inchi:1S%2FC9H8O4%2Fc1-6%2810%2913-8-5-3-2-4-7%288%299%2811%2912%2Fh2-5H%2C1H3%2C%28H%2C11%2C12%29
4.22. Data Type: URN
A String conforming to the URN syntax.
4.22.1. JSON Representation
Each URN MUST be encoded as a JSON String.
4.23. Data Type: String
A regular UTF-8 String.
4.23.1. JSON Data Representation
Each String MUST be encoded as a JSON String.
4.24. Data Type: Percent
A Decimal number in the range of and including 0
and 100
.
Example values:
4.24.1. JSON Representation
Each Percent MUST be encoded in IEEE-754 double-precision floating-point format as a JSON number.
4.25. Data Type: StrictlyPositiveDecimal
A positive, non-zero Decimal.
Example values:
4.25.1. JSON Representation
See [§ 4.28.1 JSON Representation].
4.26. 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:
4.26.1. JSON Representation
Each DateTime MUST be encoded as a JSON String.
4.27. Data Type: ISO3166CC
An ISO 3166-2 alpha-2 country code.
Example value for tue alpha-2 country code of the United States:
4.27.1. JSON Representation
Each ISO3166CC MUST be encoded as a JSON String.
4.28. Data Type: Decimal
A dotted-decimal number.
Example values:
4.28.1. JSON Representation
Each Decimal MUST be encoded as a JSON String.
4.29. Data Type: PfId
A PfId MUST be a UUID v4 as specified in [RFC4122].
4.29.1. JSON Representation
Each PfId MUST be encoded as a JSON String.
Example JSON string value:
5. Product Footprint Lifecycle
5.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 (§ 5.2 Change Definition and Classification). Depending on the change classification,
-
major changes must result in a new ProductFootprint (§ 5.4 New ProductFootprint creation from major changes) made available to its data recipients,
-
minor changes result in either version updates (§ 5.3 ProductFootprint version creation from minor changes) or new ProductFootprint creation (§ 5.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
5.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 (§ 4.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 § 5.4 New ProductFootprint creation from major changes for further details).
Global
(§ 4.2.1 Scope of a CarbonFootprint).
The host system of the data owner then performs the following logical steps:
-
deprecating the current Product Footprint (§ 5.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 (§ 5.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 § 5.3 ProductFootprint version creation from minor changes -
finally, making the new Product Footprints available to its data recipients
5.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 § 5.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
.
5.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 § 5.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
6. HTTP REST API
6.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.
6.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 (§ 6 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.
6.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 Pathfinder Framework
- 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.
6.3. Authentication and Request Flows
Data recipients MUST first retrieve an access token through Action Authenticate. This is implemented by
-
the data recipient calling Action Authenticate of a host system
-
the host system issuing an access token as specified in [rfc6749] Section 4.4.3 and Section 5.1
-
the data recipient calling one or more 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.
6.4. Host system minimum requirements
A host system MUST implement the following actions:
A host system SHOULD implement the following actions:
A host system MUST offer its actions under https method only.
A host system MUST offer all actions under the same Hostname and Subpath except for Action Authenticate.
A host system MAY offer the Action Authenticate under a dedicated AuthHostname and AuthSubpath.
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:
6.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.
An access token is the value of access_token
from a 200 (OK) entity-body derived from a successful call to this action. See [rfc6749] Section 4.4.3 and Section 5.1 for further details.
6.5.1. Request Syntax (HTTP/1.1)
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
With Request parameters:
- AuthSubpath:
-
If a host system uses a relative subpath dedicated to the purpose of creating an access token, then the requesting data recipient MUST prepend this subpath.
- AuthHostname
-
The requesting data recipient MUST use the domain name of the host system dedicated for the purpose of creating an authentication token.
- BasicAuth
-
See [rfc6749] Section 4.4.2
- AuthBody
-
See [rfc6749] Section 4.4
- ContentLength
-
The length of the Body. See [rfc9112].
6.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, or RFC 6749 Section 5.2 otherwise. See § 6.3 Authentication and Request Flows for further details
6.5.2.1. Example Successful Response
Example AuthResponseBody for a successful authenticate call:
6.5.2.2. Example Error Response
Example HTTP call, for instance generated because username or password did not match:
HTTP / 1.1 401 Unauthorized 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.
6.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.
6.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.
-
6.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 § 6.3 Authentication and Request Flows)
-
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
6.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 § 6.3 Authentication and Request Flows
- 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.
-
6.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 host system does not accept the access token, the body MUST be 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, for instance in case of a malformed value of the header authorization, the body SHOULD be an error response with code BadRequest.
6.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.
6.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.
6.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 host system does not accept the access token, GetResponseBody MUST be an error response with code AccessDenied.
If the host system does not accept the access token because it expired, GetResponseBody SHOULD be an error response with code TokenExpired.
The host system MAY return an error response with code NoSuchFootprint.
In all other cases, for instance in case of a malformed value of the header authorization, GetResponseBody SHOULD be an error response with code BadRequest.
6.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 § 6.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 § 6.8.4 Asynchronous request and retrieval of Product Footprints).
A host system SHOULD only accept events after authentication (see § 6.3 Authentication and Request Flows).
The Action Events endpoint accepts CloudEvent events (see [CE]) encoded in "Structured Content Mode" (see [CE-Structured-Content-Mode].
Support for Action Events is OPTIONAL.
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).
6.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 § 6.8.3 Notification of data recipients on Product Footprint updates and § 6.8.4 Asynchronous request and retrieval of Product Footprints.
-
6.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 § 6.9 Error responses).
6.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.
6.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.
6.8.4.1. PF Request Event syntax
The PF Request Event is defined as a CloudEvent event sent from a data recipient to a data owner. The event contains a Product Footprint fragment to describe to the data owner the requested product footprints.
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 which references a subset of
ProductFootprint
properties, including nested properties. - 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.
6.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.
6.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 § 6.9 Error responses).
6.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 § 6.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 |
6.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.
6.10. Examples
6.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:
6.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:
Appendix A: License
Appendix B: Changelog
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 clarfication 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 § 6.6 Action ListFootprints the semantics of the Filter processing being OPTIONAL by introducing section § 6.6.1 Filtering
-
clarifies that a host system must return HTTP error status codes if it does not implement the events endpoint (see § 6.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 § 4.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 (§ 6.8 Action Events)
-
support for data model extensions (§ 4.5 Data Type: DataModelExtension)
-
life cycle management of a
ProductFootprint
(§ 5 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 (§ 4.21.2 ProductId based on CAS Registry Numbers, § 4.21.3 ProductId based on IUPAC InChi Code, § 4.21.1 Custom Product Ids (Product Codes))
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 § 6.6.2 Pagination
-
-
Action Events: section § 6.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 § 4.10.1 JSON Representation
-
Change to the minimum size of the set § 4.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 § 6.5 Action Authenticate
-
Addition of an authentication flow specification in chapter § 6.3 Authentication and Request Flows
-
Improved wording of request parameter
Filter
in section § 6.6.3 Request Syntax (HTTP/1.1) -
Improved wording in section § 6.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 § 6.9 Error responses
-
addition of list of example situations when an error response is returned
-
-
Addition of Section § 6.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 § 4.2 Data Type: CarbonFootprint and § 4.1 Data Type: ProductFootprint
-
Removal of data types
PositiveDecimal
,SpecVersionString
,VersionInteger