TracePass
DPP scope check

Get catalogue scope report

Returns the catalogue scope report: for every product (and every distinct passport fact set), whether the product type needs a Digital Product Passport, from when, at which level, the governing act and article, and the passport status (`missing`, `draft_only`, `published_incomplete`, `published`, `not_required`, `open_questions`, or `not_covered`). The full answer for any item is `POST /api/v1/scope/check` with its `productId`.

GET/api/v1/scope/catalogue
Download OpenAPI 3.1
GET/api/v1/scope/catalogue

Get catalogue scope report

Returns the catalogue scope report: for every product (and every distinct passport fact set), whether the product type needs a Digital Product Passport, from when, at which level, the governing act and article, and the passport status (`missing`, `draft_only`, `published_incomplete`, `published`, `not_required`, `open_questions`, or `not_covered`). The full answer for any item is `POST /api/v1/scope/check` with its `productId`.

Requires Growth or higher (`scopeCatalogueEnabled`). Below that tier, the endpoint returns 403 `plan_upgrade_required`. One read on the daily read cap per page (same counter as `GET /api/v1/passports`). Results come from the last finished run; call `POST /api/v1/scope/catalogue/runs` to refresh.

Query parameters: `classification` (one of the status values), `category` (template category slug), `act` (CELEX code, e.g. `32023R1542`), `changed=true` (only rows changed since the last run), `q` (free-text search on product name or GTIN), `cursor` (opaque string from `nextCursor`), `limit` (1–500, default 50). Response: `{ run, totals, items, nextCursor, disclaimer }`.

Query parameters

  • classification

    string

    Filter by passport status: `missing`, `draft_only`, `published_incomplete`, `published`, `not_required`, `open_questions`, or `not_covered`.

  • category

    string

    Filter by product category slug (e.g. `battery`, `textile`).

  • changed

    boolean

    When `true`, return only rows changed since the last run.

  • cursor

    string

    Opaque cursor from the previous page's `nextCursor` field.

  • limit

    integer (1–500)

    Page size (default 50, maximum 500).

Headers

  • Authorizationrequired

    string

    `Bearer <token>` — either a `tp_` 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/scope/catalogue?classification=missing&limit=50" \
  -H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx"

Response

{
  "run": { "id": "6acbb533c5553f06d833479e", "finishedAt": "2026-10-11T16:11:31.619Z", "rulesFingerprint": "86a23cce6480bffb91d360b7a199b473" },
  "running": null,
  "totals": {
    "rows": 1,
    "byClassification": { "missing": 0, "draft_only": 0, "published_incomplete": 0, "published": 0, "not_required": 0, "open_questions": 1, "not_covered": 0 },
    "tiles": { "now": 0, "later": 0, "waiting": 0, "not_required": 0, "depends": 1, "not_covered": 0, "changed": 0 }
  },
  "items": [
    {
      "productId": "6acbb529ef6a5037c63fff80",
      "productName": "e2e-fixture product",
      "category": "battery",
      "gtin": "09506000E2EFIX",
      "passportIds": ["6acbb529ef6a5037c63fff81"],
      "passportCount": 1,
      "publishedCount": 1,
      "summary": { "status": "needs_input", "inScope": "depends", "governing": { "celex": "32023R1542" }, "alsoApplies": [], "openQuestions": ["battery.sealed", "battery.weightKg", "battery.capacityKWh", "battery.use", "battery.vehicleCategory"], "ruleStatus": "verified" },
      "classification": "open_questions",
      "changed": false,
      "changedAt": null
    }
  ],
  "nextCursor": null,
  "disclaimer": "Regulatory information as of 9 Oct 2026, not legal advice. Check the cited articles before relying on it. — TracePass"
}