Battery passport
The battery passport is the EU's first product passport that is mandatory in practice: it comes not from the ESPR but from the separate battery regulation ((EU) 2023/1542), and it applies from 18 February 2027 to EV, light means of transport (LMT) and industrial batteries above 2 kWh. This page lists no promises — only what we measured.
Who does it apply to?
The 2 kWh threshold applies only to industrial batteries. Many summaries write "EV above 2 kWh" — that is misleading, and it matters exactly for the smaller drivetrains.
The dates you have to meet
- Battery passport becomes mandatory For EV, LMT and industrial batteries above 2 kWh. Directly applicable in all 27 member states, with no national transposition.
- Supply chain due diligence obligations Postponed to this date by Regulation (EU) 2025/1561.
- Recycled content declaration Cobalt, lead, lithium, nickel — for EV, SLI and industrial batteries above 2 kWh.
- Mandatory recycled content minimums Cobalt 16%, lead 85%, lithium 6%, nickel 6%.
The carbon-footprint declaration is staggered by battery type, but the delegated act on the calculation method is delayed — the actual start moves with it. 18 February 2027 does not move: there is no "whichever is later" clause.
What do the 11 tests check?
The suite does not inspect an uploaded file: it calls the running system back over the network and measures whether it behaves as the standard requires. You cannot pass it with a well-formed sample file.
| Test | What it measures | Result |
|---|---|---|
BringBatteryToMarket | Placing on the market | ✓ |
ReadDPP_ByIdReturnsDPP | Read by passport ID | ✓ |
ReadDPP_ByProductIDReturnsActiveVersion | Read by product ID — returns the active version | ✓ |
ReadDataElement | Read a single data element | ✓ |
ReadDPP_AccessRightsFilteredCorrectly | Access rights filter correctly | ✓ |
ReadDPP_ArchivedOrDeletedDPP | Withdrawn or archived passport | ✓ |
UpdateDPPById | Update the whole passport | ✓ |
UpdateDataElement | Update a single data element | ✓ |
UpdateDataElement_AddAttribute | Add an attribute | ✓ |
UpdateDataElement_DeleteAttribute | Delete an attribute | ✓ |
UpdateDPPById_RoleWithoutUpdatePermission | Rejecting an unauthorised write | ✓ |
Coverage of the official data model
A green validator proves nothing on its own: it stays green even when half the fields are missing — a schema checks what is there, not what was left out. So we walked every leaf field of the official EV model and checked how many we can actually emit.
| Leaf fields in the official JTC24 EV model | 211 |
| What our export emits | 210 all that are mappable |
| Deliberately not mapped | 1 |
The single omitted field is dppHeader.contentSpecificationIds: neither the schema nor the official sample document defines its format. We do not send an invented identifier — in a passport, a guess is worse than a gap.
Where is the weight? — the same measurement, by data group
The "210 fields" are not spread evenly, and that is what makes preparation hard: over 40% of them sit in the performance and durability block, which comes from the BMS and the production line, not from master data.
The bar shows the field count, not a percentage — coverage is complete in every group, apart from the single deliberately omitted header field.
Emitted profiles
JTC24 is not a single data model: each category has its own specification, and the validator asks you to pick one. We emit all of them:
EV Feb27 2.0.1LMT Feb27 2.0.1Industrial Without BMS Feb27 2.0.1Stationary Industrial Above 2k Wh Feb27 2.0.1Other Industrial Above 2k Wh Feb27 2.0.1
What a real document looks like
Not an illustration: the excerpt below was produced by the same exporter our live passports and the conformance suite use — from our public demo battery, in the official JTC24 shape. Download it and open it in the official validator.
{
"dppHeader": {
"dppSchemaVersion": "2.0.1",
"lastUpdated": "2026-09-01T09:00:00Z",
"uniqueProductIdentifier": "https://id.gs1.org/01/4001234567785/21/VE60-000418",
"digitalProductPassportId": "urn:veridyn:dpp:demo-ev-60",
"granularity": {
"dppGranularityValue": "item"
},
"dppStatus": {
"dppStatusValue": "active"
},
"economicOperatorId": "https://id.gs1.org/417/4001234500805",
"facilityId": "https://id.gs1.org/414/4260123456796"
},
"batteryPassportData": {
"identifiersAndProductData": {
"batteryModelIdentifier": "VER-EV-60",
"economicOperatorInformation": {
"registeredTradeNameOrRegisteredTrademark": "Vertu Energy",
"name": "Vertu Energy GmbH",
"postalAddress": "Industriestraße 5, 80333 München",
"eMailAddress": "[email protected]",
"webAddress": "https://vertu-energy.example"
},
"batteryCategory": {
"batteryCategoryValue": "electric vehicle battery"
},The two files differ, and that is the point: the Feb27 profile is the narrower set binding from 18 February 2027 (130 values), while the full model also carries the carbon-footprint and supply-chain blocks (221 values). If a provider shows you a "JTC24-compatible" file, it is worth asking which one.
See it for yourself
Our public demo battery has a real, working passport: the page shows the public level, and the BatteryPass (JTC24) format downloads from the badge — exactly the JSON the conformance suite reads. The button opens the same unit (#418) that the sample document above describes.
How does a factory connect it?
A battery plant does not fill in spreadsheets: the data sits in the ERP and the MES. Three steps:
- Sandbox test account — with its own API key, isolated from live data. Test passports are marked, and no call with legal effect (registry notification) is made from there.
- Bulk load — from a single API call (up to 500 products per request, with a per-row report), or from a file: CSV, Excel, JSON, XML.
- Standards-based machine interface — the endpoints of the CEN-CENELEC JTC 24 lifecycle API (EN 18222), the same ones the conformance suite calls.
A battery passport does not stop at placing on the market: SoH, cycle count and remaining capacity are live data refreshed from the BMS. Unit-level passports can therefore be updated in bulk — up to 500 per call, addressed by the serial numbers used in production. Rows that did not change create no new version, so the change history stays readable.
What matters beyond compliance
- Version history with a hash chain — every version gets a cryptographic fingerprint, so a later change is detectable. The data can be exported at any time.
- Layered access — besides the public level there are legitimate-interest and authority levels, with expiring, revocable links. Non-public fields never appear on the public page.
- The QR is a standard GS1 Digital Link — the identifier belongs to the product, not to the provider, and the data can be exported at any time. Serving from your own domain is in preparation; today every QR encodes veridyn.eu.
- 24 EU languages — the passport labels appear in the visitor's language, with no separate translation work.
What to ask any provider
These are not rhetorical questions — we could only answer them after measuring: which profile does it emit, how many fields of the official model, does it pass the conformance suite with a live system, and what happens if you want to switch. The detailed answers are in our write-up.