Validate — system conformance + coverage
The validate endpoint is the same engine the DPP Agent dashboard uses to score completeness against ESPR Base, CIRPASS-2, AGEC, TARIC, and the EN 18xxx-series system conformance checks.
Public, CORS-open — third-party validators, agent tools, and regulator-side conformance dashboards can call it.
GET form
GET /api/v1/validate?url=https://example.dpp.dppagent.com/01/0731…
Pulls the URL, parses the JSON / JSON-LD response, runs the checks.
POST form
POST /api/v1/validate
Content-Type: application/json
{
"dpp": {
"espr.pid.product_name": "Beosound Explore",
"espr.mfr.name": "B&O A/S",
"espr.eo.country": "DK"
},
"category": "electronics",
"schema": "espr-base"
}
POST is useful before you publish — you can score a DPP locally without making it public first.
Response
{
"schema": "espr-base",
"category": "electronics",
"coverage": {
"mandatory": { "filled": 12, "total": 15, "pct": 80 },
"encouraged": { "filled": 8, "total": 20, "pct": 40 }
},
"missing": {
"mandatory": [
{ "key": "espr.eo.address", "tier": "M", "reason": "ESPR Art 7(2)" }
],
"encouraged": [
{ "key": "ict.energy.eu_efficiency_class", "tier": "E" }
]
},
"system_conformance": {
"en_18216_content_negotiation": "pass",
"en_18219_url_stability": "pass",
"en_18220_lifecycle_states": "pass",
"en_18221_backup_host": "warn",
"details": "EN 18221 §4.5 replication not configured"
},
"regulation_overlays": {
"agec": { "applicable": false, "reason": "non-FR market" },
"taric": { "applicable": true, "filled_pct": 100 }
}
}
Tier semantics
M = mandatory. Missing means the DPP is non-compliant for sale
in the EU.
E = encouraged. Missing means the DPP is legally publishable but
not best-practice.
O = optional. Missing has no compliance impact.
Tier assignment comes from the schema (espr-base for the universal
core, plus per-category overlays).
Cross-scheme alternatives
The engine accepts equivalent keys across namespaces. For example,
espr.pid.product_name and tex.pid.product_name and
bat.pid.product_name all satisfy the same mandatory slot — useful
when migrating from legacy keys without breaking validation.
Use from a third-party agent
CORS allows arbitrary origin. Pattern is:
const r = await fetch('https://dppagent.com/api/v1/validate?url=' + encodeURIComponent(passportUrl));
const report = await r.json();
No auth required.