Free, no account
Many claim to be able to generate a DPP. The question is whether it holds.
One HTTP request measures any Digital Product Passport against the six published EN standards — yours, a supplier's, a competitor's. It fetches the passport, negotiates content the way EN 18216 requires, and scores the data it gets back.
Example
A published passport, measured
Lindex publishes a passport for this jacket. Below is what the validator returned for it, in full.
# Measured 7 September 2026
curl "https://dppagent.com/api/v1/validate?url=https://lindex.dpp.dppagent.com/01/07314781685466/21/003"
Standards
- PASS EN 18219 §5.2 URL is a parseable GS1 Digital Link — valid path, and the GTIN satisfies its check digit.
-
PASS
EN 18216 §5
Machine-readable JSON via content negotiation
— server returned JSON on
Accept: application/json. - PASS EN 18220 §5.2 The data carrier target resolves to a passport — resolver responded 2xx.
-
PASS
EN 18219 §5.2 · linkset
?linkType=allreturns a GS1 linkset — six link types served, including gs1:dpp and gs1:sustainabilityInfo. -
PASS
EN 18221 §4.5
A back-up host is advertised
—
Link rel="backup"present, so the passport outlives its publisher. - PASS EN 18223 §4.1.2.1 Every mandatory header attribute is present — granularity, schema version, last updated, economic operator.
-
PASS
EN 18222 §4.1
The three mandatory Life Cycle API methods answer
—
ReadDPPById,ReadDPPByProductIdandReadDPPIdsByProductIdsat/api/v1/. - PASS EN 18246 §4.3 Public passport data needs no login — served to an anonymous request with no credentials.
-
PASS
EN 18246 §5.4.2
Readable on any consumer device
— served as
text/html, no app to install. - PASS EN 18246 §5.1.2 / §5.1.5 Nobody is tracked for reading it — no third-party tracking hosts on the served page.
Fields present
- Unique Product Identifier
- GTIN
- Product Name
- Economic Operator Name
- Economic Operator Country
- Economic Operator Identifier
- Economic Operator Role
- Manufacturer Name
- Manufacturer Identifier
- Country of Manufacture
- Material Composition
- Substances of Concern
Missing
- Commodity Code (TARIC)
- Concentration Levels
- Substance Location
- Care Label Symbols
Four fields, and the same four turn up on most textile catalogues.
Recommendations
- 1 Add the commodity code. A shell jacket sits at CN heading 6201. The code is a classification anyone can check against the tariff rather than a claim, so it is the cheapest of the four to fill.
- 2 Complete the substances declaration. The passport declares no substances of concern, which is an answer, but concentration and location are separate fields and both are blank. A declaration of none should say none to all three rather than leaving two empty.
- 3 Add ISO 3758 care symbols. The passport carries care instructions as sentences — machine wash 30°, dry in a drying cabinet at low temperature. The symbol set is a separate field, and it is the one a machine and a non-Swedish reader can both use.
- 4 Nothing to do on the system side. All ten clause checks pass and all seven header attributes are present. That half is the platform's responsibility and it is done. The four gaps above are catalogue data.
Measured 7 September 2026 and written into this page as a snapshot. Run it again with the field below and compare.
Your turn
Validate your own
Paste any passport URL. No account, and it works on passports published by anyone — the validator has no idea whose platform it is looking at.
Available now
The endpoint
GET https://dppagent.com/api/v1/validate?url=<passport-url>
returns a grade, the clause checks, the passport-header score under
EN 18223 Table 1, and how many mandatory ESPR fields are
populated. CORS is open, so a browser can call it directly.
Without a key
The grade, every clause check, the counts, and the three most important gaps named the way a person would say them — "Commodity Code (TARIC)", not an internal key. Sixty calls an hour.
With a key
Every field we score against, each with its citation, the header broken out attribute by attribute, and coverage across more than one passport. A free account issues a key.
Why the full list needs a key
The full list names every field we score against and the clause behind each one. That is the field specification, and it took months of reading standards to put together. A brand checking its own passport needs to know it is missing four fields and which three matter. The list with a citation per field is what you would need to build your own checker, and that is the part behind a key.
Not open yet
The same tools, inside your assistant
Filling in a passport means finding forty or so facts scattered across a PIM, a supplier's spreadsheet and an emailed certificate. That is searching, and people already do their searching in Claude, ChatGPT and Cursor.
An MCP server will put these tools there: read the catalogue, propose mappings with a visible source, say what is still missing. Anything that would be published goes back to a person first. It is not accepting connections yet.
Boundaries
What this is not
- —Not a schema library. The schemas live in DPP Agent, attached to real rows.
- —Not a second validator. There is one. It runs on the platform that holds the data, and this domain is a shorter way to reach it.
- —Not a way around the admin. Anything that changes what the world sees passes a person in DPP Agent.
- —Not a customer list. The passport above is measured, not endorsed, and it is measured because it is published.