TracePass
DPP scope check

Check DPP scope

Returns a structured regulatory answer for a product type: whether it needs a Digital Product Passport, from when, at which level (item or model), the governing act and article, the duties of the requesting party's role, which other acts also apply, and any open questions that must be answered before a definitive verdict can be given. Every answer names the article it rests on, or says when our rules do not cover the product.

POST/api/v1/scope/check
Download OpenAPI 3.1
POST/api/v1/scope/check

Check DPP scope

Returns a structured regulatory answer for a product type: whether it needs a Digital Product Passport, from when, at which level (item or model), the governing act and article, the duties of the requesting party's role, which other acts also apply, and any open questions that must be answered before a definitive verdict can be given. Every answer names the article it rests on, or says when our rules do not cover the product.

Available on every plan, Free included. Not counted against the v1 daily read or write caps. A per-company answer cap applies instead: about 100 answers per day and 30 per minute, shared across all channels (dashboard, API, MCP). The cap resets on a rolling 24-hour window; `resetAt` gives the exact next-reset timestamp. The answer is about a product type described by facts — it is regulatory information, not legal advice.

Pass `productId` or `passportId` to pre-fill facts from the product's saved answers and the passport's field values (company-scoped; 404 if it belongs to another company). The `locale` field controls the language of the answer text (`en`, `bg`, `de`, `it`); it defaults to the `Accept-Language` header or `en`. Add `"X-Source: mcp"` to log the answer under the `mcp` channel.

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

Body fields

  • category

    string

    Product category key — `battery`, `textile`, `electronics`, `furniture`, `detergents`, `paints-coatings`, `packaging`, `toys`, `fmcg`, `tyres`, `steel`, `construction`, `jewelry`, `vehicles`, or `other`. The full list is the extraction-core `categories.yaml` keys plus `other`; `vehicles` is in scope (End-of-Life Vehicles Regulation) but has no passport template.

    e.g. battery

  • facts

    object

    Known product facts as key–value pairs. Keys are act-namespaced (e.g. `battery.use`, `battery.capacityKWh`). The allowed keys and value types are generated from the loaded rules; unknown keys or out-of-range values return 400 `invalid_input`.

  • role

    string

    Your role in the act's own terms: `manufacturer`, `importer`, `distributor`, `authorised_representative` or `fulfilment_service_provider`. Selling under your own name is `manufacturer` with the fact `ownBrand: true`. Decides which duties are listed as yours. Defaults from the company profile; with no role, the answer lists every role's duties.

  • locale

    string

    Response language — `en`, `bg`, `de`, or `it`. Defaults to the `Accept-Language` header value, then `en`.

    e.g. en

  • productId

    string

    Pre-fill facts from this product's saved scope answers (`products.scopeFacts`). Must belong to your company; returns 404 otherwise.

  • passportId

    string

    Pre-fill facts from this passport's field values and the product's saved answers. Must belong to your company; returns 404 otherwise.

Request

curl -sS https://app.tracepass.eu/api/v1/scope/check \
  -H "Authorization: Bearer tp_REDACTED_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "category": "battery",
    "facts": {
      "battery.use": "stationary_energy_storage",
      "battery.capacityKWh": 10
    },
    "role": "importer",
    "locale": "en"
  }'

Response

{
  "status": "answered",
  "answer": "Industrial batteries matching the facts you gave need a battery passport from 18 February 2027 (Battery Regulation (EU) 2023/1542, Art. 77(1)). …",
  "locale": "en",
  "data": {
    "inScope": "yes",
    "verdict": "in_scope",
    "governing": {
      "celex": "32023R1542",
      "act": {
        "celex": "32023R1542",
        "name": "Battery Regulation (EU) 2023/1542"
      },
      "verdict": "in_scope",
      "citation": {
        "ref": "Art. 77(1)",
        "quote": "From 18 February 2027 each LMT battery, each industrial battery with a capacity greater than 2 kWh and each electric vehicle battery placed on the market or put into service shall have an electronic record (‘battery passport’)."
      },
      "appliesFrom": {
        "date": "2027-02-18",
        "precision": "day",
        "wording": "from 18 February 2027"
      },
      "level": {
        "value": "item",
        "ref": "Art. 77(2)"
      },
      "role": {
        "asked": "importer",
        "actTerm": "importer",
        "definedIn": "Art. 3(1)(64)",
        "placingOperator": true
      },
      "duties": [
        {
          "id": "32023R1542#duty.unique_identifier@1",
          "holder": "placing_operator",
          "ref": "Art. 77(3)",
          "quote": "The battery passport shall be accessible through the QR code referred to in Article 13(6) which links to a unique identifier that the economic operator placing the battery on the market shall attribute to it.",
          "status": "active"
        },
        …
      ],
      "ruleStatus": "verified"
    },
    "alsoApplies": []
  },
  "ask": [
    {
      "fact": "battery.incorporatedIn",
      "question": "Is it built into military equipment (arms, munitions, war material; not a product that is not intended for specifically military purposes, such as dual-use equipment), equipment sent into space, or equipment specifically designed for the safety of nuclear installations?",
      "blocking": false,
      "act": "32023R1542",
      "type": "enum",
      "values": [
        "none",
        "military",
        "space",
        "nuclear_safety",
        "other"
      ],
      "valueLabels": {
        "none": "none of these",
        "military": "military equipment",
        "space": "equipment sent into space",
        "nuclear_safety": "equipment for the safety of nuclear installations",
        "other": "other equipment"
      }
    },
    {
      "fact": "ownBrand",
      "question": "Do you place it on the market under your own name or trademark?",
      "blocking": false,
      "act": "32023R1542",
      "type": "boolean",
      "valueLabels": {
        "true": "Yes",
        "false": "No"
      }
    },
    {
      "fact": "modified",
      "question": "Have you modified it after it was placed on the market, in a way that could affect compliance?",
      "blocking": false,
      "act": "32023R1542",
      "type": "boolean",
      "valueLabels": {
        "true": "Yes",
        "false": "No"
      }
    },
    {
      "fact": "purposeChanged",
      "question": "Have you changed its intended purpose?",
      "blocking": false,
      "act": "32023R1542",
      "type": "boolean",
      "valueLabels": {
        "true": "Yes",
        "false": "No"
      }
    }
  ],
  "citations": [
    {
      "celex": "32023R1542",
      "ref": "Art. 77(1)",
      "quote": "From 18 February 2027 each LMT battery, each industrial battery with a capacity greater than 2 kWh and each electric vehicle battery placed on the market or put into service shall have an electronic record (‘battery passport’).",
      "url": "https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32023R1542"
    },
    …
  ],
  "ruleIds": [
    "32023R1542#duty.accurate_and_delegable@1",
    "32023R1542#duty.importer_checks_marking@1",
    …
  ],
  "asOf": "2026-10-09",
  "ruleStatus": "verified",
  "machineTranslated": false,
  "disclaimer": "Regulatory information as of 9 Oct 2026, not legal advice. Check the cited articles before relying on it. — TracePass"
}

Related endpoints