Get a product's passport
const url = 'https://api.listrar.com/v1/products/example/dpp';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.listrar.com/v1/products/example/dpp \ --header 'Authorization: Bearer <token>'The latest non-superseded claim per predicate, plus the latest verdict per validation class (technical, business, regulatory, authority — never collapsed into one score). claims carries the evidence-bearing truth and data.attributes is a convenience projection of it. Read-only: does not trigger a live fetch, so not_found means nothing has been ingested for this identifier, not that no passport exists anywhere.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”The persisted passport view, or a typed absence.
object
Typed result status. Absence (‘not_found’, ‘unknown’) is an answer carried at HTTP 200, never a 404 — see ERROR_MODEL.md design rule 1. ‘not_found’ MUST NOT be softened (06 §9).
REQUIRED when status = ‘unknown’.
object
object
INFERENCE and ESTIMATION can never be promoted to FACT. See 10 §3.
REQUIRED for INFERENCE and ESTIMATION
object
object
What was actually consulted, so a caller can distinguish ‘does not exist’ from ‘not covered’. Present on absence and on batch responses.
object
object
Opaque cursor for the next page; absent means end of results. Cursor pagination only, never offset.
Up to four independent axes, never collapsed into one verdict (12 §5). A class is absent when no rule of that class has been evaluated for this subject — which is not the same as ‘not_assessed’, a recorded verdict.
object
object
object
Example
{ "status": "found", "reason": "NO_SOURCE", "claims": [ { "subject": "gtin14:04012345678901", "predicate": "dpp:carbonFootprintKgCO2e", "claim_type": "FACT", "verification_status": "unverified", "trust_level": "L0" } ], "sources": [ { "kind": "registry" } ], "meta": { "coverage": { "sources_skipped": [ { "reason": "LICENCE_RESTRICTED" } ] } }, "validation": { "technical": "pass", "business": "pass", "regulatory": "pass", "authority": "none" }, "warnings": [ { "severity": "info" } ]}Headers
Section titled “Headers”Echoes the envelope’s request_id.
INVALID_IDENTIFIER
object
Examplegenerated
{ "type": "https://example.com", "title": "example", "status": 1, "code": "example", "detail": "example", "request_id": "example", "retryable": true, "docs_url": "https://example.com"}UNAUTHENTICATED
object
Examplegenerated
{ "type": "https://example.com", "title": "example", "status": 1, "code": "example", "detail": "example", "request_id": "example", "retryable": true, "docs_url": "https://example.com"}TENANT_QUOTA_EXCEEDED
object
Examplegenerated
{ "type": "https://example.com", "title": "example", "status": 1, "code": "example", "detail": "example", "request_id": "example", "retryable": true, "docs_url": "https://example.com"}RATE_LIMITED
object
Examplegenerated
{ "type": "https://example.com", "title": "example", "status": 1, "code": "example", "detail": "example", "request_id": "example", "retryable": true, "docs_url": "https://example.com"}INTERNAL_ERROR
object
Examplegenerated
{ "type": "https://example.com", "title": "example", "status": 1, "code": "example", "detail": "example", "request_id": "example", "retryable": true, "docs_url": "https://example.com"}