---
title: Get catalogue scope report
description: Get the catalogue scope report — for every product, whether it needs a DPP, from when, and the passport status. Growth and up.
canonical: "https://www.tracepass.eu/docs/scope-catalogue"
locale: en
source: "https://www.tracepass.eu/docs/scope-catalogue"
---

# Get catalogue scope report

> Get the catalogue scope report — for every product, whether it needs a DPP, from when, and the passport status. Growth and up.

```http
GET /api/v1/scope/catalogue
```

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 }`.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Authorization` | header | string | yes | `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. |
| `classification` | query | string | no | Filter by passport status: `missing`, `draft_only`, `published_incomplete`, `published`, `not_required`, `open_questions`, or `not_covered`. |
| `category` | query | string | no | Filter by product category slug (e.g. `battery`, `textile`). |
| `changed` | query | boolean | no | When `true`, return only rows changed since the last run. |
| `cursor` | query | string | no | Opaque cursor from the previous page's `nextCursor` field. |
| `limit` | query | integer (1–500) | no | Page size (default 50, maximum 500). |

## Examples

```bash
curl -sS "https://app.tracepass.eu/api/v1/scope/catalogue?classification=missing&limit=50" \
  -H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx"
```

```typescript
const res = await fetch(
  "https://app.tracepass.eu/api/v1/scope/catalogue?classification=missing&limit=50",
  { headers: { Authorization: `Bearer ${process.env.TRACEPASS_API_KEY}` } },
);
const { run, totals, items, nextCursor } = await res.json();
```

```python
import os, requests
resp = requests.get(
    "https://app.tracepass.eu/api/v1/scope/catalogue",
    headers={"Authorization": f"Bearer {os.environ['TRACEPASS_API_KEY']}"},
    params={"classification": "missing", "limit": 50},
)
data = resp.json()
```

## Responses

### 200 — Catalogue report page

```json
{
  "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"
}
```

### 403 — Plan upgrade required

```json
{ "error": "plan_upgrade_required", "feature": "scopeCatalogueEnabled", "message": "The catalogue scope check is available from the Growth plan." }
```

## Related

- [POST Check DPP scope](https://www.tracepass.eu/docs/check-scope.md)
- [POST Start catalogue run](https://www.tracepass.eu/docs/start-catalogue-run.md)
