This guide keeps the same technical requirements as the original documentation but presents them in a clearer and more supplier-friendly way.
1. Introduction
Batteries are important for the transition to clean energy and for the circular economy. The European Union has introduced the Batteries Regulation (EU 2023/1542) to make sure that batteries placed on the EU market are sustainable, safe, and circular across their full life cycle. This includes raw material sourcing, manufacturing, use, collection, reuse, and recycling.
The Battery Pass use case supports these regulatory objectives by enabling standardised battery passport information to be exchanged between business partners. For suppliers, this means preparing the required data in the agreed structure and making it available through the Catena-X dataspace so that Henkel can consume it securely.
The European Commission provides further information about the EU Batteries Regulation and related policies here:
2. Business Process
This use case describes how Battery Pass data is shared from a data provider to a data consumer. In this document, the supplier is usually the data provider, and Henkel is usually the data consumer. The process covers five main activities: publishing the relevant data asset, defining access and usage policies, negotiating the data contract, enabling data access, and exchanging feedback notifications after the data has been processed.
3. Definitions & Terminology
This section explains the technical terms used in the Catena-X dataspace and in the Battery Pass data exchange process.
EDC (Eclipse Dataspace Connector)
The Eclipse Dataspace Connector (EDC) is the software component used to exchange data securely between participants in a dataspace. It allows a supplier to make data available to Henkel while keeping control over access and usage conditions.
The EDC is responsible for:
Exposing assets to other participants
Enforcing access and usage policies
Managing contract negotiations and agreements
Handling data transfer between provider and consumer
Submodel
A Submodel is a structured data set that describes one specific aspect of a Digital Twin. It follows an Aspect Model and the Asset Administration Shell (AAS) standard.
In the Battery Pass context, submodels are used to structure information such as:
Product identification
Material composition
Hazardous substances
Product Carbon Footprint data
Asset
An Asset is the data resource that a participant makes available in the dataspace. For the supplier, this means creating an asset that exposes the relevant Battery Pass submodel through the connector so that Henkel can discover and access it under the agreed conditions.
Digital Twin (Asset Administration Shell - AAS)
A Digital Twin, implemented as an Asset Administration Shell (AAS), is the standardised digital representation of a physical or business asset. It can contain several submodels, each describing a different aspect of the asset during its life cycle.
Digital Twin Registry (DTR)
The Digital Twin Registry (DTR) is a Catena-X service that acts as a directory for Digital Twins. It stores metadata and references to asset data so that authorised partners can discover and access Digital Twins securely across the Catena-X ecosystem.
Aspect Model
An Aspect Model defines the structure, meaning, and expected format of the data in a submodel. It ensures that all Catena-X participants interpret and exchange the data in the same way.
Policies
A Policy defines the rules for accessing and using a data asset. Policies determine who may access the data, under which conditions, and for which purpose. Two policy types are used:
Access Policy
Usage Policy
Access Policy: defines who is allowed to access the asset or submodel.
Usage Policy: defines how the data may be used after access has been granted.
Contract Definition
A Contract Definition connects an asset with the relevant access and usage policies. It defines the terms under which the data asset can be shared.
Contract Negotiation
Contract Negotiation is the process in which the data consumer and data provider agree on the access conditions for a data asset, based on the defined policies.
Contract Agreement
A Contract Agreement is the final agreement between the parties. Once it is in place, the data transfer can take place according to the agreed conditions.
Transfer Process
The Transfer Process is the technical process used to exchange data between the provider and the consumer after the contract agreement has been established.
Catalog
A Catalog is the list of assets exposed by a provider. The consumer queries the catalog to find the data asset that should be accessed.
Digital Twin Event API
The Digital Twin Event API is used to send and receive event-based updates related to Digital Twins. In this process, it supports notifications such as submodel updates and feedback messages.
4. System Overview
4.1 Components Used
The Battery Pass implementation uses several technical components. The table below explains their role in practical terms for suppliers.
The EDC Connector is used to expose and consume data assets, manage contract negotiations, and handle data transfer between partners.
The Digital Twin (AAS) is used to represent the battery as a digital object, containing all relevant data in structured form.
Submodels are used to store specific data, such as the Product Carbon Footprint (PCF), following the defined aspect model.
Assets are created to make submodels available for sharing via the connector.
Policies and Contracts are used to define and enforce access and usage conditions for shared data.
A Message Broker solution (for example: Azure Service Bus, AWS SQS, Apache Kafka etc, or any other notification system) is required by Henkel to receive notifications from Henkel after Battery Pass data has been shared.
Please note that the Message Broker is a Henkel-specific requirement. It is not defined by the Catena-X standards or the Battery Pass use case, and it is not needed for Catena-X conformity or certification. Data exchange itself continues to run through the Eclipse Dataspace Connector (EDC) as specified by Catena-X.
The supplier is responsible for providing, hosting and securing the message broker.
The Digital Twin Event API together with a Message Broker is used to send and receive notifications related to updates (e.g., submodel changes).
4.2 Architecture for Battery Pass Implementation
The supplier, acting as the data provider, prepares the Battery Pass data by creating the required Battery Pass submodel and exposing it as an asset through the EDC connector. The supplier also defines the required access policies, usage policies, and contract definitions so that Henkel can access and use the data only under the agreed conditions. The submodel is linked to a Digital Twin, implemented as an Asset Administration Shell (AAS), which provides the standardised structure for the asset data.
After the data is prepared, the provider sends a notification to Henkel to indicate that the data is available. The provider also exposes a notification asset that points to a message broker solution. This enables notifications to be exchanged between the participants.
Henkel, acting as the data consumer, retrieves the data by querying the provider catalogue, negotiating the contract, and establishing the contract agreement. Once the contract negotiation is completed successfully, Henkel starts the data transfer process to access the shared Battery Pass data.
After Henkel has processed the received data, Henkel sends a feedback notification to the provider. This feedback indicates the processing result, such as whether the data was processed successfully or whether an issue occurred.
This process enables controlled, secure, and traceable exchange of Battery Pass data while preserving data sovereignty for both the supplier and Henkel.
5. Data Provisioning
This section explains how the provider publishes Battery Pass data so that Henkel can consume it. The technical steps remain the same: create the required assets, define the access and usage policies, create the contract definition, create the submodel asset, and register the Digital Twin.
5.1 Set up the dDTR in the EDC
Create the dDTR asset in the EDC. This makes the Digital Twin Registry endpoint available as an asset that can be discovered and accessed through the connector.
Method: POST
Endpoint: {{EDC_URL}}/management/v3/assets
{
"@context": {
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"cx-common": "https://w3id.org/catenax/ontology/common#",
"cx-taxo": "https://w3id.org/catenax/taxonomy#",
"dct": "http://purl.org/dc/terms/"},
"@id": "dtr-asset",
"properties": {
"dct:type": {
"@id": "cx-taxo:DigitalTwinRegistry"},
"cx-common:version": "3.0"},
"privateProperties": {},
"dataAddress": {
"@type": "DataAddress",
"type": "HttpData",
"baseUrl": "{{dtr_url}},
"proxyQueryParams": "true",
"proxyPath": "true",
"proxyMethod": "false"}}{{dtr_url}} specifies the DTR API endpoint URL. Replace this placeholder with the URL of your Digital Twin Registry API endpoint.
Example: http://example-dtr-123:8070/api/v3
Expected Sample response:
5.2 Create the contract definition for the dDTR
Create the access policy for the dDTR. This policy defines which business partner is allowed to access the Digital Twin Registry asset.
The Policy definitions here are only compatible for Jupiter EDCs (version 0.10.x and older). Find more information about new policy definitions and EDC Migration in Section 8: Schema Structure Changes in CX-Saturn.
Method: POST
Endpoint: {{EDC_URL}}/management/v3/policydefinitions
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/",
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"tx": "https://w3id.org/tractusx/v0.0.1/ns/",
"tx-auth": "https://w3id.org/tractusx/auth/",
"cx-policy": "https://w3id.org/catenax/policy/",
"odrl": "http://www.w3.org/ns/odrl/2/"
},
"@id": "{{ACCESS_POLICY_ID}}",
"@type": "PolicyDefinition",
"policy": {
"@type": "odrl:Set",
"odrl:permission": {
"odrl:action": {
"@id": "odrl:use"
},
"odrl:constraint": {
"odrl:and": [
{
"odrl:leftOperand": {
"@id": "cx-policy:Membership"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "active"
},
{
"odrl:leftOperand": {
"@id": "cx-policy:BusinessPartnerNumber"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "{{POLICY_BPN}}"
}
]
}
},
"odrl:prohibition": [],
"odrl:obligation": []
}
} {{ACCESS_POLICY_ID}} is the identifier of the access policy. It can be a numeric value or a text string, but it must be unique and reused consistently in later steps.
{{POLICY_BPN}} is the Business Partner Number (BPN) of the partner that is allowed to access the asset under this policy.
Expected Sample response:
2. Create the usage policy for the dDTR. This policy defines how the Digital Twin Registry data may be used after access has been granted.
Method: POST
Endpoint: {{EDC_URL}}/management/v3/policydefinitions
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/",
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"cx-policy": "https://w3id.org/catenax/policy/",
"odrl": "http://www.w3.org/ns/odrl/2/"
},
"@id": "{{USAGE_POLICY_ID}}",
"policy": {
"@type": "odrl:Set",
"odrl:permission": {
"odrl:action": {
"@id": "odrl:use"
},
"odrl:constraint": {
"odrl:and": [
{
"odrl:leftOperand": {
"@id": "cx-policy:FrameworkAgreement"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "DataExchangeGovernance:1.0"
},
{
"odrl:leftOperand": {
"@id": "cx-policy:UsagePurpose"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "cx.core.digitalTwinRegistry:1"
}
]
}}}}{{USAGE_POLICY_ID}} is the identifier of the usage policy. It can be a numeric value or a text string, but it must be unique and reused consistently in the contract definition.
Expected Sample response:
3. Create the contract definition for the dDTR. This connects the dDTR asset with the access policy and usage policy created in the previous steps.
Method: POST
Endpoint: {{EDC_URL}}/management/v3/contractdefinitions
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/"
},
"@type": "ContractDefinition",
"@id": "{{CONTRACT_DEFINITION_ID}}",
"accessPolicyId": "{{ACCESS_POLICY_ID}}",
"contractPolicyId": "{{USAGE_POLICY_ID}}",
"assetsSelector": [
{
"operandLeft": "https://w3id.org/edc/v0.0.1/ns/id",
"operator": "=",
"operandRight": "{{ASSET_ID}}"
}
]
}{{CONTRACT_DEFINITION_ID}} is the unique identifier of the contract definition.
{{ACCESS_POLICY_ID}} is the identifier of the access policy created earlier. This value must exactly match the Access Policy ID used during access policy creation.
{{USAGE_POLICY_ID}} is the identifier of the usage policy created earlier. This value must exactly match the Usage Policy ID used during usage policy creation.
{{ASSET_ID}} is the identifier of the asset created earlier. This value must exactly match the Asset ID used during asset creation.
Expected Sample response:
5.3 Battery Pass Data Model Properties
The table below lists the Battery Pass data fields that need to be provided in the Battery Pass submodel. Suppliers should use this table as a practical checklist when preparing data for Henkel. The technical field names, JSON paths, data types, and mandatory indicators must be followed exactly so that the data can be processed automatically.
Each row describes one data field. The field name is the business name of the value, while the JSON path shows where that value must appear in the technical data structure. Mandatory fields must always be provided. Optional fields should be completed when the information is available, especially where they support compliance, traceability, or Product Carbon Footprint transparency.
Section | Field Name | JSON Path | Requirement | Data Type | Description | Example Value |
Nameplate | URIOfTheProduct | nameplate.URIOfTheProduct | Mandatory | String | Unique identifier of the supplied product. Material key, article number or product URI. | 1234567 |
Nameplate | ManufacturerIdentifier | nameplate.ManufacturerIdentifier | Mandatory | String | Unique manufacturer identifier (preferred: BPNL). | BPNL000000000GUC |
Nameplate | ManufacturerName | nameplate.ManufacturerName | Mandatory | String | Legal manufacturer name. | Henkel AG & Co. KGaA |
Nameplate | SerialNumber | nameplate.SerialNumber | Optional | String | Serial number of an individual item. | SN-0012345 |
Nameplate | DateOfManufacture | nameplate.DateOfManufacture | Optional | Date | Manufacturing date. | 2026-01-01 00:00:00 |
Nameplate | DateOfPuttingIntoService | nameplate.DateOfPuttingIntoService | Optional | Date | Date product entered service. | 2026-03-01 00:00:00 |
Nameplate | LifeCycleStage | nameplate.LifeCycleStage | Optional | String | Lifecycle stage of the supplied item. | Manufactured |
Nameplate | OperatorIdentifier | nameplate.OperatorIdentifier | Optional | String | Operator identifier. | BPNL0000000ABC |
Nameplate | UniqueFacilityIdentifier | nameplate.UniqueFacilityIdentifier | Optional | String | Manufacturing site identifier (preferred: BPNS). | BPNS000000123ABC |
Nameplate | AddressInformation | nameplate.AddressInformation | Optional | Object | Address of manufacturing site. | {"Country":"DE"} |
Nameplate | Markings | nameplate.Markings | Optional | Array(String) | Regulatory markings. | ["CE"] |
Nameplate | EUDeclarationOfConformity | nameplate.EUDeclarationOfConformity | Optional | Array(String) | References to conformity documents in Handover Documentation. | ["DOC-001"] |
Nameplate | ResultsOfTestReportsProvingCompliance | nameplate.ResultsOfTestReportsProvingCompliance | Optional | Array(String) | References to compliance test reports. | ["TEST-001"] |
Material Composition | ShortName | materialComposition.BatteryChemistry.ShortName | Optional | String | Short chemistry name. | NMC |
Material Composition | ClearName | materialComposition.BatteryChemistry.ClearName | Optional | String | Long chemistry description. | Lithium nickel manganese cobalt oxide |
Material Composition | BatteryMaterialIdentifier | materialComposition.BatteryMaterials[].BatteryMaterialIdentifier | Mandatory | String | CAS number or equivalent material identifier. | 64742-48-9 |
Material Composition | BatteryMaterialName | materialComposition.BatteryMaterials[].BatteryMaterialName | Mandatory | String | Name of the material. | Graphite |
Material Composition | BatteryMaterialMass | materialComposition.BatteryMaterials[].BatteryMaterialMass | Optional | Number | Material mass (kg). | 1.5 |
Material Composition | IsCriticalRawMaterial | materialComposition.BatteryMaterials[].IsCriticalRawMaterial | Mandatory | Boolean | Indicates whether the material is a Critical Raw Material. | true |
Material Composition | HazardousSubstanceClass | materialComposition.HazardousSubstances[].HazardousSubstanceClass | Optional | Array(String) | CLP hazard classes incl. Category. | ["EyeDamageOrIrritation Category 2"] |
Material Composition | HazardousSubstanceName | materialComposition.HazardousSubstances[].HazardousSubstanceName | Mandatory | String | Hazardous substance name. | Ammonia, aqueous solution |
Material Composition | HazardousSubstanceIdentifier | materialComposition.HazardousSubstances[].HazardousSubstanceIdentifier | Mandatory | String | CAS number or equivalent identifier. | 1336-21-6 |
Material Composition | HazardousSubstanceConcentration | materialComposition.HazardousSubstances[].HazardousSubstanceConcentration | Optional | Number | Substance concentration. | 46.02 |
Material Composition | HazardousSubstanceConcentrationUoM | materialComposition.HazardousSubstances[].HazardousSubstanceConcentrationUoM | Optional | String | Substance concentration Unit of measure. | ppm |
Material Composition | HazardousSubstanceImpact | materialComposition.HazardousSubstances[].hazardousSubstanceImpact | Optional | Array(String) | Hazard statements (H-statements). | ["H314","H400"] |
Material Composition | HazardousSubstanceLocation | materialComposition.HazardousSubstances[].hazardousSubstanceLocation | Optional | String | Location of substance within product. | Everywhere |
PCF (Catena-X) | SpecVersion | productCarbonFootprint.scopeOfPcfForm.specVersion | Mandatory | String | Catena-X PCF data model version. | urn:io.catenax.pcf:datamodel:version:9.0.0 |
PCF (Catena-X) | PartialFullPcf | productCarbonFootprint.scopeOfPcfForm.partialFullPcf | Mandatory | String | Scope of PCF declaration. | Cradle-to-gate |
PCF (Catena-X) | CompanyName | productCarbonFootprint.companyAndProductInformation.companyInformation.companyName | Mandatory | String | Reporting company. | Henkel AG & Co. KGaA |
PCF (Catena-X) | CompanyIds | productCarbonFootprint.companyAndProductInformation.companyInformation.companyIds[] | Mandatory | Array(String) | Company identifiers. | ["BPNL000000000GUC"] |
PCF (Catena-X) | ProductNameCompany | productCarbonFootprint.companyAndProductInformation.productInformation.productNameCompany | Mandatory | String | Commercial product name. | SUPERPERFORMANCE SURFACE COATING 1000KG |
PCF (Catena-X) | ProductIds | productCarbonFootprint.companyAndProductInformation.productInformation.productIds[] | Mandatory | Array(String) | Product identifiers. | ["1234567"] |
PCF (Catena-X) | DeclaredUnitOfMeasurement | productCarbonFootprint.companyAndProductInformation.productInformation.declaredUnitOfMeasurement | Mandatory | String | Reference unit for PCF. | kilogram |
PCF (Catena-X) | DeclaredUnitAmount | productCarbonFootprint.companyAndProductInformation.productInformation.declaredUnitAmount | Mandatory | Number | Quantity of declared unit. | 1 |
PCF (Catena-X) | ProductMassPerDeclaredUnit | productCarbonFootprint.companyAndProductInformation.productInformation.productMassPerDeclaredUnit | Mandatory | Number | Product mass per declared unit. | 1.0 |
PCF (Catena-X) | ProductClassifications | productCarbonFootprint.companyAndProductInformation.productInformation.productClassifications | Optional | Array(String) | Product classifications (GTIN, CN Code, CAS etc.). | ["urn:gtin:04012345678901"] |
PCF (Catena-X) | ProductDescription | productCarbonFootprint.companyAndProductInformation.productInformation.productDescription | Optional | String | Additional product description. | Water-based graphite coating |
PCF (Catena-X) | PrimaryDataShare | productCarbonFootprint.pcfAssessmentAndMethodology.dataSourcesAndQuality.primaryDataShare | Optional | Number (%) | Share of primary data used. | 85 |
PCF (Catena-X) | SecondaryEmissionFactorSources | productCarbonFootprint.pcfAssessmentAndMethodology.dataSourcesAndQuality.secondaryEmissionFactorSources | Optional | Array(String) | Secondary data sources used. | ["ecoinvent 3.11"] |
PCF (Catena-X) | TechnologicalDQR | productCarbonFootprint.pcfAssessmentAndMethodology.dataSourcesAndQuality.technologicalDQR | Optional | Number | Technological Data Quality Rating. | 2 |
PCF (Catena-X) | TemporalDQR | productCarbonFootprint.pcfAssessmentAndMethodology.dataSourcesAndQuality.temporalDQR | Optional | Number | Temporal Data Quality Rating. | 2 |
PCF (Catena-X) | GeographicalDQR | productCarbonFootprint.pcfAssessmentAndMethodology.dataSourcesAndQuality.geographicalDQR | Optional | Number | Geographical Data Quality Rating. | 2 |
PCF (Catena-X) | CcsTechnologicalCO2CaptureIncluded | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.technology.ccsTechnologicalCO2CaptureIncluded | Optional | Boolean | Indicates application of CCS/BECCS. | false |
PCF (Catena-X) | BoundaryProcessesDescription | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.technology.boundaryProcessesDescription | Optional | String | Description of relevant boundary processes. | Electricity consumption included |
PCF (Catena-X) | Id | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.idAndVersion.id | Mandatory | String | Unique PCF identifier. | 1234567 |
PCF (Catena-X) | Version | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.idAndVersion.version | Mandatory | Integer | Version number of PCF. | 0 |
PCF (Catena-X) | Status | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.idAndVersion.status | Mandatory | String | Status of PCF declaration. | Active |
PCF (Catena-X) | RetroOrProspectivePcfType | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.idAndVersion.retroOrProspectivePcfType | Optional | String | Retrospective or prospective PCF. | Retrospective PCF |
PCF (Catena-X) | PrecedingPfIds | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.idAndVersion.precedingPfIds | Optional | Array(String) | References to previous PCFs. | ["uuid-1"] |
PCF (Catena-X) | ExemptedEmissionsPercent | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.boundarySpecifications.exemptedEmissionsPercent | Mandatory | Number (%) | Cut-off percentage. | 0.0 |
PCF (Catena-X) | ExemptedEmissionsDescription | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.boundarySpecifications.exemptedEmissionsDescription | Optional | String | Explanation of exclusions. | No exemptions |
PCF (Catena-X) | GeographyRegionOrSubregion | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.geography.geographyRegionOrSubregion | Mandatory | String | Region. | Global |
PCF (Catena-X) | GeographyCountrySubdivision | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.geography.geographyCountrySubdivision | Optional | String | ISO country subdivision. | DE-NW |
PCF (Catena-X) | GeographyCountry | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.geography.geographyCountry | Optional | String | ISO country code. | DE |
PCF (Catena-X) | ReferencePeriodStart | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.time.referencePeriodStart | Mandatory | DateTime | Start of reporting period. | 2025-05-29T00:00:00Z |
PCF (Catena-X) | ReferencePeriodEnd | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.time.referencePeriodEnd | Mandatory | DateTime | End of reporting period. | 2026-05-29T00:00:00Z |
PCF (Catena-X) | Created | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.time.created | Mandatory | DateTime | Creation timestamp. | 2026-06-29T10:42:46Z |
PCF (Catena-X) | ValidityPeriodStart | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.time.validityPeriodStart | Optional | DateTime | Validity start. | 2026-06-29T10:42:46Z |
PCF (Catena-X) | ValidityPeriodEnd | productCarbonFootprint.pcfAssessmentAndMethodology.pcfAssessmentInformation.time.validityPeriodEnd | Mandatory | DateTime | Validity end. | 2027-06-29T00:00:00Z |
PCF (Catena-X) | ProgramCertificationShare | productCarbonFootprint.pcfAssessmentAndMethodology.verificationAndCertificationShares.programCertificationShare | Optional | Number (%) | Share certified under a PCF program. | 80 |
PCF (Catena-X) | ProductVerificationShare3rdParty | productCarbonFootprint.pcfAssessmentAndMethodology.verificationAndCertificationShares.productVerificationShare3rdParty | Optional | Number (%) | Third-party verification share. | 100 |
PCF (Catena-X) | ProductVerificationShare2ndParty | productCarbonFootprint.pcfAssessmentAndMethodology.verificationAndCertificationShares.productVerificationShare2ndParty | Optional | Number (%) | Second-party verification share. | 0 |
PCF (Catena-X) | ProductVerificationShare1stParty | productCarbonFootprint.pcfAssessmentAndMethodology.verificationAndCertificationShares.productVerificationShare1stParty | Optional | Number (%) | First-party verification share. | 0 |
PCF (Catena-X) | MassBalancingUsed | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.massBalancingInformation.massBalancingUsed | Optional | Boolean | Indicates usage of mass balancing. | false |
PCF (Catena-X) | FreeAttributionInMassBalancing | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.massBalancingInformation.freeAttributionInMassBalancing | Optional | String | Attribution method. | not applicable |
PCF (Catena-X) | MassBalancingCertificateScheme | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.massBalancingInformation.massBalancingCertificateScheme | Optional | String | Certification scheme. | ISCC+ |
PCF (Catena-X) | CrossSectoralStandards | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.standards.crossSectoralStandards | Mandatory | Array(String) | Standards used. | ["ISO 14067"] |
PCF (Catena-X) | ProductOrSectorSpecificRules | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.standards.productOrSectorSpecificRules | Mandatory | Array(String) | Product or sector specific rules. | ["TfS PCF Guideline"] |
PCF (Catena-X) | IpccCharacterizationFactors | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.gwpCharacterizationFactorDetails.ipccCharacterizationFactors | Mandatory | String | IPCC report version. | AR6 |
PCF (Catena-X) | AllocationWasteIncineration | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.allocationInForeground.allocationWasteIncineration | Mandatory | String | Waste incineration allocation method. | Cut-off |
PCF (Catena-X) | AllocationRulesDescription | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.allocationInForeground.allocationRulesDescription | Optional | String | Allocation methodology description. | Mass allocation for production and logistics emissions |
PCF (Catena-X) | AllocationRecycledCarbon | productCarbonFootprint.pcfAssessmentAndMethodology.pcfMethodology.allocationInForeground.allocationRecycledCarbon | Optional | String | Recycling allocation approach. | cut-off |
PCF (Catena-X) | Comment | productCarbonFootprint.general.comment | Optional | String | Free text comment. | Product-specific assumptions documented |
PCF (Catena-X) | PcfLegalStatement | productCarbonFootprint.general.pcfLegalStatement | Optional | String | Legal disclaimer. | This PCF is provided for information purposes only |
PCF (Catena-X) | CarbonContentTotal | productCarbonFootprint.carbonContent.carbonContentTotal | Optional | Number | Total carbon content. | 0.52 |
PCF (Catena-X) | FossilCarbonContent | productCarbonFootprint.carbonContent.fossilCarbonContent | Optional | Number | Fossil carbon content. | 0.10 |
PCF (Catena-X) | BiogenicCarbonContent | productCarbonFootprint.carbonContent.biogenicCarbonContent | Optional | Number | Biogenic carbon content. | 0.05 |
PCF (Catena-X) | PackagingBiogenicCarbonContent | productCarbonFootprint.carbonContent.packagingBiogenicCarbonContent | Optional | Number | Biogenic carbon content in packaging. | 0.01 |
PCF (Catena-X) | RecycledCarbonContent | productCarbonFootprint.carbonContent.recycledCarbonContent | Optional | Number | Recycled carbon content. | 0.02 |
PCF (Catena-X) | PcfIncludingBiogenicUptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.pcfIncludingBiogenicUptake | Mandatory | Number | Production-stage PCF incl. biogenic uptake. | 1.24 |
PCF (Catena-X) | PcfExcludingBiogenicUptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.pcfExcludingBiogenicUptake | Mandatory | Number | Production-stage PCF excl. biogenic uptake. | 1.24 |
PCF (Catena-X) | FossilGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.fossilGhgEmissions | Optional | Number | Fossil GHG emissions. | 1.20 |
PCF (Catena-X) | BiogenicNonCO2Emissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.biogenicNonCO2Emissions | Optional | Number | Biogenic non-CO₂ emissions. | 0.0 |
PCF (Catena-X) | BiogenicCO2Uptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.biogenicCO2Uptake | Optional | Number | Biogenic CO₂ uptake. | 0.0 |
PCF (Catena-X) | LandUseChangeGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.landUseChangeGhgEmissions | Optional | Number | Land use change emissions. | 0.0 |
PCF (Catena-X) | LandManagementBiogenicCO2Emissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.landManagementBiogenicCO2Emissions | Optional | Number | Land management emissions. | 0.0 |
PCF (Catena-X) | PackagingLandManagementBiogenicCO2Emissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.packagingLandManagementBiogenicCO2Emissions | Optional | Number | Packaging land management emissions. | 0.0 |
PCF (Catena-X) | LandManagementBiogenicCO2Removals | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.landManagementBiogenicCO2Removals | Optional | Number | Land management removals. | 0.0 |
PCF (Catena-X) | AircraftGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.productionStage.aircraftGhgEmissions | Optional | Number | Aviation emissions. | 0.0 |
PCF (Catena-X) | DistributionStageIncluded | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageIncluded | Mandatory | Boolean | Distribution emissions included. | true |
PCF (Catena-X) | DistributionStagePcfIncludingBiogenicUptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStagePcfIncludingBiogenicUptake | Optional | Number | Distribution PCF incl. biogenic uptake. | 0.08 |
PCF (Catena-X) | DistributionStagePcfExcludingBiogenicUptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStagePcfExcludingBiogenicUptake | Optional | Number | Distribution PCF excl. biogenic uptake. | 0.06 |
PCF (Catena-X) | DistributionStageFossilGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageFossilGhgEmissions | Optional | Number | Distribution fossil emissions. | 0.06 |
PCF (Catena-X) | DistributionStageBiogenicNonCO2Emissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageBiogenicNonCO2Emissions | Optional | Number | Distribution biogenic non-CO₂. | 0.0 |
PCF (Catena-X) | DistributionStageBiogenicCO2Uptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageBiogenicCO2Uptake | Optional | Number | Distribution biogenic uptake. | 0.0 |
PCF (Catena-X) | DistributionStageLandUseChangeGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageLandUseChangeGhgEmissions | Optional | Number | Distribution LUC emissions. | 0.0 |
PCF (Catena-X) | DistributionStageLandManagementBiogenicCO2Emissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageLandManagementBiogenicCO2Emissions | Optional | Number | Distribution land management emissions. | 0.0 |
PCF (Catena-X) | DistributionStageLandManagementBiogenicCO2Removals | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageLandManagementBiogenicCO2Removals | Optional | Number | Distribution land management removals. | 0.0 |
PCF (Catena-X) | DistributionStageAircraftGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.distributionStage.distributionStageAircraftGhgEmissions | Optional | Number | Distribution aviation emissions. | 0.0 |
PCF (Catena-X) | PackagingEmissionsIncluded | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingEmissionsIncluded | Mandatory | Boolean | Packaging emissions included. | true |
PCF (Catena-X) | PackagingPcfIncludingBiogenicUptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingPcfIncludingBiogenicUptake | Optional | Number | Packaging PCF incl. uptake. | 0.02 |
PCF (Catena-X) | PackagingPcfExcludingBiogenicUptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingPcfExcludingBiogenicUptake | Optional | Number | Packaging PCF excl. uptake. | 0.02 |
PCF (Catena-X) | PackagingFossilGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingFossilGhgEmissions | Optional | Number | Packaging fossil emissions. | 0.01 |
PCF (Catena-X) | PackagingBiogenicNonCO2Emissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingBiogenicNonCO2Emissions | Optional | Number | Packaging biogenic non-CO₂. | 0.0 |
PCF (Catena-X) | PackagingBiogenicCO2Uptake | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingBiogenicCO2Uptake | Optional | Number | Packaging CO₂ uptake. | 0.0 |
PCF (Catena-X) | PackagingLandUseChangeGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingLandUseChangeGhgEmissions | Optional | Number | Packaging LUC emissions. | 0.0 |
PCF (Catena-X) | PackagingLandManagementBiogenicCO2Emissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingLandManagementBiogenicCO2Emissions | Optional | Number | Packaging land management emissions. | 0.0 |
PCF (Catena-X) | PackagingLandManagementBiogenicCO2Removals | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingLandManagementBiogenicCO2Removals | Optional | Number | Packaging land management removals. | 0.0 |
PCF (Catena-X) | PackagingAircraftGhgEmissions | productCarbonFootprint.productLifeCycleStagesAndEmissions.packagingStage.packagingAircraftGhgEmissions | Optional | Number | Packaging aviation emissions. | 0.0 |
PCF (Catena-X) | AttestationType | productCarbonFootprint.attestationOfConformance.attestationType | Optional | String | Type of conformity attestation. | PCF Verification |
PCF (Catena-X) | StandardName | productCarbonFootprint.attestationOfConformance.standardName | Optional | String | Standard against which verification was performed. | Catena-X Product Carbon Footprint Rulebook v9 |
PCF (Catena-X) | AttestationStandard | productCarbonFootprint.attestationOfConformance.attestationStandard | Optional | String | Verification framework applied. | PCF Verification Framework V2 |
PCF (Catena-X) | AttestationOfConformanceId | productCarbonFootprint.attestationOfConformance.attestationOfConformanceId | Optional | String | Unique identifier of the attestation. | 4a7c4482-8431-4c31-a895-70341d2a1376 |
PCF (Catena-X) | ProviderName | productCarbonFootprint.attestationOfConformance.providerName | Optional | String | Name of certifying body. | TÜV Rheinland |
PCF (Catena-X) | AttestationOfConformanceLink | productCarbonFootprint.attestationOfConformance.attestationOfConformanceLink | Optional | URL | Link to certificate or attestation. | |
PCF (Catena-X) | ProviderId | productCarbonFootprint.attestationOfConformance.providerId | Optional | String | Identifier of certifying body. | BPNL0000000AXXXX |
PCF (Catena-X) | CompletedAt | productCarbonFootprint.attestationOfConformance.completedAt | Optional | DateTime | Date attestation was completed. | 2026-06-30T00:00:00Z |
Circularity | RecycledMaterial | circularity.RecycledContentInformation[].RecycledMaterial | Mandatory | String | Material for which recycled content is reported. | Nickel |
Circularity | PreConsumerShare | circularity.RecycledContentInformation[].PreConsumerShare | Mandatory | Number (%) | Share from pre-consumer recycled sources. | 20 |
Circularity | PostConsumerShare | circularity.RecycledContentInformation[].PostConsumerShare | Mandatory | Number (%) | Share from post-consumer recycled sources. | 15 |
Circularity | RenewableContent | circularity.RenewableContent | Optional | Number (%) | Renewable material content share. | 8.0 |
Circularity | SafetyInstructions | circularity.SafetyMeasures.SafetyInstructions[] | Optional | Array(String) | References to safety documents. | ["DOC-SDS-001"] |
Circularity | ExtinguishingAgents | circularity.SafetyMeasures.ExtinguishingAgents[] | Optional | Array(String) | Suitable extinguishing agents. | ["CO2","ABC Powder"] |
Handover Documentation | Domain | handoverDocumentation.Documents[].DocumentIds[].Domain | Mandatory | String | Document domain. | Henkel |
Handover Documentation | Identifier | handoverDocumentation.Documents[].DocumentIds[].Identifier | Mandatory | String | Document identifier. | DOC-SDS-001 |
Handover Documentation | IsPrimary | handoverDocumentation.Documents[].DocumentIds[].IsPrimary | Mandatory | Boolean | Primary document identifier flag. | true |
Handover Documentation | ClassId | handoverDocumentation.Documents[].DocumentClassifications[].ClassId | Mandatory | String | VDI2770 class identifier. | 02-02 |
Handover Documentation | ClassName | handoverDocumentation.Documents[].DocumentClassifications[].ClassName | Mandatory | String | Document class name. | Safety Data Sheet |
Handover Documentation | System | handoverDocumentation.Documents[].DocumentClassifications[].System | Mandatory | String | Classification system. | VDI2770 |
Handover Documentation | Language | handoverDocumentation.Documents[].DocumentVersions[].Language[] | Mandatory | Array(String) | Document language. | ["en"] |
Handover Documentation | Version | handoverDocumentation.Documents[].DocumentVersions[].Version | Optional | String | Version number. | 1.0 |
Handover Documentation | Title | handoverDocumentation.Documents[].DocumentVersions[].Title | Mandatory | String | Document title. | Safety Data Sheet |
Handover Documentation | Subtitle | handoverDocumentation.Documents[].DocumentVersions[].Subtitle | Optional | String | Document subtitle. | European Version |
Handover Documentation | Description | handoverDocumentation.Documents[].DocumentVersions[].Description | Optional | String | Document description. | Product SDS |
Handover Documentation | Link | handoverDocumentation.Documents[].DocumentVersions[].DigitalFiles[].Link | Mandatory | URL | File location. | |
Handover Documentation | MimeType | handoverDocumentation.Documents[].DocumentVersions[].DigitalFiles[].MimeType | Mandatory | String | MIME type. | application/pdf |
More information about the latest version of the Catena-X Battery Pass aspect model schema can be found here.
5.4 Create Submodel
This step creates the Battery Pass submodel for the relevant product or component. The submodel is the structured data package that contains the Battery Pass information suppliers must provide to Henkel. Suppliers must prepare the Battery Pass data in JSON format and submit it through the following API endpoint:
Method: POST
Endpoint: {{dashboard_backend}}/api/v4/aas/{{component_id}}/submodels
The JSON schema below shows the required structure for the Battery Pass data model. Suppliers should use this schema as the technical template and replace the sample values with their own product, material, hazardous substance, Product Carbon Footprint, circularity, safety, and documentation data.
Do not change the JSON field names, nesting structure, or technical paths. Only the values should be completed or replaced with supplier-specific information.
The JSON includes the following main data areas:
Nameplate: product identification, manufacturer information, lifecycle status, markings, and conformity documentation.
Material Composition: battery chemistry, materials, Critical Raw Material indication, hazardous substances, concentration values, hazard classifications, and substance location.
Product Carbon Footprint: company and product information, assessment methodology, data quality indicators, declared unit, lifecycle stage emissions, and Product Carbon Footprint values excluding biogenic uptake where applicable.
Circularity: recycled content, renewable content, safety instructions, and extinguishing agents.
Handover Documentation: document identifiers, classifications, versions, languages, titles, descriptions, and digital file references.
The placeholders in the request must be completed as follows:
{{dashboard_backend}}is the backend URL of the supplier’s dashboard or technical environment.{{component_id}}is the identifier of the component or product for which the submodel is being created.{{DigitalTwinId}}is the unique identifier of the Digital Twin. Use the same Digital Twin ID that is used in the submodel. The value must be provided in UUIDv4 format.{{submodel_id}}is the unique identifier of the submodel. The value must be provided in UUIDv4 format.{{company_name}}is the legal name of the supplier company.{{sourceId}}can be any string value used by the supplier for internal reference purposes.
{{dashboard_backend}} (pre-prod) | |
{{dashboard_backend}} (prod) | |
{{component_id}} | EDC Component ID |
Here is a sample submodel JSON below. Before using the sample JSON, suppliers should verify that all placeholders have been replaced with the relevant values provided above and that the JSON syntax is valid in their technical environment.
{
"submodel_id": "{{submodel_id}}",
"digitalTwinId": "{{DigitalTwinId}}",
"owner": "{{company_name}}",
"sourceId": "{{sourceId}}",
"data": {
"nameplate": {
"URIOfTheProduct": "PRODUCT-000001",
"SerialNumber": null,
"ManufacturerIdentifier": "BPNL000000000GUC",
"ManufacturerName": "Henkel AG & Co. KGaA",
"DateOfManufacture": null,
"DateOfPuttingIntoService": null,
"LifeCycleStage": null,
"OperatorIdentifier": null,
"UniqueFacilityIdentifier": null,
"AddressInformation": null,
"Markings": null,
"EUDeclarationOfConformity": null,
"ResultsOfTestReportsProvingCompliance": null
},
"materialComposition": {
"BatteryChemistry": {
"ShortName": null,
"ClearName": null
},
"BatteryMaterials": [
{
"BatteryMaterialIdentifier": "12-34-0",
"BatteryMaterialName": "Example Material 01",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "1234-56-7",
"BatteryMaterialName": "Example Material 02",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "2345-67-8",
"BatteryMaterialName": "Example Material 03",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "3456-78-9",
"BatteryMaterialName": "Example Material 04",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "4567-89-0",
"BatteryMaterialName": "Example Material 05",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "5678-90-1",
"BatteryMaterialName": "Example Material 06",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "6789-01-2",
"BatteryMaterialName": "Example Material 07",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "7890-12-3",
"BatteryMaterialName": "Example Material 08",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "8901-23-4",
"BatteryMaterialName": "Example Material 09",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
},
{
"BatteryMaterialIdentifier": "9012-34-5",
"BatteryMaterialName": "Example Material 10",
"BatteryMaterialMass": null,
"IsCriticalRawMaterial": false
}
],
"HazardousSubstances": [
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 1"
],
"HazardousSubstanceName": "Example Substance 01",
"HazardousSubstanceIdentifier": "11-11-1",
"HazardousSubstanceConcentration": 65.0,
"HazardousSubstanceConcentrationUoM": "ppm",
"hazardousSubstanceImpact": [
"H101"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 2"
],
"HazardousSubstanceName": "Example Substance 02",
"HazardousSubstanceIdentifier": "22-22-2",
"HazardousSubstanceConcentration": 47.68,
"HazardousSubstanceConcentrationUoM": "ppm",
"hazardousSubstanceImpact": [
"H102"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 3",
"ExampleHazardClass Category 4",
"ExampleHazardClass Category 5"
],
"HazardousSubstanceName": "Example Substance 03",
"HazardousSubstanceIdentifier": "3333-33-3",
"HazardousSubstanceConcentration": 1.0498,
"HazardousSubstanceConcentrationUoM": "%",
"hazardousSubstanceImpact": [
"H103",
"H104",
"H105"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 6",
"ExampleHazardClass Category 7",
"ExampleHazardClass Category 8",
"ExampleHazardClass Category 9",
"ExampleHazardClass Category 10"
],
"HazardousSubstanceName": "Example Substance 04",
"HazardousSubstanceIdentifier": "4444-44-4",
"HazardousSubstanceConcentration": 2.25,
"HazardousSubstanceConcentrationUoM": "ppb",
"hazardousSubstanceImpact": [
"H106",
"H107",
"H108",
"H109",
"H110"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 11",
"ExampleHazardClass Category 12",
"ExampleHazardClass Category 13",
"ExampleHazardClass Category 14",
"ExampleHazardClass Category 15",
"ExampleHazardClass Category 16"
],
"HazardousSubstanceName": "Example Substance 05",
"HazardousSubstanceIdentifier": "5555-55-5",
"HazardousSubstanceConcentration": 3.55,
"HazardousSubstanceConcentrationUoM": "ppb",
"hazardousSubstanceImpact": [
"H111",
"H112",
"H113",
"H114",
"H115",
"H116"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 17"
],
"HazardousSubstanceName": "Example Substance 06",
"HazardousSubstanceIdentifier": "6666-66-6",
"HazardousSubstanceConcentration": 1.715,
"HazardousSubstanceConcentrationUoM": "%",
"hazardousSubstanceImpact": [
"H117"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 18",
"ExampleHazardClass Category 19",
"ExampleHazardClass Category 20",
"ExampleHazardClass Category 21",
"ExampleHazardClass Category 22"
],
"HazardousSubstanceName": "Example Substance 07",
"HazardousSubstanceIdentifier": "7777-77-7",
"HazardousSubstanceConcentration": 1.337,
"HazardousSubstanceConcentrationUoM": "%",
"hazardousSubstanceImpact": [
"H118",
"H119",
"H120",
"H121",
"H122"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 23",
"ExampleHazardClass Category 24",
"ExampleHazardClass Category 25",
"ExampleHazardClass Category 26",
"ExampleHazardClass Category 27",
"ExampleHazardClass Category 28"
],
"HazardousSubstanceName": "Example Substance 08",
"HazardousSubstanceIdentifier": "8888-88-8",
"HazardousSubstanceConcentration": 19.0926,
"HazardousSubstanceConcentrationUoM": "ppm",
"hazardousSubstanceImpact": [
"H123",
"H124",
"H125",
"H126",
"H127",
"H128"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 29",
"ExampleHazardClass Category 30",
"ExampleHazardClass Category 31"
],
"HazardousSubstanceName": "Example Substance 09",
"HazardousSubstanceIdentifier": "9999-99-9",
"HazardousSubstanceConcentration": 26.05,
"HazardousSubstanceConcentrationUoM": "ppb",
"hazardousSubstanceImpact": [
"H129",
"H130",
"H131"
],
"hazardousSubstanceLocation": "Everywhere"
},
{
"HazardousSubstanceClass": [
"ExampleHazardClass Category 32",
"ExampleHazardClass Category 33",
"ExampleHazardClass Category 34"
],
"HazardousSubstanceName": "Example Substance 10",
"HazardousSubstanceIdentifier": "12345-67-8",
"HazardousSubstanceConcentration": 648.45,
"HazardousSubstanceConcentrationUoM": "ppb",
"hazardousSubstanceImpact": [
"H132",
"H133",
"H134"
],
"hazardousSubstanceLocation": "Everywhere"
}
]
},
"productCarbonFootprint": {
"scopeOfPcfForm": {
"specVersion":"urn:io.catenax.pcf:datamodel:version:9.0.0",
"partialFullPcf": "Cradle-to-gate"
},
"companyAndProductInformation": {
"companyInformation": {
"companyName": "Henkel AG & Co. KGaA",
"companyIds": [
"BPNL000000000GUC"
]
},
"productInformation": {
"productNameCompany": "Example Battery Component Material",
"productIds": [
"PRODUCT-000001"
],
"declaredUnitOfMeasurement": null,
"declaredUnitAmount": null,
"productMassPerDeclaredUnit": null,
"productClassifications": null,
"productDescription": "Demonstration dataset for customer workshops"
}
},
"pcfAssessmentAndMethodology": {
"dataSourcesAndQuality": {
"primaryDataShare": null,
"secondaryEmissionFactorSources": null,
"technologicalDQR": null,
"temporalDQR": null,
"geographicalDQR": null
},
"pcfAssessmentInformation": {
"technology": {
"ccsTechnologicalCO2CaptureIncluded": null,
"boundaryProcessesDescription": null
},
"idAndVersion": {
"id": "PCF-DEMO-000001",
"version": "1",
"status": "Active",
"retroOrProspectivePcfType": null,
"precedingPfIds": null
},
"boundarySpecifications": {
"exemptedEmissionsPercent": 0.0,
"exemptedEmissionsDescription": null
},
"geography": {
"geographyRegionOrSubregion": "Global",
"geographyCountrySubdivision": "Global",
"geographyCountry": null
},
"time": {
"referencePeriodStart": "2025-01-01T00:00:00.000Z",
"referencePeriodEnd": "2025-12-31T00:00:00.000Z",
"created": "2026-01-15T00:00:00.000Z",
"validityPeriodEnd": "2026-12-31T00:00:00.000Z",
"validityPeriodStart": "2026-01-15T00:00:00.000Z"
}
},
"verificationAndCertificationShares": {
"programCertificationShare": null,
"productVerificationShare3rdParty": null,
"productVerificationShare2ndParty": null,
"productVerificationShare1stParty": null
},
"pcfMethodology": {
"massBalancingInformation": {
"massBalancingUsed": null,
"freeAttributionInMassBalancing": null,
"massBalancingCertificateScheme": null
},
"standards": {
"crossSectoralStandards": [],
"productOrSectorSpecificRules": []
},
"gwpCharacterizationFactorDetails": {
"ipccCharacterizationFactors": null
},
"allocationInForeground": {
"allocationWasteIncineration": "Cut-off",
"allocationRulesDescription": "Example allocation methodology",
"allocationRecycledCarbon": null
}
}
},
"general": {
"comment": "Example dataset for customer demonstration purposes only",
"pcfLegalStatement": null
},
"carbonContent": {
"carbonContentTotal": null,
"fossilCarbonContent": null,
"biogenicCarbonContent": null,
"packagingBiogenicCarbonContent": null,
"recycledCarbonContent": null
},
"productLifeCycleStagesAndEmissions": {
"productionStage": {
"pcfIncludingBiogenicUptake": null,
"pcfExcludingBiogenicUptake": 1.24,
"fossilGhgEmissions": null,
"biogenicNonCO2Emissions": 0.0,
"biogenicCO2Uptake": null,
"landUseChangeGhgEmissions": null,
"landManagementBiogenicCO2Emissions": null,
"packagingLandManagementBiogenicCO2Emissions": null,
"landManagementBiogenicCO2Removals": null,
"aircraftGhgEmissions": null
},
"distributionStage": {
"distributionStageIncluded": true,
"distributionStagePcfIncludingBiogenicUptake": null,
"distributionStagePcfExcludingBiogenicUptake": 0.06,
"distributionStageFossilGhgEmissions": null,
"distributionStageBiogenicNonCO2Emissions": null,
"distributionStageBiogenicCO2Uptake": null,
"distributionStageLandUseChangeGhgEmissions": null,
"distributionStageLandManagementBiogenicCO2Emissions": null,
"distributionStageLandManagementBiogenicCO2Removals": null,
"distributionStageAircraftGhgEmissions": null
},
"packagingStage": {
"packagingEmissionsIncluded": true,
"packagingPcfIncludingBiogenicUptake": null,
"packagingPcfExcludingBiogenicUptake": null,
"packagingFossilGhgEmissions": null,
"packagingBiogenicNonCO2Emissions": null,
"packagingBiogenicCO2Uptake": null,
"packagingLandUseChangeGhgEmissions": null,
"packagingLandManagementBiogenicCO2Emissions": null,
"packagingLandManagementBiogenicCO2Removals": null,
"packagingAircraftGhgEmissions": null
}
},
"attestationOfConformance": null
},
"circularity": {
"RecycledContentInformation": [
{
"RecycledMaterial": "Nickel",
"PreConsumerShare": 18.5,
"PostConsumerShare": 4.2
}
],
"RenewableContent": 12.0,
"SafetyMeasures": {
"SafetyInstructions": null,
"ExtinguishingAgents": null
}
},
"handoverDocumentation": {
"Documents": [
{
"DocumentIds": [
{
"Domain": "DEMO",
"Identifier": "DOC-DEMO-001",
"IsPrimary": true
}
],
"DocumentClassifications": [
{
"ClassId": "02-02",
"ClassName": "Safety Data Sheet",
"System": "VDI2770"
}
],
"DocumentVersions": [
{
"Language": [
"en"
],
"Version": "1.0",
"Title": "Example Safety Data Sheet",
"Subtitle": null,
"Description": "Demonstration document",
"DigitalFiles": [
{
"Link": "https://example.com/document.pdf",
"MimeType": "application/pdf"
}
]
}
]
}
]
}
}
}{{DigitalTwinId}}-Unique identifier of the Digital Twin. Use the same Digital Twin ID used in the submodel. The value must be provided in UUIDv4 format.
{{submodel_Id}}-Unique identifier of the submodel. The value must be provided in UUIDv4 format.
{{company_name}}-Name of your company
{{sourceId}}- Use any string value for reference purposes.
After the request is submitted successfully, the expected sample response confirms that the Battery Pass submodel has been created.
Expected Sample response:
5.5 Create Submodel Asset- Battery Pass
After the Battery Pass submodel has been created, it must be published as an asset in the EDC. This allows Henkel to discover and access the Battery Pass submodel through the Catena-X dataspace.
Use the following API endpoint to create the Battery Pass submodel asset:
Method:POST
Endpoint: {{EDC_URL}}/management/v3/assets
The asset definition links the EDC asset to the Battery Pass submodel endpoint. It identifies the asset as a Catena-X submodel and includes the semantic identifier for the Battery Pass model.
Suppliers should keep the JSON structure, field names, and technical properties unchanged. Only the placeholder values should be replaced with supplier-specific identifiers and endpoint URLs.
The placeholders in the request must be completed as follows:
{{EDC_URL}} is the base URL of the supplier’s EDC management API.
{{ASSET_ID}} is the identifier of the asset. It can be a string or a UUID. Using UUIDv4 is recommended to ensure uniqueness.
{{submodel_url}} is the endpoint URL of the Battery Pass submodel that will be referenced in the asset definition.
The following technical properties should remain unchanged unless Henkel or the implementation partner confirms otherwise:
dct:type identifies the asset as a Catena-X submodel.
cx-common:version defines the Catena-X version used for the asset.
aas-semantics:semanticId identifies the Battery Pass semantic model.
dataAddress points to the submodel endpoint and defines the required proxy settings.
After the request is submitted successfully, the expected sample response confirms that the Battery Pass submodel asset has been created in the EDC.
{
"@context": {
"dct": "http://purl.org/dc/terms/",
"cx-common": "https://w3id.org/catenax/ontology/common#",
"cx-taxo": "https://w3id.org/catenax/taxonomy#",
"aas-semantics": "https://admin-shell.io/aas/3/0/HasSemantics/"
},
"@type": "Asset",
"@id": "{{ASSET_ID}}",
"properties": {
"dct:type": {
"@id": "cx-taxo:Submodel"
},
"cx-common:version": "3.0",
"aas-semantics:semanticId": {
"@id": " urn:io.catenax.battery.battery_pass:6.1.0"
}
},
"dataAddress": {
"@type": "DataAddress",
"type": "HttpData",
"baseUrl": "{{submodel_url}}",
"proxyMethod": "true",
"proxyBody": "true",
"proxyPath": "false",
"proxyQueryParams": "false"
}
}{
{ASSET_ID}}is the identifier of the asset. It can be specified as a string or a UUID. Using UUIDv4 is recommended to ensure uniqueness.{
{submodel_url}}is the endpoint URL of the Battery Pass submodel that is referenced in the asset definition.
Expected Sample response:
5.6 Create Contract definition
This section defines the access and usage conditions for the Battery Pass submodel asset. These policies control who may access the asset and how the data may be used after access has been granted.
For the Battery Pass submodel asset, suppliers must create three items in the EDC:
an access policy for the submodel asset;
a usage policy for the submodel asset; and
a contract definition that links the asset to both policies.
Together, these steps allow Henkel to discover the asset, negotiate the contract, and access the Battery Pass submodel under the agreed Catena-X policy conditions.
The Policy definitions here are only compatible for Jupiter EDCs (version 0.10.x and older). Find more information about new policy definitions and EDC Migration in Section 8: Schema Structure Changes in CX-Saturn.
Access policy for Submodel Asset
The access policy defines which business partner is allowed to access the Battery Pass submodel asset. In this example, access is limited to an active Catena-X member with the specified Business Partner Number.
Use the following API endpoint to create the access policy:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/policydefinitions
Suppliers should keep the JSON structure and policy logic unchanged. Only the placeholder values should be replaced.
The placeholders in the request must be completed as follows:
{{EDC_URL}}is the base URL of the supplier’s EDC management API.{{ACCESS_POLICY_ID}}is the identifier of the access policy. It can be specified as a numeric value or a string, but it must be unique and reused consistently in later steps.{{POLICY_BPN}}is the Business Partner Number (BPN) of the business partner that will be granted access under the policy.
The access policy checks two conditions:
the partner must have an active Catena-X membership; and
the partner’s BPN must match the BPN defined in
{{POLICY_BPN}}.
{
"@id": "{{ACCESS_POLICY_ID}}",
"@type": "PolicyDefinition",
"policy": {
"@type": "odrl:Set",
"odrl:permission": {
"odrl:action": {
"@id": "odrl:use"
},
"odrl:constraint": {
"odrl:and": [
{
"odrl:leftOperand": {
"@id": "cx-policy:Membership"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "active"
},
{
"odrl:leftOperand": {
"@id": "cx-policy:BusinessPartnerNumber"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "{{POLICY_BPN}}"
}
]
}
},
"odrl:prohibition": [],
"odrl:obligation": []
},
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/",
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"tx": "https://w3id.org/tractusx/v0.0.1/ns/",
"tx-auth": "https://w3id.org/tractusx/auth/",
"cx-policy": "https://w3id.org/catenax/policy/",
"odrl": "http://www.w3.org/ns/odrl/2/"
}
}{{ACCESS_POLICY_ID}}-– Identifier of the access policy. Can be specified as a numeric value or a string.
{{POLICY_BPN}}- Business Partner Number (BPN) of the business partner that will be granted access under the policy
After the request is submitted successfully, the expected sample response confirms that the access policy has been created.
Expected Sample response:
Usage policy for Submodel Asset
The usage policy defines how the Battery Pass submodel data may be used after access has been granted. This ensures that the data is exchanged under the required Catena-X governance and usage-purpose conditions.
Use the following API endpoint to create the usage policy:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/policydefinitions
Suppliers should keep the JSON structure and policy conditions unchanged. Only the placeholder value should be replaced.
The placeholder in the request must be completed as follows:
{{USAGE_POLICY_ID}}is the identifier of the usage policy. It can be specified as a numeric value or a string, but it must be unique and reused consistently in the contract definition.
The usage policy checks two conditions:
the framework agreement must be
DataExchangeGovernance:1.0; andthe usage purpose must be
cx.circular.dpp:1.
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/",
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"cx-policy": "https://w3id.org/catenax/policy/",
"odrl": "http://www.w3.org/ns/odrl/2/"
},
"@id": "{{USAGE_POLICY_ID}}",
"policy": {
"@type": "odrl:Set",
"odrl:permission": {
"odrl:action": {
"@id": "odrl:use"
},
"odrl:constraint": {
"odrl:and": [
{
"odrl:leftOperand": {
"@id": "cx-policy:FrameworkAgreement"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "DataExchangeGovernance:1.0"
},
{
"odrl:leftOperand": {
"@id": "cx-policy:UsagePurpose"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "cx.circular.dpp:1"
}
]
}
}
}
}{{USAGE_POLICY_ID}}- Identifier of the usage policy. Can be specified as a numeric value or a string.
After the request is submitted successfully, the expected sample response confirms that the usage policy has been created.
Expected Sample response:
Create Contract Definition for Submodel Asset
The contract definition links the Battery Pass submodel asset to the access policy and usage policy created in the previous steps. This makes the asset available for contract negotiation through the EDC.
Use the following API endpoint to create the contract definition:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/contractdefinitions
Suppliers should keep the JSON structure unchanged and only replace the placeholder values with the correct identifiers.
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/"
},
"@type": "ContractDefinition",
"@id": "{{CONTRACT_DEFINITION_ID}}",
"accessPolicyId": "{{ACCESS_POLICY_ID}}",
"contractPolicyId": "{{USAGE_POLICY_ID}}",
"assetsSelector": [
{
"operandLeft": "https://w3id.org/edc/v0.0.1/ns/id",
"operator": "=",
"operandRight": "{{ASSET_ID}}"
}] }
The placeholders in the request must be completed as follows:
{{CONTRACT_DEFINITION_ID}}is the identifier of the contract definition. It can be specified as any unique value.{{ACCESS_POLICY_ID}}is the identifier of the access policy created in the previous step. This value must exactly match the Access Policy ID used during access policy creation.{{USAGE_POLICY_ID}}is the identifier of the usage policy created in the previous step. This value must exactly match the Usage Policy ID used during usage policy creation.{{ASSET_ID}}is the identifier of the Battery Pass submodel asset created in section 5.5. This value must exactly match the Asset ID used during asset creation.
After the request is submitted successfully, the expected sample response confirms that the contract definition has been created.
Expected Sample response:
5.7 Create Digital Twin
This step creates the Digital Twin shell descriptor for the product or component. The Digital Twin acts as the digital representation of the supplied part and links the part identifiers, supplier information, lifecycle phase, and Battery Pass submodel in the Digital Twin Registry.
Use the following API endpoint to create the Digital Twin shell descriptor:
Method: POST
Endpoint: {{dashboard_backend }}/api/expert/v1/dtr/{{component_id}}/shell-descriptors
The JSON below registers the Digital Twin and connects it to the Battery Pass submodel created in the previous steps. Suppliers should keep the JSON structure, field names, and technical paths unchanged. Only the placeholder values should be replaced with supplier-specific identifiers and endpoint information.
The Digital Twin descriptor contains the following main information
Description: a short description of the shell descriptor.
Digital Twin identifiers: the Digital Twin ID, Catena-X ID, and short ID.
Specific asset IDs: business and technical identifiers used to identify the part, such as customer part ID, part instance ID, manufacturer part ID, intrinsic ID, and manufacturer ID.
Lifecycle phase: the lifecycle status of the asset, such as AsBuilt.
Submodel descriptor: the technical link to the Battery Pass submodel that was created earlier.
EDC endpoint information: the EDC endpoint and DSP information needed to access the submodel through the dataspace.
{{dashboard_backend}} (pre-prod) | |
{{dashboard_backend}} (prod) | |
{{component_id}} | EDC Component ID |
{
"description": [
{
"language": "en",
"text": "Battery Passport shell descriptor"
}
],
"idShort": "Battery_{{PartInstanceId}}",
"id": "{{DigitalTwinId}}",
"globalAssetId":"{{Catena-XId}}",
"specificAssetIds": [{
"name": "customerPartId",
"value": "{{customerPartId}}",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "{{Partner_BPNL}}”
}
]
}
},
{
"name": "partInstanceId",
"value": "{{PartInstanceId}}",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "{{Partner_BPNL}}"
}
]
}
},
{
"name": "manufacturerPartId",
"value": "{{manufacturerPartId}}",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "{{Partner_BPNL}}"
}
]
}
},
{
"name": "digitalTwinType",
"value": "PartType",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "{{Partner_BPNL}}"
}
]
}
},
{
"name": "intrinsicId",
"value": "{{intrinsicId}}",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "{{Partner_BPNL}}"
}
]
}
},
{
"name": "manufacturerId",
"value": "{{manufacturerId}}",
"externalSubjectId": {
"type": "ExternalReference",
"keys": [
{
"type": "GlobalReference",
"value": "{{Partner_BPNL}}"
}
]
}
}
{
"name": "assetLifecyclePhase",
"value": "AsBuilt"
}
],
"submodelDescriptors": [
{
"endpoints": [
{
"interface": "SUBMODEL-3.0",
"protocolInformation": {
"href": "{{edc-url-without-api/v1/dsp}}/submodel",
"endpointProtocol": "HTTP",
"endpointProtocolVersion": [
"1.1"
],
"subprotocol": "DSP",
"subprotocolBody": "id={{asset_id}};dspEndpoint={{edc_url}}",
"subprotocolBodyEncoding": "plain",
"securityAttributes": [
{
"type": "NONE",
"key": "NONE",
"value": "NONE"
}
]
}
}
],
"idShort": "batteryPass",
"id": "{{submodel_id}}",
"semanticId": {
"type": "ExternalReference",
"keys": [
{
"type": "Submodel",
"value": "urn:bamm:io.catenax.battery.battery_pass:6.0.1#BatteryPass"
} ]} }]}
The placeholders in the request must be completed as follows:
{{dashboard_backend}}is the backend URL of the supplier’s dashboard or technical environment.{{component_id}}is the identifier of the component or product for which the Digital Twin is being created.{{PartInstanceId}}is the serial number of the part, as specified by the manufacturer. This may be applied to the part as a barcode, DMC, or similar identifier.{{DigitalTwinId}}is the unique identifier of the Digital Twin. Use the same Digital Twin ID used in the submodel. The value must be provided in UUIDv4 format.{{Catena-XId}}is the unique Catena-X identifier. The value must be provided in UUIDv4 format.{{customerPartId}}is the customer’s part or catalogue ID. This property is optional.{{intrinsicId}}is the unified technical key used to search for the Digital Twin of a part. In this case, thepartInstanceIdcan be used as the intrinsic ID.{{manufacturerPartId}}is the manufacturer’s part or catalogue ID.{{Partner_BPNL}}is the Business Partner Number of the business partner referenced in the asset identifier.{{manufacturerId}}is the supplier’s Business Partner Number, usually provided as a BPNL.{{edc_url}}is the endpoint URL of the supplier’s EDC. Example:https://data-exchange-connector-edc.dataspaceos.svc.cofinity-x.com/api/v1/dsp{{edc-url-without-api/v1/dsp}}is the supplier’s EDC endpoint URL without the/api/v1/dsppath at the end. Example:https://data-exchange-connector-edc.dataspaceos.svc.cofinity-x.com{{submodel_id}}is the identifier of the Battery Pass submodel created earlier.{{asset_id}}is the ID of the Battery Pass submodel asset created earlier.
After the request is submitted successfully, the expected sample response confirms that the Digital Twin shell descriptor has been created and linked to the Battery Pass submodel.
Expected Sample response:
6. Send and Receive Notifications
This section describes the processes for sending and receiving notifications between partners
6.1 Notification Process Flow
After the Battery Pass data has been created, published, and made available through the Catena-X dataspace, notifications are used to inform Henkel that relevant data is available or has been updated.
The notification process supports the exchange between the supplier and Henkel by allowing status updates, data availability messages, and feedback notifications to be sent through the agreed Catena-X and EDC-based process.
For the following notification steps, suppliers will need the correct Henkel EDC endpoint and Business Partner Number for the relevant environment.
Henkel environment details
Beta environment
BPN: BPNL00000000GPCG
Production environment
BPN: BPNL000000000GUC
Suppliers should use the Beta environment for testing and validation, and the Production environment only once the technical setup has been confirmed for productive data exchange.
6.2 Send Notifications
This section explains how suppliers send notifications to Henkel after Battery Pass data has been prepared or updated.
The notification allows Henkel to identify that data is available and to start the required discovery, contract negotiation, and data access steps through the EDC.
6.2.1 Architecture to Send Notifications
This section describes the architecture and process for sending notifications from suppliers to Henkel.
In this process, the supplier acts as the notification sender and Henkel acts as the notification receiver. The supplier uses its EDC to access the relevant Henkel notification asset and sends the notification through the agreed endpoint. The notification informs Henkel that Battery Pass data is available, updated, or ready for processing.
At a high level, the process includes the following steps:
Search Henkel’s catalogue to find the notification asset.
Start the EDR negotiation process for the notification asset.
Retrieve the EDR information needed to access the endpoint.
Use the transfer process details to obtain the required access information.
Push the notification message to Henkel.
Suppliers should follow the API steps in the sections below exactly and replace only the placeholder values with the correct environment, partner, and asset-specific information.
6.2.2 Catalog Search
This step searches the provider’s EDC catalog to find the notification asset that is used for Digital Twin event notifications. In this process, the supplier searches Henkel’s catalog so that the relevant notification asset can be identified before the EDR negotiation step.
Use the following API endpoint to request the catalog:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/catalog/request
The request uses the provider’s protocol endpoint and BPNL to query the correct EDC catalogue. The filter expression limits the search result to assets with the type DigitalTwinEventAPI, which is the asset type used for notification exchange.
Suppliers should keep the JSON structure and filter criteria unchanged. Only the placeholder values should be replaced with the correct endpoint and BPNL.
{
"@context": {
"dct": "http://purl.org/dc/terms/",
"edc": "https://w3id.org/edc/v0.0.1/ns/"
},
"protocol": "dataspace-protocol-http",
"counterPartyAddress": "{{PROVIDER_PROTOCOL_URL}}",
"counterPartyId": "{{PROVIDER_BPNL}}",
"additionalScopes": "org.eclipse.edc.vc.type:DataExchangeGovernanceCredential:read",
"querySpec": {
"@type": "QuerySpec",
"edc:offset": 0,
"edc:limit": 500,
"edc:filterExpression": [{
"@type": "Criterion",
"operandLeft": "'http://purl.org/dc/terms/type'.'@id'",
"edc:operator": "=",
"edc:operandRight": "https://w3id.org/catenax/taxonomy#DigitalTwinEventAPI"
}
]
}
}{
{PROVIDER_PROTOCOL_URL}}is the protocol endpoint URL of the provider’s Eclipse Dataspace Connector. Use the EDC endpoint URL provided by Henkel or the relevant business partner.{
{PROVIDER_BPNL}}is the Business Partner Number of the provider. Use the BPNL provided by Henkel or the relevant business partner.
Expected Sample response:
6.2.3 Initiate EDR Negotiation
This step starts the EDR negotiation for the notification asset identified in the catalogue search. The EDR negotiation is required before the supplier can access the endpoint used to send notifications to Henkel.
Use the following API endpoint to initiate the EDR negotiation:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/edrs
The request uses the provider’s EDC protocol endpoint, BPNL, policy ID, and asset ID from the catalogue search response. Suppliers should keep the JSON structure and policy conditions unchanged. Only the placeholder values should be replaced.
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/",
"edc": "https://w3id.org/edc/v0.0.1/ns/",
"tx": "https://w3id.org/tractusx/v0.0.1/ns/",
"tx-auth": "https://w3id.org/tractusx/auth/",
"cx-policy": "https://w3id.org/catenax/policy/",
"odrl": "http://www.w3.org/ns/odrl/2/"
},
"counterPartyAddress": "{{PROVIDER_PROTOCOL_URL}}",
"counterPartyId": "{{PROVIDER_BPNL}}",
"protocol": "dataspace-protocol-http",
"policy": {
"@id": "{{POLICY_ID}}",
"@type": "odrl:Offer",
"odrl:permission": {
"odrl:action": {
"@id": "odrl:use"
},
"odrl:constraint": {
"odrl:and": [
{
"odrl:leftOperand": {
"@id": "cx-policy:FrameworkAgreement"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "DataExchangeGovernance:1.0"
},
{
"odrl:leftOperand": {
"@id": "cx-policy:UsagePurpose"
},
"odrl:operator": {
"@id": "odrl:eq"
},
"odrl:rightOperand": "cx.circular.dpp:1"
}
]
}
},
"odrl:prohibition": [],
"odrl:obligation": [],
"odrl:assigner": {
"@id": "{{PROVIDER_BPNL}}"
},
"odrl:target": {
"@id": "{{ASSET_ID}}"
}
}
}
The placeholders in the request must be completed as follows:
{{EDC_URL}}is the base URL of the supplier’s EDC management API.{{PROVIDER_PROTOCOL_URL}}is the protocol endpoint URL of the provider’s Eclipse Dataspace Connector. Use the EDC endpoint URL provided by Henkel or the relevant business partner.{{PROVIDER_BPNL}}is the Business Partner Number of the provider. Use the BPN provided by Henkel or the relevant business partner.{{POLICY_ID}}is the policy ID copied from the catalogue search response.{{ASSET_ID}}is the asset ID obtained from the catalogue search response. Use the same asset ID returned for theDigitalTwinEventAPIasset.
After the request is submitted successfully, the expected sample response confirms that the EDR negotiation has been initiated.
Expected Sample response:
6.2.4 Query Cached EDRs
This step checks the cached EDR information for the contract negotiation created in the previous step. The query uses the contract negotiation ID to retrieve the related transfer process information.
Use the following API endpoint to query the cached EDRs:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/edrs/request
The request filters the cached EDRs by the contract negotiation ID returned from the Initiate EDR Negotiation step. Suppliers should keep the JSON structure unchanged and only replace the placeholder value.
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/"
},
"@type": "QuerySpec",
"filterExpression": [
{
"operandLeft": "contractNegotiationId",
"operator": "=",
"operandRight": "{{negotiation_id}}"
}
]
}The placeholder in the request must be completed as follows:
{{negotiation_id}}is the contract negotiation ID received from the previous step. Use the same negotiation ID returned by the Initiate EDR Negotiation request.
After the request is submitted successfully, the expected sample response should return the cached EDR information, including the transfer process ID needed for the next step.
Expected Sample response:
6.2.5 Get EDR with Transfer Process ID
This step retrieves the EDR data address using the transfer process ID from the cached EDR response. The response provides the access information required to send the notification.
Use the following API endpoint to get the EDR data address:
Method:GET
Endpoint: {{EDC_URL}}/management/v3/edrs/{{transferProcessId}}/dataaddress?auto_refresh=true
Since this is a GET request, the request body must be empty.
The placeholders in the request must be completed as follows:
{{EDC_URL}}is the base URL of the supplier’s EDC management API.{{transferProcessId}}is the transfer process ID from the response in the previous step.
After the request is submitted successfully, the expected sample response should return the data address details needed to access the notification endpoint.
Expected Sample response:
6.2.6 Push Notification
This step sends the notification message to Henkel. The notification informs Henkel that the supplier has created or updated the relevant Battery Pass technical objects, such as the submodel, submodel asset, and Digital Twin.
Use the EDC endpoint returned in the previous step to push the notification:
Method: POST
Endpoint: {{EDC_endpoint}}- Use the EDC endpoint of the consumer from the previous step (Get EDR with Transfer Process ID)
Notification format to be used:
The notification message must follow the format below. Suppliers should keep the overall JSON structure unchanged and only replace the placeholder values with their own identifiers, BPNL values, timestamps, and endpoint information.
The notification contains two main parts:
Header: message ID, context, timestamp, sender and receiver BPNL, feedback URL, and version.
Content: notification text and the list of events being reported to Henkel.
The list of events tells Henkel which technical objects were created or updated. In this sample, the notification reports the creation of the Battery Pass submodel, the EDC asset, and the Digital Twin.
{
"header": {
"messageId": "{{messageId}}",
"context": "IndustryCore-DigitalTwinEventAPI-SubmodelUpdate:3.0.0",
"sentDateTime": "{{sentDateTime}}",
"senderBpn": "{{manufacturerBPNL}}",
"receiverBpn": "{{Partner_BPNL}}",
"senderFeedbackUrl": "{{EDC_URL}}",
"version": "3.0.0"
},
"content": {
"information": "Created Submodel, Asset, Digital Twins for Battery Pass",
"listOfEvents": [
{
"eventType": "CreateSubmodel",
"catenaXId": "{{Submodel_id}}"
},
{
"eventType": "CreateAsset",
"catenaXId": "{{AssetID}}"
},
{
"eventType": "CreateDigitalTwin",
"catenaXId": "{{DigitalTwinId}}"
}
]
}
}The placeholders in the request must be completed as follows:
{{EDC_endpoint}}is the endpoint returned from the previous EDR data address step. This is the endpoint used to send the notification.{{messageId}}is the unique identifier of the message. The value must be provided in UUIDv4 format.{{sentDateTime}}is the date and time when the message was sent. The value must be provided in ISO 8601 date-time format.{{manufacturerBPNL}}is the supplier’s BPNL.{{Partner_BPNL}}is the Business Partner Number of the partner receiving the notification.{{EDC_URL}}is the supplier’s EDC endpoint URL used to receive feedback and communication messages.{{Submodel_id}}is the same submodel ID that was generated during the submodel creation process.{{AssetID}}is the same asset ID that was generated during the submodel asset creation process.{{DigitalTwinId}}is the same Digital Twin ID that was generated during the Digital Twin creation process.
After the request is submitted successfully, the expected sample response confirms that the notification has been sent.
6.3 Receive Notifications
This section explains how suppliers can receive feedback notifications from Henkel after Henkel has processed the notification sent by the supplier.
Feedback notifications allow the supplier to understand whether the notification was processed successfully or whether an issue occurred. This supports follow-up, troubleshooting, and confirmation that the Battery Pass data exchange process has completed as expected.
OEM-specific requirement: message broker for data-availability notifications
In addition to the Catena-X and Battery Pass requirements described in this document, Henkel requires each supplier to operate a system for receiving notifications from Henkel such as a message broker (for example Azure Service Bus, AWS SQS, or Apache Kafka) after Battery Pass data has been shared.
Please note that this is a Henkel-specific requirement. It is not defined by the Catena-X standards or the Battery Pass use case, and it is not needed for Catena-X conformity or certification. Data exchange itself continues to run through the Eclipse Dataspace Connector (EDC) as specified by Catena-X.
The supplier is responsible for providing, hosting and securing the message broker. Henkel will provide the connection details, message format and onboarding steps separately.
6.3.1 Architecture To Receive Notifications
This section describes the architecture and process for receiving feedback notifications from Henkel.
In this process, Henkel acts as the feedback notification sender and the supplier acts as the receiver. The supplier must expose a notification asset through its EDC so that Henkel can send feedback messages after processing the notification.
At a high level, the process includes the following steps:
The supplier creates an asset for receiving feedback notifications.
The supplier defines the access and usage conditions for this notification asset.
Henkel discovers and accesses the notification asset through the EDC.
Henkel sends a feedback notification to the supplier.
The supplier processes the feedback notification in its own technical environment.
6.3.2 Asset to receive feedback notifications
This step creates the asset that Henkel can use to send feedback notifications to the supplier.Use the following API endpoint to create the feedback notification asset:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/assets
The asset must be configured as a DigitalTwinEventAPI asset. This allows Henkel to identify it as the endpoint for Digital Twin event-related feedback notifications.
The dataAddress section is implementation-specific and depends on the messaging technology used by the supplier. Suppliers may use Azure Service Bus, AWS SQS, Kafka, or another supported transport mechanism. Suppliers should align this section with their own messaging and authentication setup before implementation.
The sample below shows one possible implementation using Azure Service Bus. Suppliers should keep the asset type, taxonomy reference, version, and content type aligned with the sample. The values inside dataAddress.properties must be adapted to the supplier’s own messaging and authentication setup.
{
"@id": "DigitalTwinEventAPI",
"properties": {
"name": " DigitalTwinEventAPI ",
"http://purl.org/dc/terms/type": {
"@id": "https://w3id.org/catenax/taxonomy#DigitalTwinEventAPI"
},
"https://w3id.org/catenax/ontology/common#version": "3.0",
"contentType": "application/json",
"id": "DigitalTwinEventAPI"
},
"dataAddress": {
"type": "HttpData",
"properties": {
"proxyPath": "false",
"oauth2:clientId": "xxxx",
"oauth2:tokenUrl": "xxxx",
"type": "HttpData",
"proxyMethod": "true",
"oauth2:clientSecret": "xxxx",
"oauth2:scope": "xxxxx",
"proxyQueryParams": "true",
"proxyBody": "true",
"baseUrl": "xxxxx"
}
}
}
6.3.3 Contract Definition for Feedback Notification Asset
This step defines the contract conditions for the feedback notification asset. The contract definition makes the notification asset available for access through the EDC under the agreed policy conditions.
The feedback notification asset can use the same policy approach as the Battery Pass submodel asset:
Access policy: the notification API asset can use the same access policy as the submodel asset.
Usage policy: the notification API asset can use the same usage policy as the submodel asset.
Contract definition: the contract definition links the feedback notification asset to the relevant access and usage policies.
Suppliers should keep the JSON structure unchanged and only replace the placeholder values with the correct identifiers.
{
"@context": {
"@vocab": "https://w3id.org/edc/v0.0.1/ns/"
},
"@type": "ContractDefinition",
"@id": "{{CONTRACT_DEFINITION_ID}}",
"accessPolicyId": "{{ACCESS_POLICY_ID}}",
"contractPolicyId": "{{USAGE_POLICY_ID}}",
"assetsSelector": [
{
"operandLeft": "https://w3id.org/edc/v0.0.1/ns/id",
"operator": "=",
"operandRight": "{{ASSET_ID}}"
}
] }The placeholders in the request must be completed as follows:
{{CONTRACT_DEFINITION_ID}}is the identifier of the contract definition. It can be specified as any unique value.{{ACCESS_POLICY_ID}}is the identifier of the access policy used for the feedback notification asset.{{USAGE_POLICY_ID}}is the identifier of the usage policy used for the feedback notification asset.{{ASSET_ID}}is the identifier of the feedback notification asset created in the previous step. This value must exactly match the asset ID used during asset creation.
After the request is submitted successfully, the expected sample response confirms that the contract definition for the feedback notification asset has been created.
6.3.4 Sample data set for Receiving notification
This section provides a sample feedback notification that may be returned by the receiving party after the notification request has been processed.
The feedback notification tells the sender whether the event was processed successfully or whether errors occurred. Each item in the response refers to a specific Catena-X ID and provides a processing status.
The response contains two main parts:
Header: message ID, context, timestamp, sender BPN, receiver BPN, and version.
Content: list of processed items, including the Catena-X ID, processing status, and status message.
The status value indicates the processing result:
OKmeans the event was processed successfully.ERRORmeans the event was processed with errors and may require follow-up.
Sample feedback notification returned by the recipient after successful processing of the notification request.
{
"header": {
"messageId": "urn:uuid:83738f3d-9441-4e53-bc7d-6092385d188f",
"context": "IndustryCore-DigitalTwinEventAPI-Feedback:3.0.0",
"sentDateTime": "2024-07-05T08:13:33.20733Z",
"senderBpn": "BPNL000000000YYY",
"receiverBpn": "BPNL00000000XXXX",
"version": "3.0.0"
},
"content": {
"listOfItems": [
{
"catenaXId": "urn:uuid:d32d3b55-d222-41e9-8d19-554af53124dd",
"status": "OK",
"statusMessage": "Event was processed successfully."
},
{
"catenaXId": "urn:uuid:d32d3b55-d222-41e9-8d19-554af53124dd",
"status": "ERROR",
"statusMessage": "Event was processed with errors."
}
]
}Note: The sample below shows two possible status outcomes. In a real response, the actual status will depend on the processing result for the submitted notification.
7. General Tests
This section explains how suppliers can test their EDC setup before exchanging Battery Pass data with Henkel.
7.1 Test your EDC with the Public Asset
To verify that the supplier’s EDC is working correctly, Cofinity-X provides a public test asset with open access and usage policies. Suppliers can use this public offer to test contract negotiation and data exchange before connecting to Henkel-specific assets.
Suppliers should use the appropriate endpoint for their environment.
Endpoint | |
BPN | BPNLCOFINITYEZFA |
Asset ID | 4caffb96-681e-4d4b-8353-628412d7192f |
Endpoint | |
BPN | BPNLCOFINITYEZFA |
Asset ID | ebc4f4c5-8657-4a62-9003-fd45208cb89c |
Suppliers should complete this test successfully before proceeding with productive Battery Pass data exchange.
8. Schema Structure Changes in CX-Saturn (0.11.x and 0.12.x)
Catena-X publishes its standards in coordinated releases. The original version of this guide was written for the CX-Jupiter release (versions 0.10.x and older). CX-Saturn went live on 25 November 2025 and changes several of the technical structures used in Sections 5 and 6. With the go-live of CX-Neptune (0.13.x), planned for 24 November 2026, Jupiter will be deprecated.
This section is not relevant if the supplier and Henkel will continue to use the older EDC versions (0.10.x and older).
This section summarizes how the request bodies and data structures in this guide change with CX-Saturn, i.e. version 0.11.x and 0.12.x.
8.1 Policy Definitions
Policies change the most between the two releases. Saturn EDCs (0.11.x to 0.12.x) are backward compatible, so an existing setup does not break when the EDC is upgraded.
Hence, this section is only relevant if the supplier will be exchanging data with Henkel Saturn EDC (0.11.x and 0.12.x). The supplier must then use policies in the CX-Saturn format shown below.
The endpoint for creating policies does not change:
Method: POST
Endpoint: {{EDC_URL}}/management/v3/policydefinitions
8.1.1 Access Policy (CX-Saturn)
This is the CX-Saturn equivalent of the access policies in Sections 5.2 and 5.6. It can also be used for the feedback notification asset in Section 6.3.3.
{
"@context": [
"https://w3id.org/catenax/2025/9/policy/odrl.jsonld",
"https://w3id.org/catenax/2025/9/policy/context.jsonld",
{
"@vocab": "https://w3id.org/edc/v0.0.1/ns/"
}
],
"@type": "PolicyDefinition",
"@id": "{{ACCESS_POLICY_ID}}",
"policy": {
"@type": "Set",
"permission": [
{
"action": "access",
"constraint": {
"and": [
{
"leftOperand": "Membership",
"operator": "eq",
"rightOperand": "active"
},
{
"leftOperand": "BusinessPartnerNumber",
"operator": "isAnyOf",
"rightOperand": "{{POLICY_BPN}}"
}
]
}
}
]
}
}Compared with the Jupiter version, note the following differences:
The
@contextnow references the Catena-X policy profile instead of defining thecx-policyandodrlprefixes.The action is
accessinstead ofodrl:use.BusinessPartnerNumberuses the operatorisAnyOf, and{{POLICY_BPN}}is placed inside a list. Several BPNLs can be listed if more than one partner should see the offer.
8.1.2 Usage Policy (CX-Saturn)
This is the CX-Saturn equivalent of the usage policy for the Battery Pass submodel asset in Section 5.6 and for the feedback notification asset in Section 6.3.3. For the dDTR usage policy in Section 5.2, use the same structure with the UsagePurpose cx.core.digitalTwinRegistry:1.
{
"@context": [
"https://w3id.org/catenax/2025/9/policy/odrl.jsonld",
"https://w3id.org/catenax/2025/9/policy/context.jsonld",
{
"@vocab": "https://w3id.org/edc/v0.0.1/ns/"
}
],
"@type": "PolicyDefinition",
"@id": "{{USAGE_POLICY_ID}}",
"policy": {
"@type": "Set",
"permission": [
{
"action": "use",
"constraint": {
"and": [
{
"leftOperand": "FrameworkAgreement",
"operator": "eq",
"rightOperand": "DataExchangeGovernance:1.0"
},
{
"leftOperand": "UsagePurpose",
"operator": "isAnyOf",
"rightOperand": "cx.circular.dpp:1"
}
]
}
}
]
}
}Contract definitions keep the structure shown in Section 5.2. Only the referenced accessPolicyId and contractPolicyId change to the IDs of the new Saturn policies.
8.2 Catalog Request and EDR Negotiation
When a supplier sends a notification to Henkel (Section 6.2), the catalog request and the EDR negotiation must use DSP 2025-1.
This section is only relevant if both the supplier and Henkel are using a Saturn EDC (0.11.x and newer). Further information will be communicated once Henkel upgrades their own EDC to a Saturn version.
In the catalog request in Section 6.2.2, only three parameters change; the querySpec filter for DigitalTwinEventAPI stays the same:
{
"@context": [
{
"@vocab":"https://w3id.org/edc/v0.0.1/ns/"
}
],
"@type": "CatalogRequest",
"counterPartyId": "{{PROVIDER_DID}}",
"counterPartyAddress": "{{PROVIDER_DSP_URL}}",
"protocol": "dataspace-protocol-http:2025-1",
"additionalScopes": "org.eclipse.edc.vc.type:DataExchangeGovernanceCredential:read",
"querySpec": {
"@type": "QuerySpec",
"offset": 0,
"limit": 500,
"filterExpression": [{
"operandLeft": "'http://purl.org/dc/terms/type'.'@id'",
"operator": "=",
"operandRight": "https://w3id.org/catenax/taxonomy#DigitalTwinEventAPI"
}
]
}
}{{PROVIDER_DSP_URL}} is the DSP 2025-1 endpoint of Henkel’s Saturn connector
{{PROVIDER_DID}} is Henkel’s DID.
These details will be provided once Henkel upgrades their EDC to a Saturn version.
The EDR negotiation in Section 6.2.3 changes as follows:
{
"@context": [
"https://w3id.org/catenax/2025/9/policy/context.jsonld",
"https://w3id.org/dspace/2025/1/odrl-profile.jsonld",
{
"@vocab": "https://w3id.org/edc/v0.0.1/ns/"
}
],
"@type": "ContractRequest",
"counterPartyAddress": "{{PROVIDER_DSP_URL}}",
"protocol": "dataspace-protocol-http:2025-1",
"policy": {
"@id": "{{POLICY_ID}}",
"@type": "Offer",
"assigner": "{{PROVIDER_DID}}",
"permission": [
{
"action": "use",
"constraint": {
"and": [
{
"leftOperand": "FrameworkAgreement",
"operator": "eq",
"rightOperand": "DataExchangeGovernance:1.0"
},
{
"leftOperand": "UsagePurpose",
"operator": "isAnyOf",
"rightOperand": "cx.circular.dpp:1"
}
]
}
}
],
"prohibition": [],
"obligation": [],
"target": "{{ASSET_ID}}"
},
"callbackAddresses": []
}{{POLICY_ID}} is the
@idof the offer in thehasPolicyfield of the catalogue response.{{ASSET_ID}} is the ID of Henkel’s
DigitalTwinEventAPIasset from the catalogue response.The
permissionblock must be an exact copy of the offer returned in the catalogue. If Henkel’s offer contains different constraints from those shown above, copy them as returned.
The subsequent steps, querying cached EDRs (6.2.4), retrieving the data address (6.2.5) and pushing the notification (6.2.6), are unchanged.
8.4 Assets and Data Models
Battery Pass semantic ID
The semantic ID must be written in exactly the same way in the submodel asset (Section 5.5) and in the submodel descriptor of the Digital Twin (Section 5.7). Use the following value in both places, without leading spaces:
urn:samm:io.catenax.battery.battery_pass:6.1.0#BatteryPass
Feedback notification asset
It needs a second contract definition that references the Saturn policies.
8.5 Migration Guide: CX-Jupiter to CX-Saturn
It is strongly recommended that EDCs be upgraded to at least Saturn version (0.11.x or 0.12.x) by 24 November 2026, because Jupiter versions are being deprecated.
In order to upgrade your EDC, follow the steps contained in this guide.
With the release of Neptune, further updates of this guide are expected.
9. Problem and Incident Management
If suppliers experience issues while using the Dataspace OS solution for this use case, they should contact the Cofinity-X Service Desk.
Service Desk Portal: https://servicedesk.jira.cofinity-x.com/
Email: [email protected]
When reporting an issue, suppliers should provide the following information:
a brief description of the problem;
the environment used, such as Beta, Pre-Production, or Production;
the relevant API endpoint or process step;
error messages, if available;
screenshots, if available;
the time and date when the issue occurred; and
any relevant request or response IDs, if available.
This information helps the support team investigate and resolve the issue more efficiently.
All reported incidents are handled according to their impact and priority. Suppliers will receive updates on the progress and resolution of their tickets as soon as possible.

