Scope

Check product scope against EU DPP regulations.

Evaluates whether a product falls in scope of EU DPP obligations given its category, facts, role in the supply chain, and optional locale. Returns a deterministic scope answer with the relevant regulation article, confidence level, and a human-readable rationale.

Auth: Bearer API key OR OAuth with regulatory:read OR passports:read. Does not count against the daily passport-read cap.

Rate limit: Free and Basic plans are capped at a daily scope-check quota. A 429 with error: scope_answer_cap is returned when the cap is reached; Retry-After gives the seconds until midnight UTC reset.

post/api/v1/scope/check

Request

  • Base URL: https://app.tracepass.eu
  • URL: https://app.tracepass.eu/api/v1/scope/check
  • 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: regulatory:read)
    • 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)

Request body

category'battery' | 'construction' | 'detergents' | 'electronics' | 'fmcg' | 'furniture' | 'jewelry' | 'packaging' | 'paints-coatings' | 'steel' | 'textile' | 'toys' | 'tyres' | 'vehicles' | 'other'

DPP product category key. Use other for categories not yet covered by a specific regulation. vehicles is in scope (End-of-Life Vehicles Regulation) but has no passport template.

factsobject

Act-namespaced product facts as key-value pairs (e.g. { "battery.use": "stationary_energy_storage", "battery.capacityKWh": 10 }). Unknown keys or out-of-range values return 400 invalid_input. Common facts are not namespaced: ownBrand: true states that you place the product on the market under your own name or trademark.

rolestring

Your role in the act's own terms: manufacturer, importer, distributor, authorised_representative or fulfilment_service_provider (an act may define more). Selling under your own name is manufacturer with facts.ownBrand: true. Determines which duties are listed as yours. Defaults from the company profile when omitted; with no role at all, the answer lists the duties of every role.

lifecycleEvent'prepared_for_reuse' | 'prepared_for_repurposing' | 'repurposed' | 'remanufactured' | 'repaired' | 'became_waste' | 'recycled' nullable

A post-first-sale lifecycle event that may affect scope obligations (e.g. a repaired battery may still need a passport).

localestring

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

productIdstring

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

passportIdstring

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

Example request

{
  "category": "battery",
  "role": "importer",
  "placedOnMarket": {
    "date": "2027-03"
  },
  "locale": "en"
}

Response

Scope answer envelope.

status'answered' | 'needs_input' | 'not_covered' required

answered — a deterministic answer is available. needs_input — blocking facts are missing (see ask). not_covered — no rule covers this product/category.

answerstring required

Human-readable scope answer in the requested locale.

localestring required

Locale the answer was rendered in.

profileUsedobject[] required

Profile rules applied (currently always empty).

ruleIdsstring[] required

Versioned rule IDs in the format <celex>#<rule-name>@<version> (e.g. 32023R1542#duty.storage@1).

asOfstring date required

Date the rules were current on (YYYY-MM-DD).

ruleStatus'verified' | 'needs_recheck' | 'draft' required

Confidence in the rules behind this answer.

recheckSincestring date

Present when ruleStatus is needs_recheck; the date the governing act was updated.

machineTranslatedboolean required

Whether the answer text was machine-translated.

disclaimerstring required

Changes

No recorded changes to this operation across all 1 revision of this API.