---
title: "Registry-readiness preflight for one passport."
method: GET
path: "/api/v1/passports/{id}/registry-readiness"
tags: ["Passports"]
---

# Registry-readiness preflight for one passport.

`GET /api/v1/passports/{id}/registry-readiness`

## Request

- Base URL: `https://app.tracepass.eu`
- URL: `https://app.tracepass.eu/api/v1/passports/{id}/registry-readiness`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://app.tracepass.eu/api/oauth/authorize`, token URL `https://app.tracepass.eu/api/oauth/token`, scopes: `passports:read`)

Returns whether a passport would pass the **EU DPP Registry's
formal submission gate** — `{ ready, findings[] }`. This is the
registry's *mechanical* pre-submission check, distinct from and
complementary to the substantive `/compliance` verdict: a
passport can be registry-ready yet not substantively compliant,
and vice-versa.

Five formal checks, each carried on the standard
`ComplianceFinding` shape with a `REG-READY-*` `ruleId`:
- **`REG-READY-MANDATORY`** — every mandatory field that applies
  to this battery type is present and approved (applicability-aware:
  a field that is not applicable to the battery's category is not
  counted as missing; an `unknown`-applicability field surfaces as
  a warning, not a block);
- **`REG-READY-FORMAT`** — filled fields are well-formed
  (types, enums, patterns, ranges);
- **`REG-READY-LINK`** — the passport's public link resolves
  (a live probe; on an unpublished passport this is an advisory
  warning rather than a block);
- **`REG-READY-GRANULARITY`** — the passport carries a serial
  number, since batteries register at item-level granularity
  (a missing serial is a block);
- **`REG-READY-COMMODITY`** — the product's commodity code
  (CN/TARIC) is well-formed where the category carries one; for
  batteries, which carry no commodity code, this is an advisory
  warning only, never a block.

`ready` is `true` only when there are zero critical findings.
**Battery passports only** in this version; a non-battery passport
returns `ready: true` with a single `REG-READY-SCOPE` warning.

Read-only; counts as one v1 passport read against the daily cap.

## Response `200`

Registry-readiness result.

- RegistryReadinessResult: Whether a passport would pass the EU DPP Registry's formal submission gate. Distinct from the substantive ComplianceVerdict.
  - `ready` boolean, required: True only when there are zero critical findings — i.e. the passport would pass the registry's formal gate.
  - `findings` ComplianceFinding[], required: Formal-gate findings, each with a REG-READY-* ruleId (REG-READY-MANDATORY / REG-READY-FORMAT / REG-READY-LINK / REG-READY-GRANULARITY / REG-READY-COMMODITY / REG-READY-SCOPE). Critical findings block readiness; warnings do not.
    - `type` 'missing_field' | 'unapproved_field' | 'missing_party' | 'invalid_format' | 'conditional_missing' | 'unverifiable_conditional', required
    - `severity` 'critical' | 'warning', required
    - `target` string: Field key or party role this finding concerns.
    - `regulation` string: Regulation number, e.g. "(EU) 2023/1542".
    - `article` string: Article / annex citation, e.g. "Art. 77".
    - `ruleId` string: Rule id from the verified spec (e.g. "BAT-1", "CC-1").
    - `why` string, required: One-line explanation of why this matters.
    - `fix` string: One-line actionable next step.

## Other responses

- `401`: Missing or invalid API key.
- `404`: Resource doesn't exist or is in a different workspace.
- `429`: Daily v1 write or passport-read budget exhausted. Resets at 00:00 UTC.

---

[API](https://skmtc.dev/tracepass/apis/tracepass-api.md) · [All operations](https://skmtc.dev/tracepass/apis/tracepass-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tracepass/apis/tracepass-api/revisions/60ddeb25638b?raw)
