/api/v1/passports/{id}/complianceCheck passport compliance
Returns a three-tier compliance verdict for one passport — `compliant`, `compliant_with_warnings`, or `incomplete` — together with regulation-cited findings, so an integration can gap-check a passport, fix the cited gaps, then call again to confirm. That read → fix → verify loop is the point: the response tells an agent exactly what to set next.
Findings come from three tiers. **Static**: required template fields that are missing or unapproved, and required economic-operator parties that aren't set, are `critical`; field values that violate the template's format (pattern / enum / bounds) are `warning`. **Conditional**: per-category rules that are in force today — the battery passport scope under Regulation (EU) 2023/1542 Art. 77, SVHC disclosure under REACH Art. 33 / SCIP, the Declaration of Performance under Regulation (EU) 2024/3110 — plus the cross-cutting rule that a product placed on the EU market by a non-EU manufacturer needs an EU-established operator (Regulation (EU) 2019/1020 Art. 4).
**Read `conditionalCoverage`.** It is `evaluated` when conditional rules ran for this category, or `static-only` when no binding conditional rule is in force yet (8 of the 12 categories today). When it is `static-only`, the absence of conditional findings does NOT mean the category has no future requirements — only that none are legally binding yet. A finding tagged `unverifiable_conditional` means a rule applies but the data needed to evaluate it (e.g. battery category, SVHC content) isn't on the passport — verify it manually. Read-only; counts as one v1 passport read against the daily cap.
Path parameters
- idrequired
ObjectId
Passport ID.
Headers
- Authorizationrequired
string
`Bearer <api-key>`.
Request
curl -sS \
https://app.tracepass.eu/api/v1/passports/6650b2c3d4e5f6a7b8c9d0e1/compliance \
-H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx"Response
{
"verdict": "incomplete",
"category": "battery",
"conditionalCoverage": "evaluated",
"critical": [
{
"type": "conditional_missing",
"severity": "critical",
"target": "batteryUniqueIdentifier",
"regulation": "(EU) 2023/1542",
"article": "Art. 77",
"ruleId": "BAT-1",
"why": "This is an in-scope battery (EV); a battery passport with its unique identifier is mandatory.",
"fix": "Provide batteryUniqueIdentifier — the battery passport's unique identifier (GS1 Digital Link)."
}
],
"warnings": [],
"checkedRules": ["static:required-fields", "static:required-parties", "static:format", "BAT-1", "CC-1"],
"completionPercentage": 72
}