/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 — the battery passport scope under Regulation (EU) 2023/1542 Art. 77(1) (a warning until the obligation applies on 18 February 2027, critical from then), battery field applicability, the Declaration of Performance under Regulation (EU) 2024/3110, and CE-marking consistency — 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).
byRegulation groups the same findings by the regulation that raised them, worst first, so one REACH gap does not read as "the DPP obligation is unmet" when it is fully met. It is derived from the findings above and never contradicts verdict — the rolled-up verdict stays authoritative for publishing. A regulation absent from the array raised no finding, which is NOT the same as it having passed: only regulations that produced a finding appear. Findings carrying no regulation are grouped under unattributed rather than dropped.
Read conditionalCoverage. It is evaluated when conditional rules ran for this category, or static-only when no binding conditional rule is in force yet. 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. A finding tagged inconsistent_values is a warning that values on the passport contradict each other, for example a battery's energy against its nominal voltage × rated capacity, or a resistance of 0. Check the field named in target first. Read-only; counts as one v1 passport read against the daily cap.
Path parameters
- idrequired
string (24 hex chars)
Passport ID.
Headers
- Authorizationrequired
string
Bearer <token>— either atp_API key (Developer → API Keys; simplest, for server-to-server) or an OAuth 2.0 access token (Developer → OAuth Apps; for user-authorized apps, scoped + revocable). The Authentication page has the full OAuth flow and scope list.e.g. Bearer tp_REDACTED_xxxxxxxxxxxx
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(1)",
"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", "BAT-APP", "BAT-VAL", "CE-1", "CC-1"],
"completionPercentage": 72,
"byRegulation": [
{
"regulation": "(EU) 2023/1542",
"verdict": "incomplete",
"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": []
}
]
}