DPP Agent docs

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.