API reference
REST API for Digital Product Passports: products, passports, evidence documents, suppliers, data carriers and store integrations. Generated from the live API source.
Download OpenAPI 3.1 468 operations in 35 groups · import the file into Postman, Insomnia or a code generator · integration test evidence
Getting started
- Base URL
https://api.dppshield.com/api/v1- Authentication
- Create an API key in the console under Settings → API keys and send it as
x-api-key: dpk_…orAuthorization: Bearer dpk_…. A key belongs to one organization. - Scopes
- Each operation needs
<resource>:read(GET) or<resource>:write(other methods), where the resource is the first path segment, for exampleproducts:write.<resource>:*and*cover both. - Public endpoints
- Operations in Public passport access need no key: they serve published passports to anyone who scans a code.
- Errors
400invalid input ·401missing or invalid key ·403scope, role or plan limit ·404not found ·409conflict (for example a duplicate SKU) ·429rate limit (hourly limits depend on the plan).- Versioning
- Every response carries
x-api-version. Breaking changes ship under a new version date. - Pagination
- Search endpoints take
pageandpageSize(max 200) and return{ items, total, page, pageSize }.
curl "https://api.dppshield.com/api/v1/products/search?q=chair&pageSize=20" \
-H "x-api-key: dpk_your_key"Try it without a key
The public sample passport (demonstration data) answers the public endpoints, so you can see real responses before creating a key: open the sample passport.
curl "https://api.dppshield.com/api/v1/public/dpp/d1000000-0000-4000-8000-000000000001"
curl "https://api.dppshield.com/api/v1/public/dpp/d1000000-0000-4000-8000-000000000001/documents"
curl "https://api.dppshield.com/api/v1/credentials/public/d1000000-0000-4000-8000-000000000001"Products
Product identities (name, SKU, GTIN, category, manufacturer and economic operators) that every passport version refers to. Includes search, CSV import with a dry run, and deletion of products that never had a published passport.
GET/productsList products
The catalogue, newest first: at most LIST_MAX rows per request; page with `limit` and `offset`.
API key scope `products:read` (or `products:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
offset | query | string | no |
Returns 200 Product[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/productsCreate a product
API key scope `products:write` (or `products:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
sku | string | yes |
gtin | string | any | null | no |
category | "battery" | "textile" | "electronics" | "furniture" | "construction" | "chemicals" | "food-contact" | "packaging" | "automotive" | "cosmetics" | "medical-devices" | "agriculture" | "tyres" | "metals" | "toys" | "appliances" | "footwear" | yes |
brand | string | null | no |
description | string | any | null | no |
manufacturerName | string | null | no |
manufacturerCountry | string | any | null | no |
metadata | object | no |
workspaceId | string (uuid) | any | null | no |
Returns 201 Product2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/products/{id}Get a product
API key scope `products:read` (or `products:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 Product
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/products/{id}Update a product
API key scope `products:write` (or `products:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
sku | string | no |
gtin | string | any | null | no |
category | "battery" | "textile" | "electronics" | "furniture" | "construction" | "chemicals" | "food-contact" | "packaging" | "automotive" | "cosmetics" | "medical-devices" | "agriculture" | "tyres" | "metals" | "toys" | "appliances" | "footwear" | no |
brand | string | null | no |
description | string | any | null | no |
manufacturerName | string | null | no |
manufacturerCountry | string | any | null | no |
metadata | object | no |
workspaceId | string (uuid) | any | null | no |
Returns 200 Product
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/products/{id}Delete a product
Delete a product. Allowed only while none of its passports was ever published; its draft passports are deleted with it.
API key scope `products:write` (or `products:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
id | string | yes |
draftPassportsDeleted | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/products/bulkCreate product bulk
Update shared fields on, or delete, up to 200 products; every product is reported separately.
API key scope `products:write` (or `products:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
ids | string[] | no |
action | "update" | "delete" | no |
fields | map of any | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
action | string | yes |
succeeded | string[] | yes |
failed | object[] | yes |
succeededCount | number | yes |
failedCount | number | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/products/categoriesList product categories
API key scope `products:read` (or `products:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
key | string | yes |
label | string | yes |
enabled | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/products/check-duplicatesCheck duplicates products
API key scope `products:write` (or `products:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
sku | string | no |
gtin | string | null | no |
modelNumber | string | null | no |
excludeId | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
duplicates | object[] | yes |
similar | object[] | yes |
hasBlockingDuplicate | boolean | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/products/import/csvCreate product import csv
Import products from mapped CSV rows. With `dryRun: true` it reports the outcome of every row and the plan-limit check without writing anything.
API key scope `products:write` (or `products:*`, `*`).
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dryRun | boolean | yes |
summary | object | yes |
plan | PlanCheck | yes |
rows | RowOutcome[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/products/searchSearch products
Search the catalogue with filters and pagination. Returns `{ items, total, totalAll, page, pageSize, categories }`.
API key scope `products:read` (or `products:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
q | query | string | no |
category | query | string | no |
page | query | string | no |
pageSize | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
items | Product[] | yes |
total | number | yes |
totalAll | number | yes |
page | number | yes |
pageSize | number | yes |
categories | string[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Passports
Digital Product Passports: create and edit versioned passport data, validate it against the category's regulation pack, publish, recall, archive, and read history, diffs, supply chain and per-passport records.
GET/authoring-drafts/{kind}/{id}Get a authoring draft
Private recovery state for the current user; expires after thirty days. Never a release.
API key scope `authoring-drafts:read` (or `authoring-drafts:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
kind | path | string | yes |
id | path | string | yes |
Returns 200 WorkingDraft | any | null
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/authoring-drafts/{kind}/{id}Post a authoring draft
API key scope `authoring-drafts:write` (or `authoring-drafts:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
kind | path | string | yes |
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
baseVersion | integer | yes |
schemaVersion | string | yes |
data | map of any | yes |
expectedRevision | integer | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
revision | number | yes |
updatedAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/authoring-drafts/{kind}/{id}Delete a authoring draft
API key scope `authoring-drafts:write` (or `authoring-drafts:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
kind | path | string | yes |
id | path | string | yes |
revision | query | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
discarded | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dppList passports
Passports, most recently changed first: at most LIST_MAX rows per request; page with `limit` and `offset`.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
gtin | query | string | no |
limit | query | string | no |
offset | query | string | no |
Returns 200 object | object[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dppCreate a passport
API key scope `dpp:write` (or `dpp:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
productId | string (uuid) | yes |
schemaId | string | yes |
schemaVersion | string | yes |
data | map of any | yes |
Returns 201 object | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}Get a passport
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
product | Product | yes |
version | DppVersion | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PUT/dpp/{id}Replace a passport
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
expectedVersion | integer | no |
schemaVersion | string | no |
data | map of any | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
product | Product | yes |
version | DppVersion | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/dpp/{id}Delete a passport
Archive one passport. Editors may archive or recall a single passport (as the role guide states); portfolio-wide publication, archive and recall through bulk-action are reserved to owners and admins.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
registry | object | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/aas.jsonGet passport aas.json
Asset Administration Shell (metamodel V3 JSON) of a passport version - published by default - with Nameplate, full passport data and product structure.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
version | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
assetAdministrationShells | object[] | yes |
submodels | object | object[] | yes |
conceptDescriptions | any[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/audit-packageGet passport audit package
Version-specific internal JSON audit package; contains no file bytes or storage credentials.
API key scope `dpp:read` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
version | query | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/bimGet passport bim
BIM parameters (IFC property sets / Revit shared parameters) and the object links.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
declared | boolean | yes |
parameters | object | yes |
links | object | yes |
lod | string | null | yes |
classification | string | null | yes |
gaps | string[] | yes |
caveat | string | yes |
dppId | string | yes |
product | object | yes |
version | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/carbon-baselineAdd passport carbon baseline
Sets the reference footprint (and optional target) a reduction claim is measured against.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
footprintKgCo2e | number | no |
useDeclared | boolean | no |
reductionTargetPercent | number | no |
note | string | no |
Returns 201 CarbonBaseline
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/dpp/{id}/carbon-baselineDelete passport carbon baseline
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
baseline | any | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/carbon-estimateAdd passport carbon estimate
Estimates a bill of materials (or the text layer of a stored document). dryRun records nothing.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Returns 201 object | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/carbon-estimatesGet passport carbon estimates
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
items | object[] | yes |
count | number | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/carbon-reportGet passport carbon report
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
generatedAt | string | yes |
product | object | yes |
version | number | yes |
status | string | yes |
footprint | object | yes |
baseline | object | object | yes |
previousVersion | object | any | null | yes |
dataQuality | object | yes |
hotspots | object | yes |
conflicts | Finding[] | yes |
warnings | Finding[] | yes |
missingInputs | string[] | yes |
methodology | object | yes |
reference | string | null | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/carbon-reportAdd passport carbon report
Issues a snapshot (reference like PCF-SKU-v1) of the current footprint.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
report | object | yes |
id | string | yes |
organizationId | string | yes |
status | string | yes |
dppId | string | yes |
payload | any | yes |
reference | string | yes |
versionNumber | number | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
totalKgCo2e | string | null | yes |
declaredKgCo2e | string | null | yes |
methodologyVersion | string | yes |
boundary | string | yes |
upstreamKgCo2e | string | null | yes |
baselineKgCo2e | string | null | yes |
reductionPercent | string | null | yes |
dataQuality | any | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/carbon-report.csvGet passport carbon report.csv
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/carbon-reportsGet passport carbon reports
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
id | string | yes |
reference | string | yes |
versionNumber | number | yes |
status | string | yes |
methodologyVersion | string | yes |
totalKgCo2e | string | null | yes |
declaredKgCo2e | string | null | yes |
upstreamKgCo2e | string | null | yes |
baselineKgCo2e | string | null | yes |
reductionPercent | string | null | yes |
dataQuality | any | yes |
issuedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/classificationGet passport classification
Live CLP classification and derived label of one mixture.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
markets | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
status | string | yes |
method | string | yes |
clpSubsetVersion | string | yes |
product | object | yes |
version | number | yes |
label | Label | yes |
labelComparison | LabelComparison | yes |
obligations | ChemicalObligation[] | yes |
ufi | object | yes |
missingInputs | string[] | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/complianceGet passport compliance
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
latest | ValidationRun | yes |
runs | ValidationRun[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/componentsGet passport components
The assembly below a passport (depth 8, 500 lines), each component's passport status and validation, and what needs attention.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
components | object[] | yes |
rollup | object | yes |
truncated | boolean | yes |
limits | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/componentsAdd passport components
Adds a component: a passport of this organization, an external component passport (https / GS1 Digital Link) or a structure-only part.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
role | string | any | null | no |
childDppId | string (uuid) | any | null | no |
externalReference | string | any | null | no |
quantity | number | no |
massKg | number | any | null | no |
supplierId | string (uuid) | any | null | no |
visibility | "public" | "restricted" | no |
position | integer | no |
Returns 201 PassportComponent
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/dpp/{id}/components/{componentId}Update passport components
Changes a component line; a link that would make a passport its own component is refused.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
componentId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
role | string | any | null | no |
childDppId | string (uuid) | any | null | no |
externalReference | string | any | null | no |
quantity | number | no |
massKg | number | any | null | no |
supplierId | string (uuid) | any | null | no |
visibility | "public" | "restricted" | no |
position | integer | no |
Returns 200 PassportComponent2
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/dpp/{id}/components/{componentId}Delete passport components
Removes a component line; the component's own passport is not changed.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
componentId | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
removed | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/conflictsGet passport conflicts
The conflicts of one passport, with their remediation hint.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
conflicts | object[] | yes |
counts | object | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/consistency-reportAdd passport consistency report
Issue the immutable consistency report (scans first, so the artifact reflects reality now).
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
note | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
scanSummary | CrosscheckSummary | yes |
reference | any | yes |
versionNumber | any | yes |
status | any | yes |
verdict | any | yes |
crosscheckVersion | any | yes |
dppVersion | any | yes |
counts | object | yes |
documents | object | yes |
conflictingPaths | any | yes |
gaps | any | yes |
outOfScope | any | yes |
headline | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/consistency-reportsGet passport consistency reports
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
reference | any | yes |
versionNumber | any | yes |
status | any | yes |
verdict | any | yes |
crosscheckVersion | any | yes |
dppVersion | any | yes |
counts | object | yes |
documents | object | yes |
conflictingPaths | any | yes |
gaps | any | yes |
outOfScope | any | yes |
headline | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/constructionGet passport construction
Everything the construction tier knows about one passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
version | number | yes |
status | string | yes |
methodVersion | string | yes |
standard | string | yes |
dop | DopReadiness | yes |
epd | EpdReadiness | yes |
productStageGwp | number | null | yes |
taxonomy | TaxonomyResult | yes |
bim | object | yes |
declaredPaths | string[] | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/credentialsGet passport credentials
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
id | string | yes |
dppId | string | yes |
jti | string | yes |
kid | string | yes |
version | number | yes |
status | string | yes |
issuedAt | string (date-time) | yes |
expiresAt | string (date-time) | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
subjectHash | string | yes |
claims | any | yes |
token | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/credentialsAdd passport credentials
Signs the passport's current published version.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
validDays | number | no |
locale | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
jti | string | yes |
kid | string | yes |
token | string | yes |
claims | VerifiableCredentialClaims | yes |
expiresAt | string (date-time) | yes |
verificationUrl | string | yes |
summary | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/crosscheckGet passport crosscheck
Read-only state from the last scan (never re-reads documents, never spends a model call).
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
version | number | yes |
crosscheckVersion | string | yes |
persistedState | boolean | yes |
verdict | string | yes |
counts | object | yes |
conflicts | object[] | yes |
documents | object[] | yes |
facts | object[] | yes |
declared | object[] | yes |
outOfScopeNote | string | yes |
note | string | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/crosscheckAdd passport crosscheck
Run a scan. Reads the passport's declared values, every attached document and the stored facts, compares what is comparable, persists the disagreements, and clears the ones that no longer reproduce. `persist: false` analyses without writing.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
documentIds | string[] | no |
persist | boolean | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
reference | string | yes |
product | object | yes |
version | number | yes |
crosscheckVersion | string | yes |
persisted | boolean | yes |
verdict | "consistent" | "review" | "conflicting" | "unassessed" | yes |
summary | CrosscheckSummary | yes |
scope | object | yes |
headline | string | yes |
documents | any[] | yes |
groups | object[] | yes |
conflicts | object[] | yes |
singleSourcePaths | string[] | yes |
outOfScope | object[] | yes |
singleSourceNote | string | null | yes |
caveat | string | yes |
scopeNote | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/custodyGet passport custody
The custody statement of a passport: its allocations, by account and model.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
statements | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/diffGet passport diff
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
from | query | string | no |
to | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
from | number | yes |
to | number | yes |
changeCount | number | yes |
changes | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PUT/dpp/{id}/disclosureUpdate passport disclosure
Configure dot-paths published at full precision, overriding the default public projection.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
paths | string[] | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
disclosedPaths | string[] | yes |
staged | boolean | yes |
releaseVersion | number | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/dopGet passport dop
CPR readiness: harmonised standard, AVCP system, notified body, essential characteristics.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
manufacturer | string | null | yes |
number | string | null | yes |
harmonisedStandard | string | null | yes |
avcp | object | any | null | yes |
notifiedBody | string | null | yes |
ceMarkingDate | string | null | yes |
intendedUse | string | null | yes |
plant | string | null | yes |
characteristics | DopCharacteristic[] | yes |
dangerousSubstances | object | yes |
serviceLifeYears | number | null | yes |
maintenanceIntervalMonths | number | null | yes |
deconstructionReusePercent | number | null | yes |
recycledContentPercent | number | null | yes |
bioBasedContentPercent | number | null | yes |
fireClass | string | null | yes |
ready | boolean | yes |
blocking | string[] | yes |
gaps | ConstructionGap[] | yes |
caveat | string | yes |
dppId | string | yes |
product | object | yes |
version | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/dopAdd passport dop
Records the DoP — refused while a blocking element is missing, because a DoP is a legal document.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
note | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppVersion | number | yes |
gaps | ConstructionGap[] | yes |
nextStep | string | yes |
id | string | yes |
organizationId | string | yes |
status | string | yes |
dppId | string | yes |
payload | any | yes |
reference | string | yes |
versionNumber | number | yes |
blocking | any | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
supersededAt | string (date-time) | null | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
gapCount | number | yes |
dopNumber | string | null | yes |
harmonisedStandard | string | null | yes |
avcpSystem | string | null | yes |
notifiedBody | string | null | yes |
fireClass | string | null | yes |
serviceLifeYears | string | null | yes |
characteristicCount | number | yes |
ready | boolean | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/dop-recordsGet passport dop records
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
dppVersion | number | null | yes |
currentDppVersion | number | null | yes |
outOfDate | boolean | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/dop.csvGet passport dop.csv
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | no |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/dop.jsonGet passport dop.json
Downloads a saved DoP whose reference belongs to this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/dop/revokeRevoke dop of a passport
Revokes a document belonging to this passport; the reference is carried in the body.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reference | string | yes |
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/dpp/{id}/draftDelete passport draft
Delete a never-published draft outright (frees its plan slot); published passports are archived instead.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
id | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/epcisGet passport epcis
GS1 EPCIS 2.0 capture document for the passport's lifecycle events.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
@context | string | map of string[] | yes |
type | string | yes |
schemaVersion | string | yes |
creationDate | string | yes |
epcisBody | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/epcis/importImport epcis of a passport
Ingest a partner EPCIS 2.0 capture document (idempotent per eventID).
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
object
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
importedCount | number | yes |
skippedCount | number | yes |
imported | object[] | yes |
skipped | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/epdGet passport epd
EN 15804+A2 readiness: modules, indicator matrix, GWP decomposition, biogenic storage, gaps.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
status | "partial" | "declared" | "insufficient" | yes |
standard | string | yes |
methodVersion | string | yes |
declaredUnit | string | null | yes |
functionalUnit | string | null | yes |
systemBoundary | string | yes |
modules | EpdModuleValues[] | yes |
indicators | object[] | yes |
coreIndicatorCoveragePercent | number | yes |
carbonStorage | object | yes |
verification | ConstructionVerification | yes |
gaps | ConstructionGap[] | yes |
errorGaps | number | yes |
warningGaps | number | yes |
caveat | string | yes |
disclaimer | string | yes |
dppId | string | yes |
product | object | yes |
version | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/epdAdd passport epd
Issues the EPD data package with a reference containing the complete passport ID. Partial packages are issuable and say so.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
note | string | no |
language | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppVersion | number | yes |
gaps | ConstructionGap[] | yes |
nextStep | string | yes |
id | string | yes |
organizationId | string | yes |
status | string | yes |
dppId | string | yes |
payload | any | yes |
reference | string | yes |
versionNumber | number | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
supersededAt | string (date-time) | null | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
standard | string | yes |
methodVersion | string | yes |
declaredUnit | string | null | yes |
functionalUnit | string | null | yes |
systemBoundary | string | null | yes |
modules | any | yes |
indicators | any | yes |
moduleCount | number | yes |
coreIndicatorCoveragePercent | number | yes |
carbonStorageKgCo2e | string | null | yes |
carbonStorageBasis | string | null | yes |
programmeOperator | string | null | yes |
registration | string | null | yes |
validUntil | string | null | yes |
thirdPartyVerified | boolean | null | yes |
gapCount | number | yes |
errorGapCount | number | yes |
packageStatus | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/epd-recordsGet passport epd records
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
dppVersion | number | null | yes |
currentDppVersion | number | null | yes |
outOfDate | boolean | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/epd.csvGet passport epd.csv
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | no |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/epd.jsonGet passport epd.json
Downloads a saved EPD whose reference belongs to this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/epd/revokeRevoke epd of a passport
Revokes a document belonging to this passport; the reference is carried in the body.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reference | string | yes |
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/eventsGet passport events
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 DppEvent[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/eventsAdd passport events
Record a lifecycle event (repaired, transferred, recycled, inspected…).
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/evidence-linksGet passport evidence links
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
version | query | string | no |
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/evidence-linksAdd passport evidence links
Links an accepted document to an existing field on an immutable passport version.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
documentId | string (uuid) | yes |
version | integer | yes |
fieldPath | string | yes |
page | integer | no |
quote | string | yes |
note | string | no |
Returns 201 EvidenceLink
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/factsGet passport facts
Statements read from documents (or attested by a person), each with its quote.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
facts | object[] | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/factsAdd passport facts
Attach a statement to a field: the document, the value and the quote are all required.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
id | string | yes |
documentId | string | null | yes |
path | string | yes |
raw | string | yes |
kind | string | yes |
unit | string | null | yes |
qualifier | string | yes |
canonical | string | null | yes |
evidence | string | yes |
method | string | yes |
code | string | yes |
note | string | null | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/historyGet passport history
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 DppVersion[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/item-jobsGet passport item jobs
Generation jobs of this passport with progress.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 ItemGenerationJob[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/itemsGet passport items
Items of a passport (100 per page, filter by status or serial) with counts by lifecycle status.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
status | query | string | no |
q | query | string | no |
page | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
gtin | string | null | yes |
items | ItemIdentity[] | yes |
total | number | yes |
totalCapped | boolean | yes |
page | number | yes |
pageSize | number | yes |
byStatus | map of number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/dpp/{id}/items/{itemId}Update passport items
Changes one item's status or attributes (e.g. manufacturing date, state of health).
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
itemId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
status | "active" | "sold" | "in_use" | "returned" | "refurbished" | "recycled" | "destroyed" | "recalled" | no |
attributes | map of string | number | boolean | any | null | no |
Returns 200 ItemIdentity
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/items/export.csvGet passport items export.csv
Print / encode export in pages of 100,000: GS1 Digital Link URI (QR, NFC) and element string (DataMatrix, RFID) per item.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
page | query | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/items/generateAdd passport items generate
Queues generation of up to 1,000,000 serials (prefix + zero-padded running number); existing serials are skipped.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
count | integer | yes |
prefix | string | no |
start | integer | no |
width | integer | no |
batch | string | any | null | no |
Returns 201 ItemGenerationJob2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/items/importImport items of a passport
Registers up to 10,000 existing serials; duplicates are reported, never overwritten.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
items | object[] | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
created | number | yes |
duplicates | string[] | yes |
duplicateCount | number | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/items/statusAdd passport items status
Sets the lifecycle status of up to 10,000 serials (sold, returned, recycled…).
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
serials | string[] | yes |
status | "active" | "sold" | "in_use" | "returned" | "refurbished" | "recycled" | "destroyed" | "recalled" | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
requested | number | yes |
updated | number | yes |
notFound | number | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/leasesGet passport leases
Leasing / servitization contracts attached to this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 LeaseContract[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/leasesAdd passport leases
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Returns 201 LeaseContract2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/lineageGet passport lineage
Remanufacturing lineage: ancestors and derived passports of this record.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
derivation | string | null | yes |
derivedFromId | string | null | yes |
ancestry | object[] | yes |
descendants | object[] | yes |
depth | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/materialsGet passport materials
Live assessment: repairability, recycled content, CRM inventory, gaps, evidence status.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
labelBasis | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
status | string | yes |
methodVersion | string | yes |
labelBasis | string | yes |
product | object | yes |
version | number | yes |
repairability | object | yes |
recycledContent | RecycledContentResult | yes |
criticalRawMaterials | object[] | yes |
materials | object[] | yes |
gaps | Gap[] | yes |
danglingEvidence | object[] | yes |
missingInputs | string[] | yes |
crmListVersion | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/materials-declarationGet passport materials declaration
Issued declaration preview (what would be declared, and what is still missing).
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
labelBasis | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
version | number | yes |
status | string | yes |
labelBasis | string | yes |
repairabilityScore | number | null | yes |
repairabilityClass | string | null | yes |
repairabilityCoveragePercent | number | yes |
recycledContentPercent | number | null | yes |
criticalMaterials | number | yes |
errors | number | yes |
warnings | number | yes |
missingInputs | string[] | yes |
dossier | MaterialsDossier | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/materials-declarationAdd passport materials declaration
Issues an immutable declaration with a reference containing the complete passport ID.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
labelBasis | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppVersion | number | yes |
status | string | yes |
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
payload | any | yes |
recycledContentPercent | string | null | yes |
repairabilityClass | string | null | yes |
repairabilityScore | string | null | yes |
reference | string | yes |
versionNumber | number | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
supersededAt | string (date-time) | null | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
gapCount | number | yes |
labelBasis | string | yes |
criticalMaterials | number | yes |
repairabilityCoveragePercent | number | null | yes |
recycledWeightBasisKg | string | null | yes |
crmListVersion | string | yes |
unsubstantiatedClaims | number | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/materials-declaration.csvGet passport materials declaration.csv
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/materials-declaration.jsonGet passport materials declaration.json
Downloads a saved materials declaration whose reference belongs to this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/materials-declaration/revokeRevoke materials declaration of a passport
Revokes a document belonging to this passport; the reference is carried in the body.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reference | string | yes |
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/materials-declarationsGet passport materials declarations
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
dppVersion | number | null | yes |
currentDppVersion | number | null | yes |
outOfDate | boolean | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/obligationsGet passport obligations
Upcoming and overdue regulatory obligations for this passport under the approved pack versions.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
notice | string | no |
dppId | string | yes |
category | string | yes |
generatedAt | string | yes |
basis | object | any | null | yes |
counts | object | yes |
obligations | PassportObligation[] | yes |
futureVersions | FuturePackReadiness[] | yes |
calendar | object[] | yes |
calendarCaveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/ownershipGet passport ownership
Custody chain (circular economy: resale, leasing, recycler handover).
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
chain | DppOwnership[] | yes |
current | DppOwnership | any | null | yes |
transfers | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/previewPreview a passport
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
lang | query | string | no |
accept-language | header | string | no |
drafts | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
regulatory | object | yes |
disclosedPaths | string[] | no |
redactedPaths | string[] | no |
defaultRedactedPaths | string[] | no |
translatedPaths | string[] | yes |
translationReleasedAt | string (date-time) | no |
product | object | yes |
data | any | yes |
version | number | null | yes |
owner | object | any | null | yes |
issuerIdentity | object | yes |
productModel | object | any | null | yes |
locale | string | yes |
interfaceLocale | string | yes |
sourceLocale | string | yes |
languages | LocaleInfo[] | yes |
availableLocales | string[] | yes |
translationStatus | string | null | yes |
suspension | object | no |
retirement | object | no |
withdrawal | object | no |
id | string | yes |
status | string | yes |
lifecycleState | string | yes |
publishedMarkets | string[] | any | null | yes |
publishedAt | string (date-time) | null | yes |
availability | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/provenanceGet passport provenance
Field-level lineage of one passport version: source, evidence, claims, issuer, reviewer, rules, introducing version.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
version | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
version | number | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
validation | object | any | null | yes |
rulePack | PackRef | any | null | yes |
summary | object | yes |
fields | object[] | yes |
historyLimited | boolean | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/publication-approvalsGet passport publication approvals
API key scope `dpp:read` (or `dpp:*`, `*`). Console users need the owner / admin / member / viewer role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 object | object[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/publication-approvalsAdd passport publication approvals
Request a version- and market-bound exception to the normal publication gate.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
markets | string[] | no |
reason | string | no |
Returns 201 DppPublicationApproval
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/publication-approvals/{approvalId}/decisionAdd passport publication approvals decision
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
approvalId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
approved | boolean | no |
Returns 201 DppPublicationApproval2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/publishPublish a passport
Publish a passport release. Blocking findings or a readiness-only pack require an approved, unused `approvalId` for this exact passport version and market set.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
markets | string[] | no |
approvalId | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
credential | object | any | null | yes |
compliance | object | yes |
registry | object | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/qrGet passport qr
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
format | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
url | string | yes |
format | string | yes |
dataUrl | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/recallRecall a passport
Withdraw the product. The passport stays public and states the recall.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
registry | object | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PUT/dpp/{id}/redactionUpdate passport redaction
Configure dot-paths hidden from public/recycler views.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
paths | string[] | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
redactedPaths | string[] | yes |
staged | boolean | yes |
releaseVersion | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/registryGet passport registry
API key scope `dpp:read` (or `dpp:*`, `*`). Console users need the owner / admin / member / viewer role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 DppRegistryRecord2[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/registry/outcomeAdd passport registry outcome
Record what the EU DPP Registry answered for a registration made in its own interface (online form or file upload): the correlation ID, then PROCESSING, SUCCESS with the registration URI, or FAILURE with the Registry's error. The record is kept with the published release.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
correlationId | string | yes |
outcome | "processing" | "success" | "failure" | yes |
registrationUri | string | no |
error | string | no |
Returns 201 DppRegistryRecord
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/registry/preparationGet passport registry preparation
API key scope `dpp:read` (or `dpp:*`, `*`). Console users need the owner / admin / member / viewer role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
version | number | yes |
publishedVersion | number | null | yes |
required | boolean | yes |
configured | boolean | yes |
submission | "api" | "registry-interface" | yes |
identifiers | object | yes |
registration | RegistrationEntry | any | null | yes |
ready | boolean | yes |
issues | string[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/registry/registerRegister registry of a passport
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 201 DppRegistryRecord
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/reinstateReinstate a passport
Return a recalled or archived passport to draft so the record can be corrected.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Returns 201 Dpp
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/remanufactureAdd passport remanufacture
Issue a NEW passport derived from this one (remanufactured / refurbished item).
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
data | map of any | yes |
productId | string | no |
schemaId | string | no |
schemaVersion | string | no |
derivation | string | no |
note | string | no |
publish | boolean | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
product | Product | yes |
version | DppVersion | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/resumeAdd passport resume
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
credential | object | any | null | yes |
registry | object | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/scipGet passport scip
SCIP-aligned dossier preview (what would be submitted, and what is still missing).
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
version | number | null | yes |
status | "no-declaration" | "svhc-present" | "svhc-below-threshold" | "restricted-substance" | "no-svhc" | yes |
productType | "unknown" | "article" | "mixture" | yes |
scipRequired | boolean | yes |
containsSvhc | boolean | yes |
thresholdHits | number | yes |
outstanding | string[] | yes |
missingInputs | string[] | yes |
warnings | string[] | yes |
dossier | ScipDossier | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/scipAdd passport scip
Issues a snapshot of the current screening with a reference containing the complete passport ID.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppVersion | number | null | yes |
status | string | yes |
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
payload | any | yes |
scipNumber | string | null | yes |
reference | string | yes |
versionNumber | number | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
supersededAt | string (date-time) | null | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
productType | string | yes |
candidateListVersion | string | yes |
containsSvhc | boolean | yes |
substanceCount | number | yes |
thresholdHits | number | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/scip-dossiersGet passport scip dossiers
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
dppVersion | number | null | yes |
currentDppVersion | number | null | yes |
outOfDate | boolean | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/scip.csvGet passport scip.csv
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/scip.jsonGet passport scip.json
Downloads a saved SCIP dossier whose reference belongs to this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/scip/revokeRevoke scip of a passport
Revokes a document belonging to this passport; the reference is carried in the body.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reference | string | yes |
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sdsGet passport sds
Structured SDS data package (what would be issued, and what a competent person must author).
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
language | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
version | number | yes |
status | string | yes |
revision | string | yes |
language | string | yes |
classified | boolean | yes |
signalWord | "DANGER" | "WARNING" | null | yes |
pictograms | number | yes |
hazardStatements | number | yes |
rulesToVerify | number | yes |
unresolvedComponents | number | yes |
filledSections | number | yes |
requiresAuthoring | number | yes |
nextReviewAt | string | yes |
obligations | ChemicalObligation[] | yes |
missingInputs | string[] | yes |
labelComparison | LabelComparison | yes |
package | SdsPackage | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/sdsAdd passport sds
Issues an SDS revision with a reference containing the complete passport ID.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
language | string | no |
revisionNote | string | no |
Returns 201 SdsRecord
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sds-recordsGet passport sds records
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
reviewDue | boolean | yes |
dppVersion | number | null | yes |
currentDppVersion | number | null | yes |
outOfDate | boolean | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sds.csvGet passport sds.csv
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sds.jsonGet passport sds.json
Downloads a saved SDS revision whose reference belongs to this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/sds/revokeRevoke sds of a passport
Revokes a document belonging to this passport; the reference is carried in the body.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reference | string | yes |
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PUT/dpp/{id}/source-localeUpdate passport source locale
The language this passport is authored in (default English).
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
locale | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
sourceLocale | string | yes |
changed | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sourcingGet passport sourcing
Persisted state for one passport: the last assessment and every alternative with its decision.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
currentDppVersion | number | yes |
persistedState | boolean | yes |
lastAssessment | object | any | null | yes |
alternatives | object[] | yes |
counts | object | yes |
note | string | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/sourcing-assessmentAdd passport sourcing assessment
Issue the immutable assessment artifact (analyses first, so it reflects reality now).
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
note | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
payload | object | yes |
reference | any | yes |
versionNumber | any | yes |
dppVersion | any | yes |
status | any | yes |
band | any | yes |
resilienceIndex | any | yes |
materials | any | yes |
suppliers | any | yes |
singleSourceCount | any | yes |
criticalExposureCount | any | yes |
unattributedCount | any | yes |
candidates | any | yes |
eligibleCandidates | any | yes |
blockedCandidates | any | yes |
openDecisions | any | yes |
adopted | any | yes |
headline | any | yes |
deductions | any | yes |
exposures | any | yes |
concentration | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sourcing-assessment.csvGet passport sourcing assessment.csv
Exports the saved assessment for this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sourcing-assessment.jsonGet passport sourcing assessment.json
Downloads a saved assessment whose reference belongs to this passport.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
reference | query | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/sourcing-assessment/revokeRevoke sourcing assessment of a passport
Revokes a document belonging to this passport; the reference is carried in the body.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reference | string | yes |
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
reference | any | yes |
versionNumber | any | yes |
dppVersion | any | yes |
status | any | yes |
band | any | yes |
resilienceIndex | any | yes |
materials | any | yes |
suppliers | any | yes |
singleSourceCount | any | yes |
criticalExposureCount | any | yes |
unattributedCount | any | yes |
candidates | any | yes |
eligibleCandidates | any | yes |
blockedCandidates | any | yes |
openDecisions | any | yes |
adopted | any | yes |
headline | any | yes |
deductions | any | yes |
exposures | any | yes |
concentration | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/sourcing-assessmentsGet passport sourcing assessments
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
reference | any | yes |
versionNumber | any | yes |
dppVersion | any | yes |
status | any | yes |
band | any | yes |
resilienceIndex | any | yes |
materials | any | yes |
suppliers | any | yes |
singleSourceCount | any | yes |
criticalExposureCount | any | yes |
unattributedCount | any | yes |
candidates | any | yes |
eligibleCandidates | any | yes |
blockedCandidates | any | yes |
openDecisions | any | yes |
adopted | any | yes |
headline | any | yes |
deductions | any | yes |
exposures | any | yes |
concentration | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/sourcing/analyseAdd passport sourcing analyse
Run the analysis: exposure, concentration, candidates and the resilience index (persists alternatives).
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dryRun | boolean | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
version | number | yes |
sourcingVersion | string | yes |
persisted | boolean | yes |
resilience | object | yes |
headline | string | yes |
materials | number | yes |
suppliers | number | yes |
links | number | yes |
unattributedSuppliers | string[] | yes |
unlinkedMaterials | string[] | yes |
unattributedNote | string | null | yes |
underEvaluation | object[] | yes |
underEvaluationNote | string | null | yes |
exposures | Exposure[] | yes |
concentration | object[] | yes |
candidates | object[] | yes |
counts | object | yes |
alternatives | object[] | yes |
clearedAlternatives | number | yes |
decisionGuards | object[] | yes |
caveat | string | yes |
scopeNote | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/splitSplit a passport
Serialization: split one passport into a batch of serialized items. Each item is a real passport (validated, custodied, audited) linked back to the source through lineage.
API key scope `dpp:write` (or `dpp:*`, `*`). Draft creation follows tenant write permissions; publish=true needs the owner / admin role and publication step-up.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
sourceId | string | yes |
productId | string | yes |
batch | string | yes |
serialField | string | yes |
requested | number | yes |
createdCount | number | yes |
failedCount | number | yes |
created | object[] | yes |
failed | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/substancesGet passport substances
Live screening of the passport's declared composition.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
productType | query | string | no |
markets | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
status | "no-declaration" | "svhc-present" | "svhc-below-threshold" | "restricted-substance" | "no-svhc" | yes |
productType | "unknown" | "article" | "mixture" | yes |
thresholdPercent | number | yes |
declaredCount | number | yes |
hits | SubstanceHit[] | yes |
belowThreshold | SubstanceHit[] | yes |
unresolved | ScreeningUnresolved[] | yes |
watched | SubstanceHit[] | yes |
obligations | ScreeningObligation[] | yes |
scip | object | yes |
markets | string[] | yes |
warnings | string[] | yes |
missingInputs | string[] | yes |
declarationPaths | string[] | yes |
dppId | string | yes |
product | object | yes |
version | number | yes |
methodVersion | string | yes |
candidateList | object | yes |
declaration | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/substances/rollupGet passport substances rollup
Screening plus the declared supply chain: propagation gaps and contradictions included.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
productType | query | string | no |
markets | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
version | number | yes |
methodVersion | string | yes |
productType | "unknown" | "article" | "mixture" | yes |
screening | Screening | yes |
supplyChain | object | yes |
substances | object[] | yes |
propagationGaps | PropagationGap[] | yes |
overThreshold | number | yes |
nodesWithSvhc | number | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/supply-chainGet passport supply chain
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
tiers | map of any[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/supply-chain/rollupGet passport supply chain rollup
Upward rollup: declared carbon per tier, materials coverage, conflicts and completeness.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
generatedAt | string | yes |
coverage | object | yes |
carbon | object | yes |
materials | object[] | yes |
conflicts | Finding[] | yes |
warnings | Finding[] | yes |
completeness | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/supply-chain/treeGet passport supply chain tree
Recursive multi-tier tree (tier-1 suppliers + declared upstream, depth-capped).
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
productId | string | yes |
generatedAt | string | yes |
maxDepth | number | yes |
counts | object | yes |
roots | ChainNode[] | yes |
findings | Finding[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/suspendAdd passport suspend
Keep the published page visible while temporarily revoking its authenticity credential.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
registry | object | yes |
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/taxonomyGet passport taxonomy
EU Taxonomy screening: the technical criterion plus the DNSH assessments, counted over assessed criteria.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
reference | object | yes |
substantialContribution | object | yes |
dnsh | object[] | yes |
minimumSafeguards | object | yes |
counts | object | yes |
verdict | "aligned" | "not-aligned" | "not-assessed" | "partially-assessed" | yes |
caveat | string | yes |
dppId | string | yes |
product | object | yes |
version | number | yes |
productStageGwp | number | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/transferTransfer a passport
Transfer custody to the next owner and record the matching EPCIS transfer event.
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
previous | DppOwnership3 | any | null | yes |
current | DppOwnership2 | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/translateAdd passport translate
Draft one or more languages for a passport. `dryRun` plans the run (languages, segments, rejected locales) without calling the provider or writing anything; `overwrite` refreshes an existing draft — a reviewed or approved translation is never replaced unless it is passed explicitly.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Returns 201 object | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/translationsGet passport translations
Every stored locale for a passport, with coverage, outdated fields and what is live.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
markets | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
version | any | yes |
publishedVersion | any | yes |
status | any | yes |
sourceLocale | string | yes |
product | object | yes |
localizable | string[] | yes |
localizableCount | number | yes |
values | map of string | yes |
sourceHash | string | yes |
locales | object[] | yes |
publishedLocales | string[] | yes |
approvers | number | yes |
coverage | object | yes |
markets | object[] | yes |
requirementsAdvisory | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PUT/dpp/{id}/translations/{locale}Update passport translations
Write the working copy of one language (patch semantics; `replace` overwrites; `confirm` lists outdated fields whose translation still fits the new source). Status `draft` or `reviewed` — editing an approved translation returns it to draft while the released text stays live.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
Request body (JSON)
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
locale | string | yes |
localeName | string | yes |
nativeName | string | yes |
status | string | yes |
translated | number | yes |
total | number | yes |
percent | number | yes |
missing | string[] | yes |
fields | map of any | yes |
machineAssisted | boolean | yes |
source | string | yes |
provider | string | null | yes |
model | string | null | yes |
glossaryVersion | string | null | yes |
qualityVerdict | string | null | yes |
quality | object | null | yes |
generatedAt | string (date-time) | null | yes |
outdated | object[] | yes |
stale | boolean | yes |
translatedBy | string | null | yes |
reviewedBy | string | null | yes |
reviewedAt | string (date-time) | null | yes |
updatedAt | string (date-time) | yes |
needsOtherApprover | boolean | yes |
live | object | any | null | yes |
dppId | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/dpp/{id}/translations/{locale}Delete passport translations
Delete a language: the working copy and, if live, its public release.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
locale | string | yes |
deleted | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/translations/{locale}/approveApprove translations of a passport
Approve the working copy and release it on the public passport.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
acknowledgeSuspect | boolean | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
released | boolean | yes |
note | string | yes |
locale | string | yes |
localeName | string | yes |
nativeName | string | yes |
status | string | yes |
translated | number | yes |
total | number | yes |
percent | number | yes |
missing | string[] | yes |
fields | map of any | yes |
machineAssisted | boolean | yes |
source | string | yes |
provider | string | null | yes |
model | string | null | yes |
glossaryVersion | string | null | yes |
qualityVerdict | string | null | yes |
quality | object | null | yes |
generatedAt | string (date-time) | null | yes |
outdated | object[] | yes |
stale | boolean | yes |
translatedBy | string | null | yes |
reviewedBy | string | null | yes |
reviewedAt | string (date-time) | null | yes |
updatedAt | string (date-time) | yes |
needsOtherApprover | boolean | yes |
live | object | any | null | yes |
dppId | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/translations/{locale}/exportExport translations of a passport
Translator file for one passport and language.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
format | query | string | no |
missingOnly | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
filename | string | yes |
contentType | string | yes |
passports | number | yes |
units | number | yes |
content | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/translations/{locale}/importImport translations of a passport
Import a translator file for one passport and language, as drafts.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
format | string | no |
content | string | yes |
status | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
locale | string | yes |
status | string | yes |
passports | number | yes |
applied | number | yes |
skipped | number | yes |
results | object[] | yes |
note | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/translations/{locale}/previewPreview translations of a passport
What the public passport would show in one language after the next publication: the working copy through the real public projection (redactions and defaults applied), with approved translations — or this language's unapproved draft with `drafts=1`.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
drafts | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
regulatory | object | yes |
disclosedPaths | string[] | no |
redactedPaths | string[] | no |
defaultRedactedPaths | string[] | no |
translatedPaths | string[] | yes |
translationReleasedAt | string (date-time) | no |
product | object | yes |
data | any | yes |
version | number | null | yes |
owner | object | any | null | yes |
issuerIdentity | object | yes |
productModel | object | any | null | yes |
locale | string | yes |
interfaceLocale | string | yes |
sourceLocale | string | yes |
languages | LocaleInfo[] | yes |
availableLocales | string[] | yes |
translationStatus | string | null | yes |
suspension | object | no |
retirement | object | no |
withdrawal | object | no |
id | string | yes |
status | string | yes |
lifecycleState | string | yes |
publishedMarkets | string[] | any | null | yes |
publishedAt | string (date-time) | null | yes |
availability | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/translations/{locale}/suggestionsGet passport translations suggestions
Exact-match translation memory from other passports' approved translations.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
locale | string | yes |
suggestions | object[] | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/translations/{locale}/withdrawAdd passport translations withdraw
Take a language off the public passport; the working copy is kept for review.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
locale | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
locale | string | yes |
withdrawn | boolean | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/used-inGet passport used in
Passports that list this passport as a component.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/{id}/validateValidate a passport
Validate against one or more markets: POST /dpp/:id/validate?markets=EU,UK
API key scope `dpp:write` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
markets | query | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
runId | string | yes |
rulesPassed | boolean | yes |
blockingIssues | number | yes |
legallyAssessed | boolean | yes |
assessmentStatus | "readiness_only" | "legally_assessed" | yes |
compliant | boolean | yes |
readinessScore | number | yes |
readinessGrade | string | null | yes |
score | number | yes |
averageScore | number | yes |
grade | string | null | yes |
coverage | PackCoverage | yes |
issues | object[] | yes |
rulesEvaluated | number | yes |
markets | map of MarketVerdict | yes |
requestedMarkets | string[] | yes |
extensionIssues | ExtensionIssue[] | yes |
derivedFacts | DerivedFact[] | yes |
pack | map of any | no |
packCode | string | yes |
packVersion | string | yes |
packStatus | string | yes |
organizationRules | number | yes |
nextAction | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/{id}/versionsGet passport versions
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 DppVersion[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/bulkCreate passport bulk
API key scope `dpp:write` (or `dpp:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
items | any[] | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
jobId | string | no |
status | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/bulk-actionCreate passport bulk action
Portfolio operation across many passports (plan batch cap applies). Restricted to the roles that may publish: without a role requirement an editor could publish through this route although the single-item `publish` route refuses them.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
action | "publish" | "archive" | "recall" | "reinstate" | yes |
ids | string[] | yes |
markets | string[] | no |
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
action | "publish" | "archive" | "recall" | "reinstate" | yes |
requested | number | yes |
succeededCount | number | yes |
failedCount | number | yes |
succeeded | object[] | yes |
failed | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/importImport passports
CSV import (master spec §5 Module 1): header-driven import of products and their first passport version. Product columns are followed by optional, flat passport columns; `data_json` is retained only as an advanced extension mechanism.
API key scope `dpp:write` (or `dpp:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
csv | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
createdCount | number | yes |
skippedCount | number | yes |
created | object[] | yes |
skipped | string[] | yes |
errors | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/labelsCreate passport labels
Print-ready labels (GTIN, serial, Digital Link, QR and/or DataMatrix) for passports and their items.
API key scope `dpp:write` (or `dpp:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
ids | string[] | yes |
includeChildren | boolean | no |
limit | number | no |
symbol | "qr" | "datamatrix" | "both" | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
count | number | yes |
truncated | boolean | yes |
available | number | yes |
symbol | "qr" | "datamatrix" | "both" | yes |
unpublished | number | yes |
labels | Label2[] | yes |
note | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/mergeMerge passports
Consolidated record built from several passports of the same product.
API key scope `dpp:write` (or `dpp:*`, `*`). Draft creation follows tenant write permissions; publish=true needs the owner / admin role and publication step-up.
Request body (JSON)
Returns 201 object | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dpp/registry/registration-dataCreate passport registry registration data
The EU DPP Registry registrations for up to 100 published passports, checked against the Registry's published rules (https UPI of at most 2,000 characters, product group and granularity, unique UPIs in one file), to enter in the Registry's online form or its JSON/XML upload template.
API key scope `dpp:write` (or `dpp:*`, `*`). Console users need the owner / admin / member role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppIds | any | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
guide | string | yes |
maxEntries | number | yes |
productGroup | string | null | yes |
entries | object[] | yes |
issues | string[] | yes |
ready | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/dpp/searchSearch passports
Paginated, filtered passport list for the console.
API key scope `dpp:read` (or `dpp:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
q | query | string | no |
status | query | string | no |
category | query | string | no |
productId | query | string | no |
page | query | string | no |
pageSize | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
items | object[] | yes |
total | number | yes |
totalAll | number | yes |
page | number | yes |
pageSize | number | yes |
statuses | string[] | yes |
categories | string[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/item-jobs/{jobId}Get a item job
One generation job with progress.
API key scope `item-jobs:read` (or `item-jobs:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
jobId | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
percent | number | yes |
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
gtin | string | yes |
batch | string | null | yes |
prefix | string | yes |
width | number | yes |
startNumber | number | yes |
count | number | yes |
nextOffset | number | yes |
createdCount | number | yes |
skippedCount | number | yes |
status | string | yes |
error | string | null | yes |
heartbeatAt | string (date-time) | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
finishedAt | string (date-time) | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/item-jobs/{jobId}/cancelCancel a item job
Stops a queued or running job; items already created stay.
API key scope `item-jobs:write` (or `item-jobs:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
jobId | path | string | yes |
Returns 201 ItemGenerationJob
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Documents
Evidence documents (certificates, test reports, declarations) attached to passports. Uploads are type-checked and virus-scanned; access levels control what becomes public.
GET/documentsList documents
API key scope `documents:read` (or `documents:*`, `*`).
Returns 200 Document[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documentsCreate a document
API key scope `documents:write` (or `documents:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppId | string | no |
type | string | yes |
title | string | yes |
storageKey | string | yes |
sha256 | string | no |
accessLevel | string | no |
supersedesId | string | no |
ocrLanguages | any | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/documents/{id}Get a document
API key scope `documents:read` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 Document
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/documents/{id}Delete a document
API key scope `documents:write` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/{id}/correction-requestAdd document correction request
Creates an idempotent follow-up request; the organization sends its invitation separately.
API key scope `documents:write` (or `documents:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
requestId | string | yes |
supplierId | string | yes |
reused | boolean | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/{id}/credentialAdd document credential
Attaches a credential to an evidence document and records its verification, including whether it names the file's hash.
API key scope `documents:write` (or `documents:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
credential | string | map of any | yes |
Returns 201 CredentialVerification
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/{id}/credential/recheckAdd document credential recheck
Verifies the attached credential again: status lists change and keys rotate.
API key scope `documents:write` (or `documents:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 201 CredentialVerification
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/documents/{id}/fileGet document file
API key scope `documents:read` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/documents/{id}/read-textGet document read text
API key scope `documents:read` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/{id}/read-textAdd document read text
API key scope `documents:write` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
ocrLanguages | any | no |
force | boolean | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
documentId | any | yes |
job | any | yes |
reading | any | yes |
characterCount | any | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/{id}/reviewAdd document review
Human review of evidence with revision conflict protection; never modifies file bytes.
API key scope `documents:write` (or `documents:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
expectedRevision | integer | yes |
status | "under_review" | "accepted" | "rejected" | yes |
reason | string | yes |
issuedAt | string | any | null | yes |
expiresAt | string | any | null | yes |
issuerName | string | any | null | no |
issuerIdentifier | string | any | null | no |
Returns 201 Document
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/{id}/signed-urlAdd document signed url
Issue a short-lived signed download URL for a stored document.
API key scope `documents:write` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
expiresIn | number | no |
disposition | "inline" | "attachment" | no |
Returns 201 SignedUrl
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/{id}/verifyVerify a document
API key scope `documents:write` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
valid | boolean | yes |
sha256 | string | yes |
stored | string | null | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/documents/{id}/versionsGet document versions
Document version chain (supersession history) for a document.
API key scope `documents:read` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
documentId | string | yes |
versions | any[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/documents/by-key/{key}/fileGet document by key file
Download a stored document file (used when object storage hands out no direct link).
API key scope `documents:read` (or `documents:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
key | path | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/documents/expiringList document expiring
API key scope `documents:read` (or `documents:*`, `*`).
Returns 200 Document[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/uploadCreate document upload
API key scope `documents:write` (or `documents:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
filename | string | yes |
contentType | string | no |
dppId | string | no |
type | string | yes |
title | string | yes |
accessLevel | string | no |
data | string | yes |
supersedesId | string | no |
ocrLanguages | any | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/documents/upload-multipartCreate document upload multipart
API key scope `documents:write` (or `documents:*`, `*`).
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Suppliers
Supplier records, data requests sent to suppliers, and supplier risk assessments.
GET/risk-assessmentsList risk assessments
API key scope `risk-assessments:read` (or `risk-assessments:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
suppliersAssessed | number | yes |
assessments | number | yes |
verdicts | map of number | yes |
degradedRuns | number | yes |
averageCombinedIndex | number | null | yes |
averageDeterministicScore | number | null | yes |
highRiskSuppliers | number | yes |
categories | object[] | yes |
unassessableSignals | object[] | yes |
recent | object[] | yes |
catalogueVersion | string | yes |
note | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/risk-assessments/{reference}Get a risk assessment
API key scope `risk-assessments:read` (or `risk-assessments:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 SupplierRiskAssessment
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/risk-assessments/{reference}.csvGet a risk assessment
API key scope `risk-assessments:read` (or `risk-assessments:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/risk-assessments/{reference}/revokeRevoke a risk assessment
API key scope `risk-assessments:write` (or `risk-assessments:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Returns 201 SupplierRiskAssessment
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/supplier-risk/catalogueList supplier risk catalogue
The catalogue and the formula: what a signal is, where it can come from and what it is worth.
API key scope `supplier-risk:read` (or `supplier-risk:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
riskVersion | string | yes |
catalogueVersion | string | yes |
categories | object[] | yes |
signals | object[] | yes |
unassessable | object[] | yes |
maxPenalty | number | yes |
formula | string | yes |
rules | string[] | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/suppliersList suppliers
API key scope `suppliers:read` (or `suppliers:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
createdAt | string (date-time) | yes |
metadata | any | yes |
country | string | null | yes |
email | string | null | yes |
trustScore | number | null | yes |
tier | number | yes |
viaSupplierId | string | null | yes |
identityWithheld | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/suppliersCreate a supplier
API key scope `suppliers:write` (or `suppliers:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
country | string | null | no |
email | string | null | no |
Returns 201 Supplier
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/suppliers/{id}Get a supplier
API key scope `suppliers:read` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
createdAt | string (date-time) | yes |
metadata | any | yes |
country | string | null | yes |
email | string | null | yes |
trustScore | number | null | yes |
tier | number | yes |
viaSupplierId | string | null | yes |
identityWithheld | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/suppliers/{id}Update a supplier
API key scope `suppliers:write` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
country | string | null | no |
email | string | null | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
createdAt | string (date-time) | yes |
metadata | any | yes |
country | string | null | yes |
email | string | null | yes |
trustScore | number | null | yes |
tier | number | yes |
viaSupplierId | string | null | yes |
identityWithheld | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/suppliers/{id}/capabilitiesGet supplier capabilities
What a supplier is recorded as able to make (the input the analysis depends on).
API key scope `suppliers:read` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
supplierId | string | yes |
name | string | yes |
country | string | null | yes |
materials | string[] | yes |
normalised | string[] | yes |
criticalMaterials | object[] | yes |
certifications | object[] | yes |
leadTimeDays | number | null | yes |
recorded | boolean | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PUT/suppliers/{id}/capabilitiesUpdate supplier capabilities
Record capabilities: materials, certifications with validity, lead time.
API key scope `suppliers:write` (or `suppliers:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
materials | string[] | no |
certifications | object[] | no |
leadTimeDays | number | null | no |
notes | string | null | no |
replace | boolean | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
updatedAt | any | yes |
supplierId | string | yes |
name | string | yes |
country | string | null | yes |
materials | string[] | yes |
normalised | string[] | yes |
criticalMaterials | object[] | yes |
certifications | object[] | yes |
leadTimeDays | number | null | yes |
recorded | boolean | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/suppliers/{id}/requestAdd supplier request
API key scope `suppliers:write` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppId | string | no |
requestedFields | string[] | no |
requestItems | any | no |
requestedDocuments | any | no |
message | string | no |
Returns 201 SupplierRequest2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/suppliers/{id}/requestsGet supplier requests
API key scope `suppliers:read` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 SupplierRequest[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/suppliers/{id}/requestsAdd supplier requests
API key scope `suppliers:write` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
name | string | yes |
instructions | string | no |
Returns 201 SupplierRequest2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/suppliers/{id}/requests/{requestId}/inviteAdd supplier requests invite
API key scope `suppliers:write` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
requestId | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
inviteSent | boolean | yes |
driver | string | yes |
inviteUrl | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/suppliers/{id}/requests/{requestId}/invite/resendAdd supplier requests invite resend
API key scope `suppliers:write` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
requestId | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
inviteSent | boolean | yes |
driver | string | yes |
inviteUrl | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/suppliers/{id}/requests/{requestId}/respondRespond requests of a supplier
Record a response the supplier gave outside the portal (email, call, a signed form). It goes through the same bounds as a portal answer, and the audit entry names who recorded it and keeps any answer it replaces.
API key scope `suppliers:write` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
requestId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
data | map of any | yes |
note | string | no |
Returns 201 SupplierRequest
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/suppliers/{id}/riskGet supplier risk
Deterministic supplier risk heuristic (master spec §6.2, local signals only): trust score, request response rate, country risk tier and data recency. External registries (sanctions, OpenCorporates, EcoVadis) remain adapters. The arithmetic lives in `@dpp/shared` (`supplierRiskSignals` / `supplierRiskScore`), because the sourcing resilience analysis and the AI-assisted assessment must produce the same number: this endpoint used to carry a second copy of the formula, and the two had drifted apart.
API key scope `suppliers:read` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
supplierId | string | yes |
score | number | yes |
level | "low" | "medium" | "high" | yes |
factors | object | yes |
latestAssessment | object | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/suppliers/{id}/risk-assessmentAdd supplier risk assessment
Assesses a supplier from its declaration responses and attributed documents. dryRun records nothing.
API key scope `suppliers:write` (or `suppliers:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Returns 201 object | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/suppliers/{id}/risk-assessmentsGet supplier risk assessments
API key scope `suppliers:read` (or `suppliers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
supplierId | string | yes |
items | object[] | yes |
count | number | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PUT/suppliers/{id}/screeningUpdate supplier screening
Records the sanctions screening result on the supplier record. This is what closes the platform-side gap - without it every assessment reports the absence of a check.
API key scope `suppliers:write` (or `suppliers:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
source | string | no |
reference | string | no |
date | string | no |
outcome | string | no |
note | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
supplierId | string | yes |
screening | object | yes |
effect | string | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/suppliers/requestsList supplier requests
API key scope `suppliers:read` (or `suppliers:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
request | SupplierRequest | yes |
supplierName | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Public passport access
Read-only endpoints behind QR codes and GS1 Digital Links: published passport data, its public documents and labels. No API key needed.
GET/.well-known/jwks.jsonList resolver document jwks.jsonpublic
Public: no API key needed.
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
keys | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
POST/public/carriers/{id}/scanAdd public carrier scanpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
country | string | no |
device | string | no |
Returns 201 ScanEvent
201 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/documents/{id}/fileGet public document filepublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}Get a public passportpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
lang | query | string | no |
accept-language | header | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
regulatory | object | yes |
disclosedPaths | string[] | no |
redactedPaths | string[] | no |
defaultRedactedPaths | string[] | no |
translatedPaths | string[] | yes |
translationReleasedAt | string (date-time) | no |
product | object | yes |
data | any | yes |
version | number | null | yes |
owner | object | any | null | yes |
issuerIdentity | object | yes |
productModel | object | any | null | yes |
locale | string | yes |
interfaceLocale | string | yes |
sourceLocale | string | yes |
languages | LocaleInfo[] | yes |
availableLocales | string[] | yes |
translationStatus | string | null | yes |
suspension | object | no |
retirement | object | no |
withdrawal | object | no |
id | string | yes |
status | string | yes |
lifecycleState | string | yes |
publishedMarkets | string[] | any | null | yes |
publishedAt | string (date-time) | null | yes |
availability | object | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/aas.jsonGet public passport aas.jsonpublic
Asset Administration Shell of a published passport, carrying exactly what the public passport shows.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
assetAdministrationShells | object[] | yes |
submodels | object | object[] | yes |
conceptDescriptions | any[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/componentsGet public passport componentspublic
Public components of a published passport, linked to their own published passports; masses and suppliers are not published.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
components | object[] | yes |
undisclosedComponents | number | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/custodyGet public passport custodypublic
A published passport's custody claims: model, its wording, scheme and claimed share.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
statements | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/displayGet public passport displaypublic
The published passport as labelled groups, the carbon declaration and the withheld fields.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
lang | query | string | no |
accept-language | header | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | yes |
version | any | yes |
category | string | yes |
locale | any | yes |
groups | DisplayGroup[] | yes |
carbon | CarbonStatement | any | null | yes |
withheld | WithheldField[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/documentsGet public passport documentspublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
lang | query | string | no |
accept-language | header | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
locale | string | yes |
documents | object | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/durabilityGet public passport durabilitypublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
repairability | object | any | null | yes |
recycledContent | object | any | null | yes |
criticalRawMaterials | object[] | yes |
caveat | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/epd-summaryGet public passport epd summarypublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
product | object | yes |
headline | object | yes |
indicators | object[] | yes |
verification | ConstructionVerification | yes |
endOfLife | object | yes |
status | "partial" | "declared" | "insufficient" | yes |
caveat | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/items/{serial}Get public passport itemspublic
Public state of one item of a published passport: serial, batch and lifecycle status only.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
serial | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
status | "active" | "recalled" | "recycled" | "returned" | "refurbished" | "destroyed" | "sold" | "in_use" | yes |
serial | string | yes |
batch | string | null | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/labelGet public passport labelpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
classified | boolean | yes |
labelComparison | LabelComparison | yes |
signalWord | "DANGER" | "WARNING" | null | yes |
pictograms | object[] | yes |
hazardStatements | object[] | yes |
precautionaryStatements | object[] | yes |
ufi | string | null | yes |
unresolvedComponents | number | yes |
method | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/leaseLease a public passportpublic
Public lease status (asset is on lease, type and end date only).
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 object | object
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/lineageGet public passport lineagepublic
Public remanufacturing lineage: structure and dates, never payloads.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
derivation | string | null | yes |
ancestry | object[] | yes |
descendants | object[] | yes |
depth | number | yes |
unpublishedRelatives | number | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/material-passportGet public passport material passportpublic
Recycler / dismantler material passport for a published DPP.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
product | object | yes |
materials | map of any[] | any | null | yes |
totalDeclaredMassKg | number | null | yes |
totalDeclaredMassBand | string | null | yes |
massBasis | "none" | "declared-mass" | "declared-share" | yes |
repairability | any | yes |
endOfLife | any | yes |
environmental | any | yes |
documents | object[] | yes |
note | string | yes |
withdrawal | object | null | no |
dppId | string | yes |
status | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/ownershipGet public passport ownershippublic
Privacy-preserving custody chain (owner categories + dates, no personal data).
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
transfers | number | yes |
currentOwnerType | string | null | yes |
chain | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/qr.pngGet public passport qr.pngpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
size | query | string | no |
Returns 200 with a file (image/png).
200 File400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/substancesGet public passport substancespublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
product | object | yes |
containsSvhc | boolean | yes |
candidateListVersion | string | yes |
candidateListAge | SvhcListAge | yes |
thresholdPercent | number | yes |
substances | object[] | yes |
scipNumber | string | null | yes |
safeUse | string[] | yes |
requestedUnder | string | yes |
responseTimeDays | number | yes |
warnings | string[] | yes |
disclaimer | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/dpp/{id}/widgetGet public passport widgetpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 WidgetPayload
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/gs1/01/{gtin}Get public GS1 setting 01public
GS1 Digital Link `01` application identifier: /01/{gtin} resolves the published passport.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
gtin | path | string | yes |
serial | query | string | no |
batch | query | string | no |
linkType | query | string | no |
accept | header | string | no |
Returns 200 object | object
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/gs1/01/{gtin}/10/{batch}Get public GS1 setting 01 10public
GS1 Digital Link `01/10` (batch) and `01/10/21` (batch + item) qualifier paths.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
gtin | path | string | yes |
batch | path | string | yes |
linkType | query | string | no |
accept | header | string | no |
Returns 200 object | object
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/gs1/01/{gtin}/10/{batch}/21/{serial}Get public GS1 setting 01 10 21public
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
gtin | path | string | yes |
batch | path | string | yes |
serial | path | string | yes |
linkType | query | string | no |
accept | header | string | no |
Returns 200 object | object
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/gs1/01/{gtin}/21/{serial}Get public GS1 setting 01 21public
GS1 Digital Link `01/21` (item + serial) resolution.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
gtin | path | string | yes |
serial | path | string | yes |
linkType | query | string | no |
accept | header | string | no |
Returns 200 object | object
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/gs1/01/{gtin}/linksetGet public GS1 setting 01 linksetpublic
The GS1 linkset for a GTIN: every link type this resolver can offer for that identifier. A conformant resolver answers "what else is there for this product?" with a linkset rather than a single redirect, which is how a recycler's tool or a customs system finds the traceability and EPCIS endpoints without being told about them out of band.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
gtin | path | string | yes |
serial | query | string | no |
batch | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
anchor | string | yes |
linkset | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
POST/public/integrations/{id}/pushAdd public integration pushpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
dryRun | query | string | no |
Request body (JSON)
object
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
runId | string | yes |
dryRun | boolean | yes |
summary | object | yes |
outcomes | Outcome[] | yes |
201 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/organizations/{id}/did.jsonGet public organization did.jsonpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | yes |
verificationMethod | VerificationMethod[] | no |
assertionMethod | string | VerificationMethod[] | no |
alsoKnownAs | string[] | no |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/organizations/{id}/identityGet public organization identitypublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
organization | string | yes |
did | string | yes |
verified | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/sitemap/passportsList public sitemap passportspublic
Published passports of issuers that opted in to search listing.
Public: no API key needed.
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
id | string | yes |
updatedAt | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/public/supplier-requests/{token}Get a public supplier requestpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
token | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationName | string | yes |
supplierName | string | yes |
supplierCountry | string | null | yes |
requestedFields | string[] | yes |
linkedPassport | object | any | null | yes |
requestItems | SupplierRequestItem[] | yes |
requestedDocuments | SupplierPortalDocument[] | yes |
fields | object[] | yes |
message | string | null | yes |
status | string | yes |
respondedAt | string (date-time) | null | yes |
createdAt | string (date-time) | yes |
tier | number | yes |
canDelegate | boolean | yes |
delegations | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
POST/public/supplier-requests/{token}/delegateAdd public supplier request delegatepublic
Forwards part of this request to the supplier's own supplier (multi-tier cascading). Only fields and documents of this request can be forwarded; with discloseIdentity false the requesting organization sees a neutral label instead of the upstream name and address. At most 10 per request, up to tier 5.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
token | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
email | string (email) | yes |
country | any | any | null | no |
fields | string[] | yes |
documents | string[] | yes |
message | string | no |
discloseIdentity | boolean | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
requestId | string | yes |
tier | number | yes |
identityWithheld | boolean | yes |
inviteSent | boolean | yes |
201 Success400 Invalid input404 Not found429 Rate limit exceeded
POST/public/supplier-requests/{token}/documents/{documentSlotId}Add public supplier request documentspublic
Upload one requested document using the unexpired invitation token. Send multipart/form-data with exactly one file field named file and no other fields. Accepts PDF, PNG, JPEG, GIF, WebP, or TIFF up to 10 MiB. Successful uploads permanently consume the requested slot; no replacement or public download is available. Production uploads require malware scanning.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
token | path | string | yes |
documentSlotId | path | string | yes |
Returns 201 SupplierPortalDocument
201 Success400 Invalid input404 Not found429 Rate limit exceeded
POST/public/supplier-requests/{token}/respondRespond a public supplier requestpublic
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
token | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
data | map of any | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
status | string | yes |
201 Success400 Invalid input404 Not found429 Rate limit exceeded
Service
Service health and the public status summary.
GET/healthList service healthpublic
Public: no API key needed.
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
ok | boolean | yes |
service | string | yes |
time | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/health/readyList service health readypublic
Readiness probe: PostgreSQL and Redis connectivity, and a database migrated to this build's schema.
Public: no API key needed.
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
ok | boolean | yes |
checks | map of "failed" | "ok" | yes |
time | string | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/statusList statuspublic
Public: no API key needed.
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
overall | "unknown" | "operational" | "degraded" | "down" | yes |
updatedAt | string | yes |
sampleIntervalMinutes | number | yes |
measuredSince | string | null | yes |
components | object[] | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
Store sync (Shopify / WooCommerce)
Connect a Shopify or WooCommerce store, import its products into the catalogue, export catalogue products as draft listings, and opt in to a daily sync of linked products.
GET/commerce/connectionsList commerce connections
API key scope `commerce:read` (or `commerce:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
id | string | yes |
provider | string | yes |
providerLabel | string | yes |
storeUrl | string | yes |
storeName | string | null | yes |
credentialHint | string | yes |
lastImportAt | string (date-time) | null | yes |
lastExportAt | string (date-time) | null | yes |
lastError | string | null | yes |
autoSync | string | yes |
lastAutoSyncAt | string (date-time) | null | yes |
instantSync | boolean | null | yes |
linkedProducts | number | yes |
createdAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/commerce/connectionsCreate commerce connections
API key scope `commerce:write` (or `commerce:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
id | string | yes |
provider | string | yes |
providerLabel | string | yes |
storeUrl | string | yes |
storeName | string | null | yes |
credentialHint | string | yes |
lastImportAt | string (date-time) | null | yes |
lastExportAt | string (date-time) | null | yes |
lastError | string | null | yes |
autoSync | string | yes |
lastAutoSyncAt | string (date-time) | null | yes |
instantSync | boolean | null | yes |
linkedProducts | number | yes |
createdAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/commerce/connections/{id}Update commerce connections
Opt in to a daily sync of linked products: { autoSync: "off" | "import" | "export" }.
API key scope `commerce:write` (or `commerce:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
autoSync | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | yes |
provider | string | yes |
providerLabel | string | yes |
storeUrl | string | yes |
storeName | string | null | yes |
credentialHint | string | yes |
lastImportAt | string (date-time) | null | yes |
lastExportAt | string (date-time) | null | yes |
lastError | string | null | yes |
autoSync | string | yes |
lastAutoSyncAt | string (date-time) | null | yes |
instantSync | boolean | null | yes |
linkedProducts | number | yes |
createdAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/commerce/connections/{id}Delete commerce connections
API key scope `commerce:write` (or `commerce:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/commerce/connections/{id}/exportExport connections of a commerce
API key scope `commerce:write` (or `commerce:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
productIds | string[] | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
summary | map of number | yes |
results | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/commerce/connections/{id}/importImport connections of a commerce
API key scope `commerce:write` (or `commerce:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
summary | map of number | yes |
plan | PlanCheck | yes |
results | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/commerce/connections/{id}/instantAdd commerce connections instant
WooCommerce: register product webhooks so store changes reach DPP Shield within seconds.
API key scope `commerce:write` (or `commerce:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
id | string | yes |
provider | string | yes |
providerLabel | string | yes |
storeUrl | string | yes |
storeName | string | null | yes |
credentialHint | string | yes |
lastImportAt | string (date-time) | null | yes |
lastExportAt | string (date-time) | null | yes |
lastError | string | null | yes |
autoSync | string | yes |
lastAutoSyncAt | string (date-time) | null | yes |
instantSync | boolean | null | yes |
linkedProducts | number | yes |
createdAt | string (date-time) | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/commerce/connections/{id}/linksGet commerce connections links
API key scope `commerce:read` (or `commerce:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
productId | string | yes |
externalId | string | yes |
lastImportedAt | string (date-time) | null | yes |
lastExportedAt | string (date-time) | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/commerce/connections/{id}/passport-linksAdd commerce connections passport links
Write passport links (URL, QR image, GS1 Digital Link) onto linked store products; call again while `remaining` > 0.
API key scope `commerce:write` (or `commerce:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
productIds | string[] | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
summary | object | yes |
errors | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/commerce/connections/{id}/productsGet commerce connections products
API key scope `commerce:read` (or `commerce:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
connection | object | yes |
truncated | boolean | yes |
plan | PlanCheck | yes |
products | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/commerce/shopify/claimCreate commerce shopify claim
Attach a shop that installed the DPP Shield Shopify app to this organization.
API key scope `commerce:write` (or `commerce:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
token | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
connectionId | string | yes |
shop | string | yes |
storeName | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/commerce/woocommerce/authorizeCreate commerce woocommerce authorize
Start the one-click WooCommerce connection; the browser is sent to the returned URL.
API key scope `commerce:write` (or `commerce:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
storeUrl | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
url | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Marketplace channels
Marketplace and storefront feeds (for example Amazon, Zalando, Shopify): per-channel readiness, generated feeds and recorded submissions.
GET/channelsList channels
The channel catalogue: attribute sets, where they come from and what they require.
API key scope `channels:read` (or `channels:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
profileVersion | string | yes |
generatedAt | string | yes |
channels | object[] | yes |
caveat | string | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/{channel}Get a channel
One channel's attribute set in full.
API key scope `channels:read` (or `channels:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
channel | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
caveat | string | yes |
id | string | yes |
label | string | yes |
kind | "marketplace" | "storefront" | yes |
market | string | yes |
specReference | string | yes |
categories | map of string | yes |
requiresPublished | boolean | yes |
formats | "json" | "csv"[] | yes |
delivery | "feed" | "metafields" | yes |
attributes | ChannelAttribute[] | yes |
profileVersion | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/channels/{channel}/endpointAdd channel endpoint
API key scope `channels:write` (or `channels:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
channel | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
mode | "push" | "manual" | no |
url | string | no |
secret | string | no |
enabled | boolean | no |
externalAccount | string | no |
notes | string | no |
Returns 201 ChannelEndpoint | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/{channel}/feedGet channel feed
The generated upload payload (JSON, or CSV with `?format=csv`).
API key scope `channels:read` (or `channels:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
channel | path | string | yes |
limit | query | string | no |
dppIds | query | string | no |
includeOptional | query | string | no |
format | query | string | no |
Returns 200 ChannelFeed | object
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/{channel}/feed.csvGet channel feed.csv
API key scope `channels:read` (or `channels:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
channel | path | string | yes |
limit | query | string | no |
dppIds | query | string | no |
includeOptional | query | string | no |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/{channel}/readinessGet channel readiness
Per-passport readiness: what is filled, what a mandatory attribute is missing.
API key scope `channels:read` (or `channels:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
channel | path | string | yes |
limit | query | string | no |
dppIds | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
channel | string | yes |
channelLabel | string | yes |
profileVersion | string | yes |
generatedAt | string | yes |
requiredAttributes | number | yes |
conditionalAttributes | number | yes |
counts | object | yes |
commonBlockers | object[] | yes |
rows | ChannelRow[] | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/channels/{channel}/syncSync a channel
Builds the payload, records the sync and — when an endpoint is configured — dispatches it.
API key scope `channels:write` (or `channels:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
channel | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppIds | string[] | no |
limit | number | no |
includeOptional | boolean | no |
format | "json" | "csv" | no |
dryRun | boolean | no |
note | string | no |
Returns 201 object | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/endpointsList channel endpoints
Where each channel's feed goes.
API key scope `channels:read` (or `channels:*`, `*`). Console users need the owner / admin role.
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
channel | string | yes |
label | string | yes |
configured | boolean | yes |
mode | string | yes |
enabled | boolean | yes |
externalAccount | string | null | yes |
lastSyncAt | string (date-time) | null | yes |
webhookId | string | null | yes |
notes | string | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/submissionsList channel submissions
API key scope `channels:read` (or `channels:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
channel | query | string | no |
limit | query | string | no |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
reference | string | yes |
versionNumber | number | yes |
channel | string | yes |
status | string | yes |
format | string | yes |
products | number | yes |
readyProducts | number | yes |
skippedProducts | number | yes |
attributesFilled | number | yes |
attributesMissing | number | yes |
requiredMissing | number | yes |
payloadHash | string | yes |
dispatched | boolean | yes |
externalId | string | null | yes |
createdAt | string (date-time) | yes |
acknowledgedAt | string (date-time) | null | yes |
cancelledAt | string (date-time) | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/submissions/{reference}Get channel submissions
API key scope `channels:read` (or `channels:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 ChannelSubmission
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/channels/submissions/{reference}/acknowledgeAcknowledge submissions of a channel
Records the channel's own identifier — the difference between "sent" and "done".
API key scope `channels:write` (or `channels:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
externalId | string | no |
note | string | no |
Returns 201 ChannelSubmission
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/channels/submissions/{reference}/cancelCancel submissions of a channel
API key scope `channels:write` (or `channels:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Returns 201 ChannelSubmission
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/channels/widget/snippetList channel widget snippet
The embed snippet for a passport, plus a preview URL.
API key scope `channels:read` (or `channels:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
dppId | query | string | yes |
channel | query | string | no |
targetId | query | string | no |
theme | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
previewUrl | string | yes |
note | string | yes |
html | string | yes |
targetId | string | yes |
scriptUrl | string | yes |
dppId | string | yes |
channel | string | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Webhooks
Subscribe an HTTPS endpoint to platform events. Deliveries are signed (x-dpp-signature), retried, and can be replayed.
GET/webhooksList webhooks
API key scope `webhooks:read` (or `webhooks:*`, `*`). Console users need the owner / admin role.
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
hasSecret | boolean | yes |
secretHint | string | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/webhooksCreate a webhook
API key scope `webhooks:write` (or `webhooks:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
url | string | yes |
secret | string | no |
events | string[] | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
secret | string | yes |
hasSecret | boolean | yes |
secretHint | string | yes |
active | boolean | yes |
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
url | string | yes |
events | any | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/webhooks/{id}Delete a webhook
API key scope `webhooks:write` (or `webhooks:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/webhooks/{id}/deliveriesGet webhook deliveries
Delivery attempts (status codes, failures, timestamps).
API key scope `webhooks:read` (or `webhooks:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 WebhookDelivery[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/webhooks/{id}/deliveries/{deliveryId}/replayReplay deliveries of a webhook
Re-queues a recorded delivery (requires a stored payload).
API key scope `webhooks:write` (or `webhooks:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
deliveryId | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
replayed | boolean | yes |
deliveryId | string | yes |
event | string | yes |
target | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/webhooks/eventsList webhook events
Supported webhook event catalogue (master spec §9.2).
API key scope `webhooks:read` (or `webhooks:*`, `*`). Console users need the owner / admin role.
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
events | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
EPCIS traceability
GS1 EPCIS 2.0 events for supply-chain traceability, with query and subscription support.
GET/epcis/eventsList EPCIS event events
API key scope `epcis:read` (or `epcis:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
bizStep | query | string | no |
type | query | string | no |
gtin | query | string | no |
from | query | string | no |
to | query | string | no |
limit | query | string | no |
offset | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
@context | string | map of string[] | yes |
type | string | yes |
schemaVersion | string | yes |
creationDate | string | yes |
count | number | yes |
filters | object | yes |
epcisBody | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/epcis/subscriptionsList EPCIS event subscriptions
API key scope `epcis:read` (or `epcis:*`, `*`).
Returns 200 EpcisSubscription[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/epcis/subscriptionsCreate EPCIS event subscriptions
API key scope `epcis:write` (or `epcis:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
query | string | yes |
signingSecret | string | yes |
active | boolean | yes |
id | string | yes |
organizationId | string | yes |
name | string | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
webhookId | string | yes |
destinationUrl | string | yes |
filters | any | yes |
notifiedCount | number | yes |
backfilledCount | number | yes |
lastNotifiedAt | string (date-time) | null | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/epcis/subscriptions/{id}Get EPCIS event subscriptions
API key scope `epcis:read` (or `epcis:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
query | string | yes |
id | string | yes |
organizationId | string | yes |
name | string | yes |
webhookId | string | yes |
destinationUrl | string | yes |
filters | any | yes |
active | boolean | yes |
createdBy | string | null | yes |
notifiedCount | number | yes |
backfilledCount | number | yes |
lastNotifiedAt | string (date-time) | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/epcis/subscriptions/{id}Update EPCIS event subscriptions
API key scope `epcis:write` (or `epcis:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
url | string | no |
secret | string | null | no |
filters | any | no |
active | boolean | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
query | string | yes |
id | string | yes |
organizationId | string | yes |
name | string | yes |
webhookId | string | yes |
destinationUrl | string | yes |
filters | any | yes |
active | boolean | yes |
createdBy | string | null | yes |
notifiedCount | number | yes |
backfilledCount | number | yes |
lastNotifiedAt | string (date-time) | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/epcis/subscriptions/{id}Delete EPCIS event subscriptions
API key scope `epcis:write` (or `epcis:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
id | string | yes |
webhookId | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/epcis/subscriptions/{id}/backfillAdd EPCIS event subscriptions backfill
Catch-up: pushes matching historical events (bounded) to a new subscriber.
API key scope `epcis:write` (or `epcis:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
from | string | no |
to | string | no |
limit | number | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
subscriptionId | string | yes |
scanned | number | yes |
queued | number | yes |
limit | number | yes |
backfilledTotal | number | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/epcis/subscriptions/{id}/deliveriesGet EPCIS event subscriptions deliveries
API key scope `epcis:read` (or `epcis:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
limit | query | string | no |
Returns 200 WebhookDelivery[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/epcis/subscriptions/{id}/deliveries/{deliveryId}/replayReplay subscriptions deliveries of a EPCIS event
Re-drives a failed push (e.g. the subscriber was down).
API key scope `epcis:write` (or `epcis:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
deliveryId | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
replayed | boolean | yes |
deliveryId | string | yes |
event | string | yes |
target | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/epcis/subscriptions/{id}/testTest subscriptions of a EPCIS event
Sends a sample capture document so the subscriber can verify endpoint + signature.
API key scope `epcis:write` (or `epcis:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
queued | boolean | yes |
sample | boolean | yes |
destination | string | yes |
eventId | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/epcis/subscriptions/presetsList EPCIS event subscriptions presets
Filter vocabulary + ready-made templates for the console.
API key scope `epcis:read` (or `epcis:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
presets | object | object | object | object[] | yes |
semantics | string | yes |
filterKeys | string[] | yes |
bizSteps | object[] | yes |
dispositions | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Data carriers (QR / GS1)
QR codes, GS1 Digital Link URIs, company prefixes and other data carriers that point to passports.
GET/carriers/{id}/analyticsGet carrier analytics
API key scope `carriers:read` (or `carriers:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
carrier | object | yes |
scanCount | number | yes |
byCountry | object[] | yes |
byDevice | object[] | yes |
byDay | object[] | yes |
recent | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/carriers/datamatrixCreate carrier datamatrix
GS1 DataMatrix carrier: the symbol regulated products actually carry (small enough for a cell or a device label). `encoding=element-string` encodes AIs with FNC1, `digital-link` encodes the resolvable URI.
API key scope `carriers:write` (or `carriers:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
encoding | "digital-link" | "element-string" | no |
serial | string | no |
batch | string | no |
scale | number | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
symbol | object | yes |
type | string | yes |
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
dppId | string | yes |
payload | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/carriers/nfcCreate carrier nfc
API key scope `carriers:write` (or `carriers:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
Returns 201 Carrier
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/carriers/qrCreate carrier qr
API key scope `carriers:write` (or `carriers:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
format | "url" | "gs1" | no |
Returns 201 Carrier
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/carriers/rfidCreate carrier rfid
API key scope `carriers:write` (or `carriers:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
filterValue | number | no |
serial | string | no |
Returns 201 Carrier
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/carriers/symbolCreate carrier symbol
Renders a symbol without persisting it (label design, pre-flight checks).
API key scope `carriers:write` (or `carriers:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
gtin | string | no |
serial | string | no |
batch | string | no |
encoding | "digital-link" | "element-string" | no |
scale | number | no |
Returns 201 RenderedSymbol
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/gs1/dpp/{id}/element-stringGet GS1 setting dpp element string
Builds the element string for a passport, using a carrier serial when present.
API key scope `gs1:read` (or `gs1:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
carrierId | string | null | yes |
gtin14 | string | yes |
elementString | string | yes |
raw | string | yes |
fixed | string[] | yes |
variable | string[] | yes |
issues | string[] | yes |
valid | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/gs1/parseCreate GS1 setting parse
Parses a scanned element string (parenthesised or raw with FNC1 separators).
API key scope `gs1:write` (or `gs1:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
elementString | string | no |
Returns 201 ParseResult
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/gs1/prefixesList GS1 setting prefixes
API key scope `gs1:read` (or `gs1:*`, `*`).
Returns 200 Gs1CompanyPrefixe2[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/gs1/prefixesCreate GS1 setting prefixes
API key scope `gs1:write` (or `gs1:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
prefix | string | no |
evidence | string | no |
Returns 201 Gs1CompanyPrefixe
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/gs1/prefixes/{id}Delete GS1 setting prefixes
API key scope `gs1:write` (or `gs1:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
removed | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/gs1/prefixes/policyList GS1 setting prefixes policy
API key scope `gs1:read` (or `gs1:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
enforcement | "off" | "warn" | "strict" | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Verifiable credentials
W3C verifiable credentials issued for published passports, their revocation, and public verification.
GET/credentialsList credentials
Issuance history, optionally scoped to one passport.
API key scope `credentials:read` (or `credentials:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
dppId | query | string | no |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
id | string | yes |
dppId | string | yes |
jti | string | yes |
kid | string | yes |
version | number | yes |
status | string | yes |
issuedAt | string (date-time) | yes |
expiresAt | string (date-time) | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
subjectHash | string | yes |
claims | any | yes |
token | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/credentials/{jti}/revokeRevoke a credential
Revocation is permanent and visible to every verifier.
API key scope `credentials:write` (or `credentials:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
jti | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
jti | string | yes |
status | string | yes |
revokedAt | string (date-time) | null | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/credentials/keysList credential keys
API key scope `credentials:read` (or `credentials:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
id | string | yes |
kid | string | yes |
alg | string | yes |
curvename | string | yes |
status | string | yes |
createdAt | string (date-time) | yes |
retiredAt | string (date-time) | null | yes |
publicJwk | any | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/credentials/keys/rotateRotate keys of credentials
Creates a new Ed25519 keypair; the previous key stays published for verification.
API key scope `credentials:write` (or `credentials:*`, `*`). Console users need the owner / admin role.
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
id | string | yes |
kid | string | yes |
publicJwk | map of any | yes |
privateJwk | map of any | yes |
privateJwkEncrypted | string | null | yes |
status | string | yes |
createdAt | string (date-time) | yes |
organizationId | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/credentials/public/{dppId}Get credential publicpublic
The newest valid credential for a published passport.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
dppId | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
jti | string | yes |
kid | string | yes |
token | string | yes |
claims | any | yes |
expiresAt | string (date-time) | yes |
200 Success400 Invalid input404 Not found429 Rate limit exceeded
GET/credentials/public/{dppId}/fileGet credential public filepublic
Download the signed JWT for independent verification or an evidence handoff.
Public: no API key needed.
| Parameter | In | Type | Required |
|---|---|---|---|
dppId | path | string | yes |
Returns 200 with a file (application/octet-stream).
200 File400 Invalid input404 Not found429 Rate limit exceeded
POST/credentials/verifyVerify credentialspublic
Verifies a credential token: signature, validity window, revocation, payload freshness.
Public: no API key needed.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
token | string | no |
credential | string | no |
Returns 201 object | object | object
201 Success400 Invalid input404 Not found429 Rate limit exceeded
Exports
Exports of passports and related data in CSV and JSON formats.
GET/exports/audit-logs.csvList export audit logs.csv
Immutable audit trail export (admin/owner only) with date filtering.
API key scope `exports:read` (or `exports:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
from | query | string | no |
to | query | string | no |
limit | query | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/exports/csrd.csvList export csrd.csv
CSRD-style portfolio sustainability summary (master §12 Milestone 3.2): per-category product/passport counts, compliance results and declared carbon footprint totals (values come from `environmental.carbon_footprint`). Counted by the database: the current version's footprint and the newest run of each passport.
API key scope `exports:read` (or `exports:*`, `*`). Console users need the owner / admin role.
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/exports/dpps.csvList export dpps.csv
API key scope `exports:read` (or `exports:*`, `*`).
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/exports/products.csvList export products.csv
API key scope `exports:read` (or `exports:*`, `*`).
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/exports/regulator/documents.csvList export regulator documents.csv
Evidence register with expiry status (auditor / regulator evidence trail).
API key scope `exports:read` (or `exports:*`, `*`).
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/exports/regulator/dpps.csvList export regulator dpps.csv
Regulator-facing passport summary (master spec §5 Module 7 — CSV per regulator template): identity, market status, latest compliance result and the environmental values present in the current immutable version. Each batch reads only the current version's environmental values and the newest run of each passport; every version (with its full data) and every run used to be loaded for the whole tenant.
API key scope `exports:read` (or `exports:*`, `*`).
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Bulk jobs
Asynchronous bulk operations (CSV import, bulk create, revalidation) and their status.
GET/jobs/{id}Get a job
API key scope `jobs:read` (or `jobs:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | no |
name | string | yes |
state | "active" | "unknown" | "failed" | "completed" | "delayed" | "prioritized" | "waiting" | "waiting-children" | yes |
progress | any | yes |
result | any | yes |
failedReason | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/jobs/bulkCreate job bulk
API key scope `jobs:write` (or `jobs:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
items | any[] | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
jobId | string | no |
status | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/jobs/dpp/{id}/revalidateRevalidate dpp of a job
API key scope `jobs:write` (or `jobs:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
jobId | string | no |
status | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/jobs/importImport jobs
API key scope `jobs:write` (or `jobs:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
csv | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
jobId | string | no |
status | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Workspaces
Workspaces for separating brands or business units inside one organization.
GET/workspacesList workspaces
API key scope `workspaces:read` (or `workspaces:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
productCount | number | yes |
id | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/workspacesCreate a workspace
API key scope `workspaces:write` (or `workspaces:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
brand | string | no |
Returns 201 Workspace
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/workspaces/{id}Get a workspace
API key scope `workspaces:read` (or `workspaces:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 Workspace
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/workspaces/{id}Update a workspace
API key scope `workspaces:write` (or `workspaces:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
brand | string | no |
Returns 200 Workspace
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/workspaces/{id}Delete a workspace
API key scope `workspaces:write` (or `workspaces:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
id | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Custom fields
Organization-specific passport fields added on top of a category's regulation schema.
GET/schema-extensionsList schema extensions
API key scope `schema-extensions:read` (or `schema-extensions:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
category | query | string | no |
Returns 200 SchemaExtension[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/schema-extensionsCreate a schema extension
API key scope `schema-extensions:write` (or `schema-extensions:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
Returns 201 SchemaExtension2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/schema-extensions/{id}Get a schema extension
API key scope `schema-extensions:read` (or `schema-extensions:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 SchemaExtension
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/schema-extensions/{id}Update a schema extension
API key scope `schema-extensions:write` (or `schema-extensions:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
key | string | no |
label | string | no |
category | string | null | no |
description | string | null | no |
type | "string" | "number" | "boolean" | "date" | "integer" | "enum" | no |
required | boolean | no |
enumValues | string[] | any | null | no |
pattern | string | null | no |
minValue | number | null | no |
maxValue | number | null | no |
unit | string | null | no |
active | boolean | no |
Returns 200 SchemaExtension
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/schema-extensions/{id}Delete a schema extension
API key scope `schema-extensions:write` (or `schema-extensions:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
id | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/schema-extensions/resolveResolve schema extensions
Merged view used by the no-code form renderer: definitions + JSON Schema fragment + UI hints.
API key scope `schema-extensions:read` (or `schema-extensions:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
category | query | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
properties | map of any | yes |
required | string[] | yes |
ui | map of any | yes |
count | number | yes |
category | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Translations
Translated passport content for the EU languages, with draft and approval steps.
GET/localization/coverageList translation coverage
Portfolio localization readiness per language and market.
API key scope `localization:read` (or `localization:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
markets | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
publishedPassports | number | yes |
localesAuthored | number | yes |
locales | object[] | yes |
machineDrafted | number | yes |
awaitingReview | number | yes |
machineDraftedLocales | string[] | yes |
markets | object[] | yes |
advisory | boolean | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/exportExport translations
Translator file for one language across the portfolio (`format=xliff|csv`, `missingOnly=true`).
API key scope `localization:read` (or `localization:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
locale | query | string | yes |
format | query | string | no |
missingOnly | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
filename | string | yes |
contentType | string | yes |
passports | number | yes |
units | number | yes |
content | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/glossaryList translation glossary
The reviewed glossary, the mask rules, the review checklist and the language notes.
API key scope `localization:read` (or `localization:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
version | string | yes |
methodVersion | string | yes |
terms | GlossaryEntry[] | yes |
patterns | object[] | yes |
reviewChecklist | object[] | yes |
caveat | string | yes |
note | string | yes |
updateNote | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/localization/importImport translations
Import a translator file (XLIFF 1.2/2.x or the exported CSV) as drafts. Never approves.
API key scope `localization:write` (or `localization:*`, `*`). Console users need the owner / admin / member role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
locale | string | yes |
format | string | no |
content | string | yes |
status | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
locale | string | yes |
status | string | yes |
passports | number | yes |
applied | number | yes |
skipped | number | yes |
results | object[] | yes |
note | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/localesList translation locales
EU-24 language catalogue and the status vocabulary of the workflow.
API key scope `localization:read` (or `localization:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
locales | LocaleInfo[] | yes |
statuses | any[] | yes |
productKeys | any[] | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/providerList translation provider
Is machine drafting available, on which model, and what does that mean for translations.
API key scope `localization:read` (or `localization:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
languages | number | yes |
machineDrafting | boolean | yes |
note | string | yes |
configured | boolean | yes |
provider | string | yes |
baseUrlHost | string | null | yes |
model | string | null | yes |
timeoutMs | number | yes |
hasApiKey | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/queueList translation queue
Drafts, translations ready for approval, and live translations whose source has changed.
API key scope `localization:read` (or `localization:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
items | any[] | yes |
counts | object | yes |
byLocale | object[] | yes |
checklist | object[] | yes |
caveat | string | yes |
note | string | yes |
reviewNote | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/requirementsList translation requirements
Advisory market → language expectations (`?markets=EU,DE`).
API key scope `localization:read` (or `localization:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
markets | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
markets | string[] | yes |
requirements | object[] | yes |
advisory | boolean | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/runsList translation runs
Run history (`?dppId=` to scope it to one passport).
API key scope `localization:read` (or `localization:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
dppId | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
runs | object[] | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/runs/{reference}Get translation runs
API key scope `localization:read` (or `localization:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/localization/translate-missingCreate translation translate missing
Portfolio drafting: draft the given languages for every passport (or the listed ones) that has no translation in them yet. Runs in the background; never touches an existing translation.
API key scope `localization:write` (or `localization:*`, `*`). Console users need the owner / admin / member role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
locales | string[] | no |
dppIds | string[] | no |
note | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
batch | string | yes |
queued | boolean | yes |
passports | number | yes |
languages | number | yes |
deferred | number | yes |
alreadyTranslated | number | yes |
note | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/localization/translation-capabilityList translation translation capability
What drafting means per language: script, review focus.
API key scope `localization:read` (or `localization:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
methodVersion | string | yes |
glossaryVersion | string | yes |
languages | object[] | yes |
supportedScripts | "latin" | "greek" | "cyrillic"[] | yes |
caveat | string | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Notifications
In-app notifications and digest preferences.
GET/notifications/digest/previewPreview digest of notifications
Renders what the next digest would contain (no email is sent).
API key scope `notifications:read` (or `notifications:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
recipients | string | null[] | yes |
subject | string | yes |
text | string | yes |
html | string | yes |
counts | object | yes |
allClear | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/notifications/digest/sendCreate notification digest send
API key scope `notifications:write` (or `notifications:*`, `*`). Console users need the owner / admin role.
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
sent | boolean | yes |
recipients | string[] | yes |
driver | string | yes |
delivered | boolean | yes |
counts | object | yes |
allClear | boolean | yes |
subject | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/notifications/settingsList notification settings
API key scope `notifications:read` (or `notifications:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
notifyEmail | string | null | yes |
lastDigestAt | string (date-time) | null | yes |
frequency | "off" | "daily" | "weekly" | yes |
recipients | string[] | yes |
expiryDays | number | yes |
includeSuppliers | boolean | yes |
includeLeases | boolean | yes |
supportedFrequencies | any[] | yes |
mailDriver | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/notifications/settingsUpdate settings
API key scope `notifications:write` (or `notifications:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
notifyEmail | string | null | yes |
lastDigestAt | string (date-time) | null | yes |
frequency | "off" | "daily" | "weekly" | yes |
recipients | string[] | yes |
expiryDays | number | yes |
includeSuppliers | boolean | yes |
includeLeases | boolean | yes |
supportedFrequencies | any[] | yes |
mailDriver | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Analytics
Portfolio metrics: passport counts by status, validation scores, coverage and evidence expiry.
GET/analytics/benchmarksList analytics report benchmarks
Anonymized fleet-wide category benchmarks (no tenant identifiers).
API key scope `analytics:read` (or `analytics:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
generatedAt | string | yes |
privacy | string | yes |
participatingOrganizations | number | yes |
categories | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/carbonList analytics report carbon
Portfolio footprint: coverage, totals, baselines in motion and where the emissions sit.
API key scope `analytics:read` (or `analytics:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
generatedAt | string | yes |
passports | number | yes |
scannedLimit | number | yes |
coverage | object | yes |
totals | object | yes |
baselines | object | yes |
byCategory | object[] | yes |
topContributors | object[] | yes |
issuedReports | object[] | yes |
methodologyVersion | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/chemicalsList analytics report chemicals
Portfolio classification position: hazards, obligations, unresolved components, reviews due.
API key scope `analytics:read` (or `analytics:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
generatedAt | string | yes |
passports | number | yes |
scannedLimit | number | yes |
coverage | object | yes |
classification | object | yes |
obligations | object | yes |
topHazards | object[] | yes |
byCategory | object[] | yes |
revisionsDue | number | yes |
clpSubsetVersion | string | yes |
method | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/constructionList analytics report construction
Construction portfolio: EPD coverage, module depth, declared GWP and the most common gaps.
API key scope `analytics:read` (or `analytics:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
category | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
generatedAt | string | yes |
methodVersion | string | yes |
standard | string | yes |
passports | number | yes |
scannedLimit | number | yes |
coverage | object | yes |
coreIndicatorCoveragePercent | number | yes |
gwp | object | yes |
modules | object[] | yes |
indicators | object[] | yes |
taxonomyVerdicts | map of number | yes |
gapSummary | object[] | yes |
byCategory | object[] | yes |
caveats | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/crosscheckList analytics report crosscheck
Portfolio view: unresolved disagreements, documents that could not be read, published verdicts.
API key scope `analytics:read` (or `analytics:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
crosscheckVersion | string | yes |
passports | number | yes |
openConflicts | number | yes |
criticalPassports | number | yes |
conflictsPerPassport | object[] | yes |
topPaths | object[] | yes |
documents | object | yes |
reports | object | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/materialsList analytics report materials
Portfolio durability: coverage, repairability classes, recycled content, unsubstantiated claims.
API key scope `analytics:read` (or `analytics:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
generatedAt | string | yes |
passports | number | yes |
scannedLimit | number | yes |
coverage | object | yes |
repairability | object | yes |
recycledContent | object | yes |
claims | object | yes |
byCategory | object[] | yes |
topMaterials | object[] | yes |
gapSummary | object[] | yes |
crmListVersion | string | yes |
methodVersion | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/portfolioList analytics report portfolio
API key scope `analytics:read` (or `analytics:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
generatedAt | string | yes |
products | object | yes |
passports | object | yes |
compliance | object | yes |
documents | object | yes |
scans | object | yes |
suppliers | object | yes |
workspaces | object | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/sourcingList analytics report sourcing
Portfolio view: fragile passports, concentrated materials, open decisions.
API key scope `analytics:read` (or `analytics:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
sourcingVersion | string | yes |
passportsWithAlternatives | number | yes |
openDecisions | number | yes |
shortlisted | number | yes |
adopted | number | yes |
blockedCandidates | number | yes |
assessments | number | yes |
bands | map of number | yes |
weakest | object[] | yes |
topMaterials | object[] | yes |
byPassport | object[] | yes |
caveat | string | yes |
emptyNote | string | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/analytics/substancesList analytics report substances
Portfolio substance exposure: where SVHCs are, and where the obligations are unmet.
API key scope `analytics:read` (or `analytics:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
generatedAt | string | yes |
passports | number | yes |
scannedLimit | number | yes |
coverage | object | yes |
findings | object | yes |
bySubstance | object[] | yes |
byCategory | object[] | yes |
propagationGaps | object[] | yes |
candidateListVersion | string | yes |
candidateListAge | SvhcListAge | yes |
methodVersion | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Audit log
The organization's tamper-evident audit trail of changes, its NDJSON export with sequence numbers and chain hashes, and streams that push it to a SIEM (signed HTTPS, Splunk HEC or Datadog).
GET/audit-logsList audit log
API key scope `audit-logs:read` (or `audit-logs:*`, `*`). Console users need the admin / owner role.
| Parameter | In | Type | Required |
|---|---|---|---|
entityType | query | string | no |
entityId | query | string | no |
action | query | string | no |
from | query | string | no |
to | query | string | no |
limit | query | string | yes |
offset | query | string | yes |
Returns 200 AuditLog[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/audit-logs/export.ndjsonList audit log entry export.ndjson
The audit chain as newline-delimited JSON for a SIEM or an archive: one entry per line in chain order, with its sequence number and hashes so the copy can be verified on its own. Page through a long history with `afterSeq` (the last `seq` received); at most 50,000 entries per request.
API key scope `audit-logs:read` (or `audit-logs:*`, `*`). Console users need the admin / owner role.
| Parameter | In | Type | Required |
|---|---|---|---|
afterSeq | query | string | yes |
from | query | string | no |
to | query | string | no |
limit | query | string | yes |
Returns 200 with a file (application/x-ndjson).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/audit-logs/verifyVerify audit log
Recompute the organization's audit hash chain (migration 0052) and report the first break. A break is a row whose content no longer matches its hash, a row that does not point at its predecessor's hash, or a gap in the sequence - an edited, reordered or deleted entry.
API key scope `audit-logs:read` (or `audit-logs:*`, `*`). Console users need the admin / owner role.
| Parameter | In | Type | Required |
|---|---|---|---|
anchorSeq | query | string | no |
anchorHash | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
ok | boolean | yes |
anchor | object | any | null | yes |
entries | number | yes |
unchained | number | yes |
headSeq | number | null | yes |
headHash | object | null | yes |
firstBreak | object | null | yes |
checkedAt | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/audit-streamsList audit streams
Streams with their cursor, the chain head and how far each one lags. Secrets are never returned.
API key scope `audit-streams:read` (or `audit-streams:*`, `*`). Console users need the owner / admin role.
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
headSeq | number | yes |
streams | any[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/audit-streamsCreate a audit stream
Creates a stream starting from now or from the beginning of the chain.
API key scope `audit-streams:write` (or `audit-streams:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
kind | "https" | "splunk-hec" | "datadog" | yes |
endpoint | string (uri) | yes |
secret | string | yes |
startFrom | "now" | "beginning" | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/audit-streams/{id}Get a audit stream
API key scope `audit-streams:read` (or `audit-streams:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/audit-streams/{id}Update a audit stream
Renames, re-points, re-keys, pauses or resumes a stream. A new host needs the secret again.
API key scope `audit-streams:write` (or `audit-streams:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
endpoint | string (uri) | no |
secret | string | no |
status | "active" | "paused" | no |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/audit-streams/{id}Delete a audit stream
API key scope `audit-streams:write` (or `audit-streams:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
id | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/audit-streams/{id}/testTest a audit stream
Sends one synthetic test event; the cursor does not move.
API key scope `audit-streams:write` (or `audit-streams:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
delivered | boolean | yes |
status | number | null | yes |
error | string | null | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Action inbox
Derived open work across supplier, evidence, validation, publication and translation workflows, with organization-scoped ownership and scheduling.
GET/action-inboxList action inbox
API key scope `action-inbox:read` (or `action-inbox:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
items | ActionItem[] | yes |
owners | object[] | yes |
limited | boolean | yes |
generatedAt | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/action-inbox/{key}/assignmentAdd action inbox assignment
Assign ownership, deadline and priority without dismissing the source workflow.
API key scope `action-inbox:write` (or `action-inbox:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
key | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
ownerId | string (uuid) | any | null | yes |
dueDate | string | any | null | yes |
priority | "normal" | "high" | "urgent" | yes |
note | string | yes |
expectedRevision | integer | yes |
Returns 201 ActionAssignment
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Regulations & compliance
Regulation packs, category schemas, compliance rules and deadlines, and consistency reports that check passports against them.
GET/compliance-rulesList compliance rules
API key scope `compliance-rules:read` (or `compliance-rules:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
category | query | string | no |
Returns 200 OrganizationRule[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/compliance-rulesCreate a compliance rule
API key scope `compliance-rules:write` (or `compliance-rules:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
Returns 201 OrganizationRule2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/compliance-rules/{id}Get a compliance rule
API key scope `compliance-rules:read` (or `compliance-rules:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 OrganizationRule
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/compliance-rules/{id}Update a compliance rule
API key scope `compliance-rules:write` (or `compliance-rules:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
code | string | no |
category | string | null | no |
severity | "error" | "info" | "warning" | no |
definition | map of any | no |
note | string | null | no |
active | boolean | no |
effectiveFrom | string | null | no |
effectiveTo | string | null | no |
Returns 200 OrganizationRule
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/compliance-rules/{id}Delete a compliance rule
API key scope `compliance-rules:write` (or `compliance-rules:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
id | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/compliance/deadlinesList compliance deadlines
Upcoming regulatory rule effective dates for the portfolio's categories.
API key scope `compliance:read` (or `compliance:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
horizonDays | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
calendarVersion | string | yes |
caveat | string | yes |
categoriesWithoutRulePack | string[] | no |
horizonDays | number | yes |
lookbackDays | number | yes |
categories | string[] | yes |
upcoming | Item[] | yes |
overdue | number | yes |
needsLegalConfirmation | Item[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/consistency-reportsList consistency reports
API key scope `consistency-reports:read` (or `consistency-reports:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
reference | any | yes |
versionNumber | any | yes |
status | any | yes |
verdict | any | yes |
crosscheckVersion | any | yes |
dppVersion | any | yes |
counts | object | yes |
documents | object | yes |
conflictingPaths | any | yes |
gaps | any | yes |
outOfScope | any | yes |
headline | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/consistency-reports/{reference}Get a consistency report
API key scope `consistency-reports:read` (or `consistency-reports:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
payload | any | yes |
reference | any | yes |
versionNumber | any | yes |
status | any | yes |
verdict | any | yes |
crosscheckVersion | any | yes |
dppVersion | any | yes |
counts | object | yes |
documents | object | yes |
conflictingPaths | any | yes |
gaps | any | yes |
outOfScope | any | yes |
headline | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/consistency-reports/{reference}/consistency.csvGet consistency report consistency.csv
API key scope `consistency-reports:read` (or `consistency-reports:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/consistency-reports/{reference}/revokeRevoke a consistency report
API key scope `consistency-reports:write` (or `consistency-reports:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
reference | any | yes |
versionNumber | any | yes |
status | any | yes |
verdict | any | yes |
crosscheckVersion | any | yes |
dppVersion | any | yes |
counts | object | yes |
documents | object | yes |
conflictingPaths | any | yes |
gaps | any | yes |
outOfScope | any | yes |
headline | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulationsList regulations
API key scope `regulations:read` (or `regulations:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
rules | number | yes |
category | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulations/{category}Get a regulation
API key scope `regulations:read` (or `regulations:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
category | path | string | yes |
Returns 200 RegulationPack
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulations/{category}/schemaGet regulation schema
The category's passport schema, with every field labelled and marked with what the effective EU rules demand (`x-required`, `x-requiredIf`) so a form can show it before the first validation.
API key scope `regulations:read` (or `regulations:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
category | path | string | yes |
market | query | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
category | string | yes |
manifest | any | yes |
schema | map of any | yes |
ui | UiField[] | yes |
source | string | yes |
fields | any[] | yes |
obligations | any[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulations/effectiveList regulation effective
API key scope `regulations:read` (or `regulations:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
market | query | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
category | string | yes |
code | string | no |
market | string | no |
version | string | no |
status | string | no |
legalSource | string | null | no |
effectiveFrom | string (date-time) | null | no |
effectiveTo | string (date-time) | null | no |
note | string | null | no |
source | "operator" | "bundled" | yes |
rules | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulations/effective/{category}Get regulation effective
API key scope `regulations:read` (or `regulations:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
category | path | string | yes |
market | query | string | yes |
Returns 200 object | object
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/analytics/regulatoryList regulatory analytics regulatory
Portfolio readiness: what is coming and how much of the portfolio it touches.
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
horizonDays | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
version | string | yes |
generatedAt | string | yes |
horizonDays | number | yes |
leadTimeDays | number | yes |
calendarCounts | object | yes |
watchedPacks | number | yes |
upcoming | object[] | yes |
changes | object[] | yes |
reportsIssued | number | yes |
lastReport | map of any | yes |
byCategory | object[] | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/reportsList regulatory reports
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
code | query | string | no |
Returns 200 map of any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/reports/{reference}Get regulatory reports
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 RegulatoryImpactReport
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/regulatory/reports/{reference}/revokeRevoke reports of a regulatory
API key scope `regulatory:write` (or `regulatory:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Returns 201 RegulatoryImpactReport
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/watch/calendarList regulatory watch calendar
Upcoming effective dates with the preparation horizon and the passports in scope.
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
horizonDays | query | string | no |
leadTimeDays | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
version | string | yes |
leadTimeDays | number | yes |
horizonDays | number | yes |
generatedAt | string | yes |
counts | object | yes |
entries | object[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/watch/changesList regulatory watch changes
Rule-level change feed, most breaking first.
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
code | query | string | no |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
code | string | yes |
category | string | yes |
fromVersion | string | null | yes |
toVersion | string | yes |
diff | RuleSetDiff | yes |
metadataChanges | string[] | yes |
requiredFieldsAdded | string[] | yes |
requiredFieldsRemoved | string[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/watch/impactList regulatory watch impact
Impact assessment: both rule sets evaluated over the same passport versions.
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
code | query | string | yes |
fromVersion | query | string | no |
toVersion | query | string | no |
limit | query | string | no |
Returns 200 object | object
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/regulatory/watch/impactCreate regulatory watch impact
Issues the assessment as an immutable change-management artifact (reference like IMP-EU-BATTERY-V1).
API key scope `regulatory:write` (or `regulatory:*`, `*`). Console users need the owner / admin / member role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
code | string | yes |
fromVersion | string | no |
toVersion | string | no |
limit | number | no |
leadTimeDays | number | no |
note | string | no |
Returns 201 RegulatoryImpactReport2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/watch/impact.csvList regulatory watch impact.csv
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
code | query | string | no |
reference | query | string | no |
fromVersion | query | string | no |
toVersion | query | string | no |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/watch/packs/{code}/rulesGet regulatory watch packs rules
The rules a pack version carries (from the latest snapshot, or the bundled pack).
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
code | path | string | yes |
version | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
code | string | yes |
version | string | null | yes |
source | string | yes |
rules | Rule[] | yes |
requiredFields | string[] | yes |
snapshot | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/regulatory/watch/snapshotsList regulatory watch snapshots
Latest captured state per pack, with the change counts behind it.
API key scope `regulatory:read` (or `regulatory:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
code | query | string | no |
category | query | string | no |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
code | string | yes |
category | string | yes |
market | string | yes |
source | string | yes |
current | object | yes |
previous | object | any | null | yes |
changed | boolean | yes |
changes | object | any | null | yes |
headline | string | null | yes |
history | number | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/regulatory/watch/syncSync watch of regulatory
Captures the current pack versions (idempotent) and reports what changed since the last capture.
API key scope `regulatory:write` (or `regulatory:*`, `*`). Console users need the owner / admin / member role.
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
version | string | yes |
watched | number | yes |
captured | number | yes |
unchanged | number | yes |
changes | object[] | yes |
packs | object[] | yes |
note | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Substances & materials
Substances of concern, material composition, chemical safety data (CLP/GHS, SDS) and SCIP notifications.
GET/chemicals/catalogueList chemical catalogue
The classification basis: H/P statements with their mixture rules, labelled substances, sections.
API key scope `chemicals:read` (or `chemicals:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
clpSubsetVersion | string | yes |
method | string | yes |
hazardStatements | HazardStatement[] | yes |
precautionaryStatements | object[] | yes |
classifiedSubstances | ClassifiedSubstance[] | yes |
counts | object | yes |
rulesMarkedForVerification | object[] | yes |
sdsSections | object[] | yes |
disclaimer | string | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/chemicals/reviews-dueList chemical reviews due
SDS revisions whose review date has passed (the Art. 31 "keep it current" duty).
API key scope `chemicals:read` (or `chemicals:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
due | number | yes |
revisions | map of any[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/materials-declarations/{reference}/revokeRevoke a materials declaration
API key scope `materials-declarations:write` (or `materials-declarations:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/materials/catalogueList material catalogue
The frameworks the assessment uses: weights, class bands, CRM list, recycled-content targets.
API key scope `materials:read` (or `materials:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
methodVersion | string | yes |
criteria | any[] | yes |
classes | any[] | yes |
classCaveat | string | yes |
crm | object | yes |
recycledContent | object | yes |
evidence | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/scip-dossiers/{reference}/revokeRevoke a scip dossier
API key scope `scip-dossiers:write` (or `scip-dossiers:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/sds-records/{reference}/revokeRevoke a sds record
API key scope `sds-records:write` (or `sds-records:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/substances/candidate-listList substance candidate list
The bundled candidate-list subset — so an operator can see what we screen against.
API key scope `substances:read` (or `substances:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
version | string | yes |
listAge | SvhcListAge | yes |
source | string | yes |
methodVersion | string | yes |
thresholdPercent | number | yes |
entries | number | yes |
authorisationListed | number | yes |
restrictions | number | yes |
groups | object[] | yes |
substances | CandidateEntry[] | yes |
restrictedSubstances | Restriction[] | yes |
disclaimer | string | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/substances/lookupList substance lookup
Single-substance lookup (candidate list, authorisation, restriction).
API key scope `substances:read` (or `substances:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
cas | query | string | no |
name | query | string | no |
Returns 200 object | object
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/substances/watchlistList substance watchlist
API key scope `substances:read` (or `substances:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
candidate | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/substances/watchlistCreate substance watchlist
API key scope `substances:write` (or `substances:*`, `*`). Console users need the owner / admin / member role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
cas | string | no |
name | string | no |
reason | string | no |
Response body (JSON, 201)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
candidate | boolean | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/substances/watchlist/{cas}Delete substance watchlist
API key scope `substances:write` (or `substances:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
cas | path | string | yes |
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
candidate | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Carbon & LCA
Carbon footprint estimates from bills of materials, carbon reports and life-cycle assessment results.
GET/carbon-estimatesList carbon estimates
Portfolio view: coverage, verdict mix and the materials that keep blocking a figure.
API key scope `carbon-estimates:read` (or `carbon-estimates:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
limit | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
passportsEstimated | number | yes |
estimates | number | yes |
verdictCounts | map of number | yes |
degradedRuns | number | yes |
averageMassCoveragePercent | number | null | yes |
totalKgCo2e | number | yes |
blockedMaterials | object[] | yes |
recent | object[] | yes |
factorTableVersion | string | yes |
note | string | yes |
disclaimer | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/carbon-estimates/{reference}Get a carbon estimate
API key scope `carbon-estimates:read` (or `carbon-estimates:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 CarbonEstimate
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/carbon-estimates/{reference}.csvGet a carbon estimate
API key scope `carbon-estimates:read` (or `carbon-estimates:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/carbon-estimates/{reference}/revokeRevoke a carbon estimate
A superseded run stays readable; revoking marks it as not usable for a decision.
API key scope `carbon-estimates:write` (or `carbon-estimates:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Returns 201 CarbonEstimate
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/carbon-estimates/catalogueList carbon estimate catalogue
Declared before `:reference` so "catalogue" is not read as a reference.
API key scope `carbon-estimates:read` (or `carbon-estimates:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
estimateVersion | string | yes |
factorTableVersion | string | yes |
methodology | object | yes |
caveat | string | yes |
disclaimer | string | yes |
rules | string[] | yes |
units | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/carbon-reports/{reference}/revokeRevoke a carbon report
API key scope `carbon-reports:write` (or `carbon-reports:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
reference | string | yes |
status | string | yes |
revokedAt | string (date-time) | null | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/lca/estimateEstimate LCA results
API key scope `lca:write` (or `lca:*`, `*`).
Request body (JSON)
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
method | string | yes |
methodology | string | yes |
functionalUnit | string | yes |
totalKgCo2e | number | yes |
uncertaintyPct | number | yes |
confidence | string | yes |
stages | object[] | yes |
hotspots | object[] | yes |
unresolvedInputs | string[] | yes |
recommendations | string[] | yes |
disclaimer | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/lca/factorsList LCA result factors
API key scope `lca:read` (or `lca:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
materials | map of number | yes |
grids | map of number | yes |
transport | map of number | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Construction products
Construction product records: declarations of performance (DoP) and environmental product declarations (EPD).
GET/construction/catalogueList construction catalogue
Reference data: modules, indicators, AVCP systems, Taxonomy screening, and the caveats.
API key scope `construction:read` (or `construction:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
methodVersion | string | yes |
standard | string | yes |
generatedAt | string | yes |
modules | EpdModule[] | yes |
indicators | EpdIndicator[] | yes |
counts | object | yes |
avcpSystems | object[] | yes |
taxonomy | object | yes |
caveats | object | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/dop-records/{reference}/revokeRevoke a dop record
API key scope `dop-records:write` (or `dop-records:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/epd-declarations/{reference}/revokeRevoke a epd declaration
API key scope `epd-declarations:write` (or `epd-declarations:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Cross-checks
Cross-checks that find conflicting values across a passport's evidence documents.
GET/crosscheck/catalogueList crosscheck catalogue
What is compared, what is out of scope, and what each outcome means.
API key scope `crosscheck:read` (or `crosscheck:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
version | string | yes |
outcomes | object[] | yes |
severities | object[] | yes |
tolerances | object | yes |
remediationHints | map of string | yes |
statuses | string[] | yes |
caveat | string | yes |
scopeNote | string | yes |
methods | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/crosscheck/conflictsList crosscheck conflicts
Conflicts across the tenant (or one passport with `?dppId=`).
API key scope `crosscheck:read` (or `crosscheck:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
dppId | query | string | no |
status | query | string | no |
includeCleared | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
conflicts | object[] | yes |
counts | object | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/crosscheck/conflicts/{conflictId}/dismissAdd crosscheck conflicts dismiss
Dismiss a conflict as expected (never allowed for a critical one).
API key scope `crosscheck:write` (or `crosscheck:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
conflictId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
id | any | yes |
path | any | yes |
outcome | any | yes |
severity | any | yes |
status | any | yes |
occurrences | any | yes |
values | any | yes |
hint | any | yes |
cleared | any | yes |
clearedAt | any | yes |
detectedAt | any | yes |
lastSeenAt | any | yes |
resolvedValue | any | yes |
resolutionNote | any | yes |
resolvedAt | any | yes |
remediation | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/crosscheck/conflicts/{conflictId}/resolveResolve conflicts of a crosscheck
Resolve a conflict by stating which value was accepted, and why.
API key scope `crosscheck:write` (or `crosscheck:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
conflictId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
value | string | no |
note | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
id | any | yes |
path | any | yes |
outcome | any | yes |
severity | any | yes |
status | any | yes |
occurrences | any | yes |
values | any | yes |
hint | any | yes |
cleared | any | yes |
clearedAt | any | yes |
detectedAt | any | yes |
lastSeenAt | any | yes |
resolvedValue | any | yes |
resolutionNote | any | yes |
resolvedAt | any | yes |
remediation | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/crosscheck/facts/{factId}Delete crosscheck facts
API key scope `crosscheck:write` (or `crosscheck:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
factId | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
id | string | yes |
deleted | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Responsible sourcing
Sourcing assessments and supplier substitution analysis.
GET/sourcing-assessmentsList sourcing assessments
API key scope `sourcing-assessments:read` (or `sourcing-assessments:*`, `*`).
Response body (JSON, 200)
An array of objects with these fields:
| Field | Type | Required |
|---|---|---|
reference | any | yes |
versionNumber | any | yes |
dppVersion | any | yes |
status | any | yes |
band | any | yes |
resilienceIndex | any | yes |
materials | any | yes |
suppliers | any | yes |
singleSourceCount | any | yes |
criticalExposureCount | any | yes |
unattributedCount | any | yes |
candidates | any | yes |
eligibleCandidates | any | yes |
blockedCandidates | any | yes |
openDecisions | any | yes |
adopted | any | yes |
headline | any | yes |
deductions | any | yes |
exposures | any | yes |
concentration | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/sourcing-assessments/{reference}Get a sourcing assessment
API key scope `sourcing-assessments:read` (or `sourcing-assessments:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
dppId | any | yes |
payload | any | yes |
reference | any | yes |
versionNumber | any | yes |
dppVersion | any | yes |
status | any | yes |
band | any | yes |
resilienceIndex | any | yes |
materials | any | yes |
suppliers | any | yes |
singleSourceCount | any | yes |
criticalExposureCount | any | yes |
unattributedCount | any | yes |
candidates | any | yes |
eligibleCandidates | any | yes |
blockedCandidates | any | yes |
openDecisions | any | yes |
adopted | any | yes |
headline | any | yes |
deductions | any | yes |
exposures | any | yes |
concentration | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/sourcing-assessments/{reference}/revokeRevoke a sourcing assessment
API key scope `sourcing-assessments:write` (or `sourcing-assessments:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
reason | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
reference | any | yes |
versionNumber | any | yes |
dppVersion | any | yes |
status | any | yes |
band | any | yes |
resilienceIndex | any | yes |
materials | any | yes |
suppliers | any | yes |
singleSourceCount | any | yes |
criticalExposureCount | any | yes |
unattributedCount | any | yes |
candidates | any | yes |
eligibleCandidates | any | yes |
blockedCandidates | any | yes |
openDecisions | any | yes |
adopted | any | yes |
headline | any | yes |
deductions | any | yes |
exposures | any | yes |
concentration | any | yes |
note | any | yes |
supersededBy | any | yes |
issuedAt | any | yes |
revokedAt | any | yes |
revokeReason | any | yes |
caveat | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/sourcing-assessments/{reference}/sourcing.csvGet sourcing assessment sourcing.csv
API key scope `sourcing-assessments:read` (or `sourcing-assessments:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
reference | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/sourcing/alternativesList sourcing alternatives
The decision queue (optionally one passport, one status).
API key scope `sourcing:read` (or `sourcing:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
dppId | query | string | no |
status | query | string | no |
includeCleared | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
alternatives | object[] | yes |
counts | object | yes |
actions | object[] | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/sourcing/alternatives/{alternativeId}/decisionAdd sourcing alternatives decision
Shortlist, reject or adopt an alternative (a rejection and an adoption need a reason).
API key scope `sourcing:write` (or `sourcing:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
alternativeId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
action | string | yes |
reason | string | no |
openRequest | boolean | no |
requestedFields | string[] | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
material | string | yes |
requestOpened | object | any | null | yes |
nextStep | string | null | yes |
caveat | string | yes |
id | any | yes |
dppId | any | yes |
fromSupplierId | any | yes |
toSupplierId | any | yes |
status | any | yes |
eligibility | any | yes |
score | any | yes |
criticality | any | yes |
exposureScore | any | yes |
blockers | any | yes |
conditions | any | yes |
improvements | any | yes |
whatDoesNotImprove | any | yes |
reasons | any | yes |
requestId | any | yes |
decisionReason | any | yes |
decidedAt | any | yes |
occurrences | any | yes |
cleared | any | yes |
lastSeenAt | any | yes |
firstSeenAt | any | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/sourcing/catalogueList sourcing catalogue
Criteria reference: the resilience dimensions, the criticality list and what each decision means.
API key scope `sourcing:read` (or `sourcing:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
version | string | yes |
dimensions | object[] | yes |
criticalMaterials | object[] | yes |
actions | object[] | yes |
eligibility | object[] | yes |
caveat | string | yes |
scopeNote | string | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/sourcing/critical-materialsList sourcing critical materials
The reviewed criticality list on its own.
API key scope `sourcing:read` (or `sourcing:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
materials | object[] | yes |
note | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/sourcing/materialList sourcing material
Explain one material name without running an analysis (normalisation + criticality).
API key scope `sourcing:read` (or `sourcing:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
name | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
material | string | yes |
normalised | string | yes |
criticality | object | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Ownership & leases
Ownership transfers, leases and custody of individual product items.
GET/leasesList leases
API key scope `leases:read` (or `leases:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
status | query | string | no |
expiringInDays | query | string | no |
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/leases/{id}/endAdd lease end
API key scope `leases:write` (or `leases:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
status | "cancelled" | "ended" | no |
endDate | string | no |
notes | string | no |
returnCustody | boolean | no |
Returns 201 LeaseContract
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Claims & evidence graph
Reusable claims backed by reviewed, hash-pinned evidence; which passport fields rely on them; which passports lose support when a document expires. Field-level provenance is under Passports.
GET/claimsList claims
Claims with derived support status and the number of passports relying on each (newest 1,000; filter by status or search text).
API key scope `claims:read` (or `claims:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
status | query | string | no |
q | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
claims | any[] | yes |
limited | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/claimsCreate a claim
Records a claim: one subject, attribute and value, optionally attributed to a supplier.
API key scope `claims:write` (or `claims:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
subjectKind | "product" | "component" | "material" | "batch" | "supplier" | "organization" | yes |
subject | string | yes |
attribute | string | yes |
value | string | number | boolean | yes |
unit | string | any | null | no |
supplierId | string (uuid) | any | null | no |
note | string | any | null | no |
Returns 201 Claim
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/claims/{id}Get a claim
One claim with its evidence (health, issuer, reviewer) and every passport field relying on it, with consistency.
API key scope `claims:read` (or `claims:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
supplier | object | yes |
support | object | no |
evidence | any[] | yes |
applications | any[] | yes |
id | string | yes |
organizationId | string | yes |
subjectKind | string | yes |
subject | string | yes |
attribute | string | yes |
value | any | yes |
unit | string | null | yes |
supplierId | string | null | yes |
status | string | yes |
note | string | null | yes |
revision | number | yes |
createdBy | string | null | yes |
updatedBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/claims/{id}Update a claim
Value changes and withdrawal affect every passport relying on the claim, so they are reserved to administrators.
API key scope `claims:write` (or `claims:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
expectedRevision | integer | yes |
value | string | number | boolean | no |
unit | string | any | null | no |
note | string | any | null | no |
status | "active" | "withdrawn" | no |
reason | string | yes |
Returns 200 Claim2
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/claims/{id}/applicationsAdd claim applications
Records that a passport field relies on the claim; the working revision must already state the claimed value.
API key scope `claims:write` (or `claims:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dppId | string (uuid) | yes |
fieldPath | string | yes |
Returns 201 ClaimApplication
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/claims/{id}/applications/{applicationId}Delete claim applications
Stops tracing a passport field to the claim; the passport value is not changed.
API key scope `claims:write` (or `claims:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
applicationId | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
removed | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/claims/{id}/evidenceAdd claim evidence
Attaches an accepted, current, unexpired document as support; its SHA-256 is pinned.
API key scope `claims:write` (or `claims:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
documentId | string (uuid) | yes |
page | integer | no |
quote | string | yes |
Returns 201 ClaimEvidence
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/claims/{id}/evidence/{evidenceId}Delete claim evidence
Detaches a document from the claim (administrators); the audit log keeps the reference.
API key scope `claims:write` (or `claims:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
evidenceId | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
removed | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/claims/from-factCreate claim from fact
Promotes an extracted document fact to a claim (the human approval step); attaches its accepted document and records reliance when the passport agrees.
API key scope `claims:write` (or `claims:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
factId | string (uuid) | yes |
subjectKind | "product" | "component" | "material" | "batch" | "supplier" | "organization" | no |
subject | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
claim | Claim | yes |
evidence | "attached" | "document_not_accepted" | "no_document" | yes |
reliance | "applied" | "value_differs" | "field_empty" | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/evidence-graph/documents/{id}/dependentsGet evidence graph documents dependents
Claims and passports that depend on one document, and which of them lose support with it.
API key scope `evidence-graph:read` (or `evidence-graph:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
document | object | yes |
claims | object[] | yes |
passports | any[] | yes |
passportCount | number | yes |
passportsAtRisk | number | yes |
limited | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/evidence-graph/expiringList evidence graph expiring
Evidence expiring within `days` (1-365, default 90), ranked by passports left without support.
API key scope `evidence-graph:read` (or `evidence-graph:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
days | query | string | no |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
horizonDays | number | yes |
documents | object[] | yes |
unrelied | number | yes |
limited | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Remediation campaigns
Work through an issued regulatory impact report: one item per passport failing the new rule set, supplier evidence requests, deterministic re-checks, waivers with reasons and a CSV audit report.
GET/remediation-campaignsList remediation campaigns
Campaigns (newest 200) with progress counts.
API key scope `remediation-campaigns:read` (or `remediation-campaigns:*`, `*`).
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/remediation-campaignsCreate a remediation campaign
Creates a campaign from an issued impact report: every passport in the category failing the new rule set becomes an item.
API key scope `remediation-campaigns:write` (or `remediation-campaigns:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
impactReference | string | yes |
title | string | no |
dueDate | string | any | null | no |
ownerId | string (uuid) | any | null | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
passportsInScope | number | yes |
items | number | yes |
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
createdBy | string | null | yes |
category | string | yes |
reference | string | yes |
code | string | yes |
title | string | yes |
fromVersion | string | null | yes |
toVersion | string | yes |
impactReference | string | yes |
dueDate | string | null | yes |
ownerId | string | null | yes |
lastCheckedAt | string (date-time) | null | yes |
closedAt | string (date-time) | null | yes |
closedBy | string | null | yes |
closeNote | string | null | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/remediation-campaigns/{id}Get a remediation campaign
One campaign with every item, its findings and whether the passport changed since the last check.
API key scope `remediation-campaigns:read` (or `remediation-campaigns:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
progress | object | yes |
items | any[] | yes |
id | string | yes |
organizationId | string | yes |
reference | string | yes |
title | string | yes |
impactReference | string | yes |
code | string | yes |
category | string | yes |
fromVersion | string | null | yes |
toVersion | string | yes |
status | string | yes |
dueDate | string | null | yes |
ownerId | string | null | yes |
lastCheckedAt | string (date-time) | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
closedAt | string (date-time) | null | yes |
closedBy | string | null | yes |
closeNote | string | null | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/remediation-campaigns/{id}/closeAdd remediation campaign close
Closes the campaign with a note; passports still failing are recorded as accepted at closing.
API key scope `remediation-campaigns:write` (or `remediation-campaigns:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
note | string | yes |
Returns 201 RemediationCampaign | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/remediation-campaigns/{id}/items/{itemId}Update remediation campaign items
Waives an item with a recorded reason, or reopens a waived one (administrators).
API key scope `remediation-campaigns:write` (or `remediation-campaigns:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
itemId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
expectedRevision | integer | yes |
status | "open" | "waived" | yes |
note | string | yes |
Returns 200 RemediationItem
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/remediation-campaigns/{id}/items/{itemId}/evidence-requestAdd remediation campaign items evidence request
Creates a supplier request for the fields this passport's findings name, plus one evidence document slot.
API key scope `remediation-campaigns:write` (or `remediation-campaigns:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
itemId | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
supplierId | string (uuid) | yes |
message | string | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
requestId | string | yes |
supplierId | string | yes |
requestedFields | string[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/remediation-campaigns/{id}/recheckAdd remediation campaign recheck
Deterministic re-check under the target rule set; the only way an item becomes resolved.
API key scope `remediation-campaigns:write` (or `remediation-campaigns:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
checked | number | yes |
resolved | number | yes |
reopened | number | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/remediation-campaigns/{id}/report.csvGet remediation campaign report.csv
Flat per-passport audit report; cells are neutralized against formula injection by the CSV hook.
API key scope `remediation-campaigns:read` (or `remediation-campaigns:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 200 with a file (text/csv).
200 File400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Integration hub
Reusable mappings from ERP / PIM / PLM exports and HTTPS feeds to product fields and passport data, with transforms, dry-run diffs, daily feeds and a recorded history of every run.
GET/data-mappingsList data mappings
Mappings of this organization; feed tokens are never returned, only whether one is set.
API key scope `data-mappings:read` (or `data-mappings:*`, `*`).
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/data-mappingsCreate a data mapping
Creates a mapping: key field, rules (source -> product field or passport data path, with transforms) and an optional daily HTTPS feed.
API key scope `data-mappings:write` (or `data-mappings:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
kind | "records" | "bom" | no |
sourceFormat | "csv" | "json" | "xml" | yes |
recordsPath | string | any | null | no |
keyField | "sku" | "gtin" | yes |
keySource | string | yes |
rules | object[] | yes |
feedUrl | string | any | null | no |
feedToken | string | any | null | no |
feedAuth | "none" | "bearer" | "basic" | "header" | "oauth2" | "sftp-password" | "sftp-key" | no |
feedAuthHeader | string | any | null | no |
feedOAuth | object | any | null | no |
feedMethod | "GET" | "POST" | no |
feedBody | string | any | null | no |
feedHostKey | string | any | null | no |
feedSchedule | "manual" | "hourly" | "daily" | no |
createMissing | object | any | null | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/data-mappings/{id}Get a data mapping
One mapping with its 50 most recent runs.
API key scope `data-mappings:read` (or `data-mappings:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/data-mappings/{id}Update a data mapping
Changes a mapping (revision-checked). An empty feedToken clears the stored token.
API key scope `data-mappings:write` (or `data-mappings:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
kind | "records" | "bom" | no |
sourceFormat | "csv" | "json" | "xml" | no |
recordsPath | string | any | null | no |
keyField | "sku" | "gtin" | no |
keySource | string | no |
rules | object[] | no |
feedUrl | string | any | null | no |
feedToken | string | any | null | no |
feedAuth | "none" | "bearer" | "basic" | "header" | "oauth2" | "sftp-password" | "sftp-key" | no |
feedAuthHeader | string | any | null | no |
feedOAuth | object | any | null | no |
feedMethod | "GET" | "POST" | no |
feedBody | string | any | null | no |
feedHostKey | string | any | null | no |
feedSchedule | "manual" | "hourly" | "daily" | no |
createMissing | object | any | null | no |
expectedRevision | integer | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/data-mappings/{id}Delete a data mapping
API key scope `data-mappings:write` (or `data-mappings:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
removed | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/data-mappings/{id}/push-tokenAdd data mapping push token
Issues or replaces the token the source system uses to push records to this mapping; shown once.
API key scope `data-mappings:write` (or `data-mappings:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
token | string | yes |
prefix | string | yes |
endpoint | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/data-mappings/{id}/push-tokenDelete data mapping push token
API key scope `data-mappings:write` (or `data-mappings:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
revoked | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/data-mappings/{id}/runsAdd data mapping runs
Runs the mapping over uploaded file content or its feed. A dry run returns the per-record diff without writing.
API key scope `data-mappings:write` (or `data-mappings:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
dryRun | boolean | yes |
content | string | no |
feed | boolean | no |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
runId | string | yes |
dryRun | boolean | yes |
summary | object | yes |
outcomes | Outcome[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/data-mappings/{id}/runs/{runId}Get data mapping runs
One recorded run with its per-record outcomes (first 1,000).
API key scope `data-mappings:read` (or `data-mappings:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
runId | path | string | yes |
Returns 200 DataMappingRun
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/data-mappings/{id}/test-feedAdd data mapping test feed
Reads the feed without writing: whether it answers, its record count and fields, and (SFTP) the host key presented.
API key scope `data-mappings:write` (or `data-mappings:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Returns 201 object | object
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/data-mappings/templatesList data mapping templates
Starting points for SAP, Dynamics 365, NetSuite, Odoo, Akeneo, Pimcore, Salsify, Plytix and PLM BOM exports.
API key scope `data-mappings:read` (or `data-mappings:*`, `*`).
Returns 200 MappingTemplate[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Lifecycle reports
Repairs, inspections, recycling and returns reported by credentialed partners (POST /regulator/passports/{id}/reports with an approved grant token), and the issuer's accept / reject decisions.
GET/lifecycle-reportsList lifecycle reports
Reports from credentialed third parties (pending, accepted or rejected).
API key scope `lifecycle-reports:read` (or `lifecycle-reports:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
status | query | string | no |
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/lifecycle-reports/{id}/decisionAdd lifecycle report decision
Accepts (records the lifecycle event and moves the item status) or rejects a report with a reason. Administrators only, since a recycled battery closes its passport.
API key scope `lifecycle-reports:write` (or `lifecycle-reports:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
decision | "accept" | "reject" | yes |
reason | string | yes |
Returns 201 LifecycleReport
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Chain of custody
Custody ledgers per material and ISO 22095 model (identity preserved, segregated, controlled blending, mass balance, book and claim): inputs, allocations to passports, adjustments and reversals, refused when the ledger cannot cover them; a passport's custody statement.
GET/custody/accountsList custody accounts
Accounts with their credit and quantity balances.
API key scope `custody:read` (or `custody:*`, `*`).
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/custody/accountsCreate custody accounts
Opens an account: one material under one custody model (identity preserved, segregated, controlled blending, mass balance, book and claim).
API key scope `custody:write` (or `custody:*`, `*`). Console users need the owner / admin / member role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | yes |
material | string | yes |
model | "identity_preserved" | "segregated" | "controlled_blending" | "mass_balance" | "book_and_claim" | yes |
claim | "recycled" | "bio_based" | "certified_sustainable" | "responsibly_sourced" | no |
scheme | string | any | null | no |
certificateDocumentId | string (uuid) | any | null | no |
site | string | any | null | no |
unit | "kg" | "t" | "l" | "m3" | "unit" | no |
creditValidityDays | integer | any | null | no |
Returns 201 CustodyAccount
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/custody/accounts/{id}Get custody accounts
One account with its full ledger, lots and balances as of today.
API key scope `custody:read` (or `custody:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
modelInfo | object | yes |
state | LedgerState | yes |
entries | any[] | yes |
id | string | yes |
organizationId | string | yes |
name | string | yes |
material | string | yes |
model | string | yes |
claim | string | yes |
scheme | string | null | yes |
certificateDocumentId | string | null | yes |
site | string | null | yes |
unit | string | yes |
creditValidityDays | number | null | yes |
status | string | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/custody/accounts/{id}Update custody accounts
API key scope `custody:write` (or `custody:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
scheme | string | any | null | no |
certificateDocumentId | string (uuid) | any | null | no |
site | string | any | null | no |
creditValidityDays | integer | any | null | no |
status | "active" | "closed" | no |
Returns 200 CustodyAccount2
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/custody/accounts/{id}/entriesAdd custody accounts entries
Records an input, an allocation (to a passport or batch) or an adjustment; refused when the ledger cannot cover it.
API key scope `custody:write` (or `custody:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
object | object | object
Returns 201 CustodyEntry2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/custody/entries/{id}/reverseAdd custody entries reverse
Corrects an entry by recording its reversal; the entry itself is never changed.
API key scope `custody:write` (or `custody:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
note | string | yes |
Returns 201 CustodyEntry
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Product models
Models (styles, families) and their variants: matrix generation of variant products and passports, shared passport data propagated as new versions, linking existing products.
GET/product-modelsList product models
Models with how many variants each has.
API key scope `product-models:read` (or `product-models:*`, `*`).
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/product-modelsCreate a product model
Creates a model: category, brand, the axes its variants differ by, and the passport data they share.
API key scope `product-models:write` (or `product-models:*`, `*`). Console users need the owner / admin / member role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
code | string | yes |
name | string | yes |
category | string | yes |
brand | string | any | null | no |
workspaceId | string (uuid) | any | null | no |
variantAxes | string[] | yes |
sharedData | map of any | yes |
Returns 201 ProductModel2
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/product-models/{id}Get a product model
The model with its variants, their passports and serialized item counts.
API key scope `product-models:read` (or `product-models:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
variants | object[] | yes |
id | string | yes |
organizationId | string | yes |
code | string | yes |
name | string | yes |
category | string | yes |
brand | string | null | yes |
workspaceId | string | null | yes |
variantAxes | any | yes |
sharedData | any | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
PATCH/product-models/{id}Update a product model
API key scope `product-models:write` (or `product-models:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
name | string | no |
brand | string | any | null | no |
workspaceId | string (uuid) | any | null | no |
sharedData | map of any | no |
Returns 200 ProductModel
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/product-models/{id}Delete a product model
Deletes the model; its variants stay as ungrouped products and passports.
API key scope `product-models:write` (or `product-models:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
deleted | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/product-models/{id}/propagateAdd product model propagate
Writes the shared data into every variant passport where it differs, as new versions (dryRun previews).
API key scope `product-models:write` (or `product-models:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
object
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
dryRun | boolean | yes |
summary | map of number | yes |
outcomes | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/product-models/{id}/variantsAdd product model variants
Creates the missing variants of a value matrix (colour x size ...), each with its product and passport.
API key scope `product-models:write` (or `product-models:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
| Field | Type | Required |
|---|---|---|
values | map of string[] | yes |
skuPattern | string | yes |
namePattern | string | no |
gtins | string[] | no |
createPassports | boolean | yes |
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
summary | object | yes |
results | object[] | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/product-models/{id}/variants/{productId}Delete product model variants
API key scope `product-models:write` (or `product-models:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
productId | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
unlinked | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/product-models/{id}/variants/linkAdd product model variants link
Makes an existing product of the same category a variant of this model.
API key scope `product-models:write` (or `product-models:*`, `*`). Console users need the owner / admin / member role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Request body (JSON)
object
Response body (JSON, 201)
| Field | Type | Required |
|---|---|---|
linked | boolean | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Organization identity
LEI, VAT and domain checked against GLEIF, VIES and DNS for the organization and its suppliers; verification of verifiable credentials (VC-JWT, eddsa-jcs-2022) with did:web, did:key and did:jwk issuers and status lists.
GET/identityList identity
The organization's DID, its DID document URL and its identifiers with their last registry answer.
API key scope `identity:read` (or `identity:*`, `*`).
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
did | string | yes |
didDocumentUrl | string | yes |
verifications | any[] | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/identity/credentials/verifyVerify credentials of identity
Verifies a credential (VC-JWT or eddsa-jcs-2022 Data Integrity) without storing it.
API key scope `identity:write` (or `identity:*`, `*`).
Request body (JSON)
| Field | Type | Required |
|---|---|---|
credential | string | map of any | yes |
Returns 201 CredentialVerification
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
GET/identity/suppliers/{supplierId}Get identity suppliers
A supplier's identifiers and their registry answers.
API key scope `identity:read` (or `identity:*`, `*`).
| Parameter | In | Type | Required |
|---|---|---|---|
supplierId | path | string | yes |
Returns 200 any[]
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/identity/verificationsCreate identity verifications
Adds an LEI, VAT number or domain of the organization (or of a supplier, with supplierId) and checks it.
API key scope `identity:write` (or `identity:*`, `*`). Console users need the owner / admin role.
Request body (JSON)
| Field | Type | Required |
|---|---|---|
scheme | "lei" | "vat" | "domain" | yes |
value | string | yes |
supplierId | string (uuid) | any | null | no |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
DELETE/identity/verifications/{id}Delete identity verifications
API key scope `identity:write` (or `identity:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
Response body (JSON, 200)
| Field | Type | Required |
|---|---|---|
removed | boolean | yes |
200 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/identity/verifications/{id}/checkAdd identity verifications check
Asks the registry again (for a domain: looks for the TXT record).
API key scope `identity:write` (or `identity:*`, `*`). Console users need the owner / admin role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
POST/identity/verifications/{id}/confirmAdd identity verifications confirm
An owner confirms a registry record whose legal name differs from the organization's (a trading name, a group entity).
API key scope `identity:write` (or `identity:*`, `*`). Console users need the owner role.
| Parameter | In | Type | Required |
|---|---|---|---|
id | path | string | yes |
201 Success400 Invalid input401 Missing or invalid API key403 Scope, role or plan limit does not allow this404 Not found429 Rate limit exceeded
Schemas
Models returned or accepted by more than one operation, described from the API source. The complete JSON Schemas are in the OpenAPI file.
ActionAssignment9 fields
| Field | Type | Required |
|---|---|---|
organizationId | string | yes |
sourceKey | string | yes |
ownerId | string | null | yes |
dueDate | string | null | yes |
priority | "high" | "normal" | "urgent" | yes |
note | string | yes |
revision | number | yes |
updatedBy | string | yes |
updatedAt | string (date-time) | yes |
ActionItem10 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
kind | "component" | "evidence_review" | "evidence_expiry" | "supplier_response" | "publication" | "translation" | "validation" | "evidence_link" | "claim_support" | "claim_mismatch" | "remediation" | "lifecycle_report" | yes |
title | string | yes |
href | string | yes |
createdAt | string | yes |
dueDate | string | null | yes |
priority | "high" | "normal" | "urgent" | yes |
ownerId | string | null | yes |
note | string | yes |
revision | number | yes |
AssemblyNode7 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
name | string | yes |
quantity | number | yes |
massKg | number | null | yes |
child | object | any | null | yes |
externalReference | string | null | yes |
children | any[] | yes |
AuditLog12 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
actorId | string | null | yes |
action | string | yes |
entityType | string | yes |
entityId | string | yes |
before | any | yes |
after | any | yes |
createdAt | string (date-time) | yes |
chainSeq | number | null | yes |
prevHash | string | null | yes |
entryHash | string | null | yes |
BomProposalResult8 fields
| Field | Type | Required |
|---|---|---|
placed | PlacedBomLine[] | yes |
unresolved | UnresolvedBomLine[] | yes |
ignored | IgnoredBomField[] | yes |
unplaced | UnplacedBomLine[] | yes |
duplicates | object[] | yes |
totals | object | yes |
lineCoveragePercent | number | null | yes |
massCoveragePercent | number | null | yes |
CandidateAssessment10 fields
| Field | Type | Required |
|---|---|---|
supplierId | string | yes |
name | string | yes |
country | string | null | yes |
eligibility | "conditional" | "eligible" | "ineligible" | yes |
blockers | string[] | yes |
conditions | string[] | yes |
score | number | yes |
reasons | string[] | yes |
improvements | string[] | yes |
whatDoesNotImprove | string[] | yes |
CandidateEntry8 fields
| Field | Type | Required |
|---|---|---|
cas | string | yes |
ec | string | no |
name | string | yes |
reason | string | yes |
addedOn | string | no |
specificLimitPercent | number | no |
annexXiv | boolean | no |
group | string | no |
CarbonBaseline5 fields
| Field | Type | Required |
|---|---|---|
footprintKgCo2e | number | yes |
reductionTargetPercent | number | null | no |
note | string | null | no |
setAt | string | yes |
setBy | string | null | no |
CarbonEstimate42 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
reference | string | yes |
versionNumber | number | yes |
status | string | yes |
estimateVersion | string | yes |
factorTableVersion | string | yes |
dppVersion | number | yes |
source | string | yes |
documentId | string | null | yes |
provider | string | yes |
model | string | null | yes |
degraded | boolean | yes |
providerError | string | null | yes |
latencyMs | number | null | yes |
bomCharacters | number | yes |
parsedLines | number | yes |
mappableLines | number | yes |
placedLines | number | yes |
unresolvedCount | number | yes |
unplacedCount | number | yes |
ignoredCount | number | yes |
totalKgCo2e | string | yes |
a1KgCo2e | string | yes |
a2KgCo2e | string | yes |
a3KgCo2e | string | yes |
massKg | string | yes |
energyKwh | string | yes |
lineCoveragePercent | string | null | yes |
massCoveragePercent | string | null | yes |
declaredKgCo2e | string | null | yes |
declaredPath | string | null | yes |
verdict | string | yes |
signals | any | yes |
payload | any | yes |
note | string | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
revokedAt | string (date-time) | null | yes |
and 2 more fields (see openapi.json)
CarbonEstimateInput7 fields
| Field | Type | Required |
|---|---|---|
bom | string | no |
documentId | string | no |
dryRun | boolean | no |
transport | LcaTransportInput[] | no |
manufacturingElectricityKwh | number | no |
manufactureCountry | string | no |
note | string | no |
CarbonStatement11 fields
| Field | Type | Required |
|---|---|---|
value | number | yes |
unit | string | yes |
path | string | yes |
methodology | string | null | yes |
boundary | string | null | yes |
stagesExcluded | string | null | yes |
functionalUnit | string | null | yes |
referenceYear | number | null | yes |
source | string | null | yes |
reportUrl | string | null | yes |
verification | object | yes |
Carrier6 fields
| Field | Type | Required |
|---|---|---|
type | string | yes |
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
dppId | string | yes |
payload | string | yes |
ChainNode14 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
tier | number | yes |
entity | string | yes |
role | "supplier" | "delegated-supplier" | "declared-upstream" | yes |
identityWithheld | boolean | no |
supplierId | string | no |
country | string | null | no |
trustScore | number | null | no |
status | "declared" | "responded" | "pending" | yes |
declaredCarbonKgCo2e | number | null | no |
recycledContentPercent | number | null | no |
materials | string[] | no |
substances | any | no |
children | any[] | yes |
ChannelAttribute13 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
label | string | yes |
type | "number" | "boolean" | "date" | "url" | "gtin" | "text" | "integer" | "enum" | yes |
paths | string[] | no |
derived | "publishedAt" | "channelCategory" | "passportUrl" | "digitalLinkUrl" | "qrImageUrl" | "complianceStatus" | "complianceScore" | "complianceGrade" | "complianceFreshness" | "carbonFootprintKgCo2e" | "recycledContentPercent" | "repairabilityClass" | "repairabilityScore" | "sparePartsYears" | "softwareSupportYears" | "svhcPresent" | "scipNumber" | "passportVersion" | "generatedAt" | no |
required | boolean | no |
requiredWhen | object | no |
enumValues | string[] | no |
maxLength | number | no |
min | number | no |
max | number | no |
unit | string | no |
note | string | no |
ChannelEndpoint12 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
channel | string | yes |
webhookId | string | null | yes |
mode | string | yes |
enabled | boolean | yes |
externalAccount | string | null | yes |
notes | string | null | yes |
lastSyncAt | string (date-time) | null | yes |
ChannelFeed10 fields
| Field | Type | Required |
|---|---|---|
channel | string | yes |
channelLabel | string | yes |
profileVersion | string | yes |
generatedAt | string | yes |
includeOptional | boolean | yes |
columns | object[] | yes |
products | object[] | yes |
skipped | object[] | yes |
counts | object | yes |
caveat | string | yes |
ChannelRow12 fields
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
sku | string | null | yes |
name | string | null | yes |
category | string | yes |
gtin | string | null | yes |
version | number | yes |
published | boolean | yes |
publishedAt | string | null | yes |
ready | boolean | yes |
blocking | string[] | yes |
counts | object | yes |
attributes | ResolvedAttribute[] | yes |
ChannelSubmission29 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
reference | string | yes |
versionNumber | number | yes |
channel | string | yes |
profileVersion | string | yes |
status | string | yes |
format | string | yes |
includeOptional | boolean | yes |
products | number | yes |
readyProducts | number | yes |
skippedProducts | number | yes |
attributesFilled | number | yes |
attributesMissing | number | yes |
requiredMissing | number | yes |
payloadHash | string | yes |
payload | any | yes |
rows | any | yes |
endpointId | string | null | yes |
webhookId | string | null | yes |
dispatched | boolean | yes |
externalId | string | null | yes |
acknowledgedAt | string (date-time) | null | yes |
acknowledgedBy | string | null | yes |
note | string | null | yes |
cancelledAt | string (date-time) | null | yes |
cancelledReason | string | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
ChemicalObligation5 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
regulation | string | yes |
requirement | string | yes |
status | "satisfied" | "outstanding" | "not-applicable" | yes |
note | string | yes |
Claim15 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
note | string | null | yes |
revision | number | yes |
subjectKind | string | yes |
subject | string | yes |
attribute | string | yes |
value | any | yes |
unit | string | null | yes |
supplierId | string | null | yes |
updatedBy | string | null | yes |
Claim215 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
subjectKind | string | yes |
subject | string | yes |
attribute | string | yes |
value | any | yes |
unit | string | null | yes |
supplierId | string | null | yes |
status | string | yes |
note | string | null | yes |
revision | number | yes |
createdBy | string | null | yes |
updatedBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
ClaimApplication7 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
dppId | string | yes |
claimId | string | yes |
fieldPath | string | yes |
ClaimEvidence10 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
claimId | string | yes |
documentId | string | yes |
documentSha256 | string | yes |
documentTitle | string | yes |
page | number | null | yes |
quote | string | yes |
ClassifiedSubstance8 fields
| Field | Type | Required |
|---|---|---|
cas | string | yes |
ec | string | no |
name | string | yes |
iupacName | string | no |
statements | string[] | yes |
sclPercent | object[] | no |
transport | object | no |
ewcCodes | object[] | no |
ConnectInput7 fields
| Field | Type | Required |
|---|---|---|
provider | string | no |
storeUrl | string | no |
accessToken | string | no |
clientId | string | no |
clientSecret | string | no |
consumerKey | string | no |
consumerSecret | string | no |
ConstructionGap5 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
severity | "error" | "info" | "warning" | yes |
requirement | string | yes |
clause | string | yes |
detail | string | yes |
ConstructionVerification6 fields
| Field | Type | Required |
|---|---|---|
programmeOperator | string | null | yes |
registration | string | null | yes |
validUntil | string | null | yes |
thirdPartyVerified | boolean | null | yes |
verifier | string | null | yes |
pcr | string | null | yes |
CredentialCheck3 fields
| Field | Type | Required |
|---|---|---|
name | string | yes |
ok | boolean | yes |
detail | string | no |
CredentialCheckResult3 fields
| Field | Type | Required |
|---|---|---|
name | string | yes |
ok | boolean | yes |
detail | string | yes |
CredentialVerification13 fields
| Field | Type | Required |
|---|---|---|
valid | boolean | yes |
format | "unknown" | "vc-jwt" | "data-integrity" | yes |
issuer | string | null | yes |
issuerName | string | null | yes |
issuerVerified | object | any | null | yes |
types | string[] | yes |
subject | any | yes |
validFrom | string | null | yes |
validUntil | string | null | yes |
status | "active" | "unknown" | "revoked" | "suspended" | "not-listed" | yes |
bindsDocument | boolean | null | yes |
checks | CredentialCheckResult[] | yes |
verifiedAt | string | yes |
CriticalMaterial6 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
name | string | yes |
strategic | boolean | yes |
critical | boolean | yes |
supplyRisk | string | yes |
typicalUse | string | yes |
CrosscheckSummary7 fields
| Field | Type | Required |
|---|---|---|
paths | number | yes |
facts | number | yes |
conflicts | number | yes |
gaps | number | yes |
agreeing | number | yes |
bySeverity | object | yes |
verdict | "consistent" | "review" | "conflicting" | "unassessed" | yes |
CsvImportRequest4 fields
| Field | Type | Required |
|---|---|---|
rows | ProductImportRow[] | yes |
defaults | ImportDefaults | no |
onDuplicate | "update" | "skip" | no |
dryRun | boolean | no |
CustodyAccount15 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
unit | string | yes |
material | string | yes |
model | string | yes |
claim | string | yes |
scheme | string | null | yes |
certificateDocumentId | string | null | yes |
site | string | null | yes |
creditValidityDays | number | null | yes |
CustodyAccount215 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
material | string | yes |
model | string | yes |
claim | string | yes |
scheme | string | null | yes |
certificateDocumentId | string | null | yes |
site | string | null | yes |
unit | string | yes |
creditValidityDays | number | null | yes |
status | string | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
CustodyEntry21 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
kind | string | yes |
createdBy | string | null | yes |
dppId | string | null | yes |
reference | string | null | yes |
note | string | null | yes |
supplierId | string | null | yes |
documentId | string | null | yes |
batch | string | null | yes |
quantity | string | yes |
accountId | string | yes |
occurredOn | string | yes |
credits | string | yes |
certifiedShare | string | null | yes |
conversionFactor | string | null | yes |
expiresOn | string | null | yes |
inputEntryId | string | null | yes |
reversalOf | string | null | yes |
reversedBy | string | null | yes |
CustodyEntry221 fields
| Field | Type | Required |
|---|---|---|
quantity | number | yes |
credits | number | yes |
certifiedShare | number | null | yes |
conversionFactor | number | null | yes |
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
kind | string | yes |
createdBy | string | null | yes |
dppId | string | null | yes |
reference | string | null | yes |
note | string | null | yes |
supplierId | string | null | yes |
documentId | string | null | yes |
batch | string | null | yes |
accountId | string | yes |
occurredOn | string | yes |
expiresOn | string | null | yes |
inputEntryId | string | null | yes |
reversalOf | string | null | yes |
reversedBy | string | null | yes |
DataMappingRun12 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
mappingId | string | yes |
mappingRevision | number | yes |
trigger | string | yes |
dryRun | boolean | yes |
status | string | yes |
summary | any | yes |
outcomes | any | yes |
error | string | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
DeclaredComparison5 fields
| Field | Type | Required |
|---|---|---|
declaredKgCo2e | number | null | yes |
declaredPath | string | null | yes |
estimatePercentOfDeclared | number | null | yes |
verdict | "plausible" | "estimate-higher" | "estimate-lower" | "no-declaration" | yes |
note | string | yes |
DerivedFact5 fields
| Field | Type | Required |
|---|---|---|
path | "svhc.present" | "chemicals.hazardous" | "recycled_content.claimed" | "repairability.claimed" | yes |
derived | boolean | yes |
declared | boolean | null | yes |
effective | boolean | yes |
reason | string | yes |
DigestSettingsInput5 fields
| Field | Type | Required |
|---|---|---|
frequency | "off" | "daily" | "weekly" | no |
recipients | string[] | no |
expiryDays | number | no |
includeSuppliers | boolean | no |
includeLeases | boolean | no |
DisplayColumn3 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
label | string | yes |
unit | string | null | yes |
DisplayField5 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
path | string | yes |
label | string | yes |
help | string | no |
value | object | object | object | object | object | object | object | yes |
DisplayGroup6 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
path | string | yes |
label | string | yes |
fields | DisplayField[] | yes |
tables | DisplayTable[] | yes |
groups | any[] | yes |
DisplayTable5 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
path | string | yes |
label | string | yes |
columns | DisplayColumn[] | yes |
rows | object | object | object | object | object | object | object | any | null[][] | yes |
Document25 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | null | yes |
type | string | yes |
title | string | yes |
storageKey | string | yes |
sha256 | string | null | yes |
accessLevel | string | yes |
supersedesId | string | null | yes |
extracted | any | yes |
textContent | string | null | yes |
textTruncated | boolean | yes |
issuedAt | string (date-time) | null | yes |
expiresAt | string (date-time) | null | yes |
expiryNotifiedFor | string (date-time) | null | yes |
reviewStatus | string | yes |
reviewRevision | number | yes |
reviewedBy | string | null | yes |
reviewedAt | string (date-time) | null | yes |
reviewReason | string | null | yes |
issuerName | string | null | yes |
issuerIdentifier | string | null | yes |
credential | any | yes |
credentialVerifiedAt | string (date-time) | null | yes |
createdAt | string (date-time) | yes |
DopCharacteristic5 fields
| Field | Type | Required |
|---|---|---|
name | string | yes |
value | string | number | any | null | yes |
unit | string | null | yes |
standard | string | null | yes |
class | string | null | yes |
DopReadiness20 fields
| Field | Type | Required |
|---|---|---|
manufacturer | string | null | yes |
number | string | null | yes |
harmonisedStandard | string | null | yes |
avcp | object | any | null | yes |
notifiedBody | string | null | yes |
ceMarkingDate | string | null | yes |
intendedUse | string | null | yes |
plant | string | null | yes |
characteristics | DopCharacteristic[] | yes |
dangerousSubstances | object | yes |
serviceLifeYears | number | null | yes |
maintenanceIntervalMonths | number | null | yes |
deconstructionReusePercent | number | null | yes |
recycledContentPercent | number | null | yes |
bioBasedContentPercent | number | null | yes |
fireClass | string | null | yes |
ready | boolean | yes |
blocking | string[] | yes |
gaps | ConstructionGap[] | yes |
caveat | string | yes |
Dpp25 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
productId | string | yes |
schemaId | string | yes |
status | string | yes |
lifecycleState | string | yes |
currentVersion | number | yes |
publishedVersion | number | null | yes |
publishedAt | string (date-time) | null | yes |
publishedMarkets | string[] | any | null | yes |
publicRedactions | any | yes |
publicDisclosures | any | yes |
pendingPublicRedactions | any | yes |
pendingPublicDisclosures | any | yes |
derivedFromId | string | null | yes |
derivation | string | null | yes |
derivationMeta | any | yes |
sourceLocale | string | null | yes |
carbonBaseline | any | yes |
correctionOpenedAt | string (date-time) | null | yes |
suspendedAt | string (date-time) | null | yes |
suspensionReason | string | null | yes |
suspendedFromLifecycleState | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
DppCredentialSubject7 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
type | "DigitalProductPassport" | yes |
issuerName | string | no |
product | object | yes |
passport | object | yes |
dataHash | string | yes |
eventCount | number | no |
DppEvent10 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
type | string | yes |
actor | string | null | yes |
location | string | null | yes |
notes | string | null | yes |
data | any | yes |
occurredAt | string (date-time) | yes |
createdAt | string (date-time) | yes |
DppEventInput7 fields
| Field | Type | Required |
|---|---|---|
type | "split" | "created" | "updated" | "recalled" | "recycled" | "published" | "repaired" | "inspected" | "transferred" | "returned" | "remanufactured" | "merged" | yes |
actor | string | no |
location | string | no |
notes | string | no |
data | map of any | no |
occurredAt | string | string (date-time) | no |
timeZoneOffset | string | no |
DppOwnership13 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
ownerType | string | yes |
ownerRef | string | null | yes |
ownerRefHash | string | null | yes |
country | string | null | yes |
acquiredAt | string (date-time) | yes |
releasedAt | string (date-time) | null | yes |
transferRef | string | null | yes |
notes | string | null | yes |
recordedBy | string | null | yes |
createdAt | string (date-time) | yes |
DppOwnership213 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
dppId | string | yes |
country | string | null | yes |
notes | string | null | yes |
ownerType | string | yes |
ownerRef | string | null | yes |
ownerRefHash | string | null | yes |
acquiredAt | string (date-time) | yes |
releasedAt | string (date-time) | null | yes |
transferRef | string | null | yes |
recordedBy | string | null | yes |
DppOwnership313 fields
| Field | Type | Required |
|---|---|---|
releasedAt | string (date-time) | yes |
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
ownerType | string | yes |
ownerRef | string | null | yes |
ownerRefHash | string | null | yes |
country | string | null | yes |
acquiredAt | string (date-time) | yes |
transferRef | string | null | yes |
notes | string | null | yes |
recordedBy | string | null | yes |
createdAt | string (date-time) | yes |
DppPublicationApproval13 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
reason | string | yes |
dppId | string | yes |
dppVersion | number | yes |
markets | any | yes |
requestedBy | string | yes |
approvedBy | string | null | yes |
approvedAt | string (date-time) | null | yes |
consumedAt | string (date-time) | null | yes |
selfDecided | boolean | yes |
DppPublicationApproval213 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
dppVersion | number | yes |
markets | any | yes |
reason | string | yes |
status | string | yes |
requestedBy | string | yes |
approvedBy | string | null | yes |
approvedAt | string (date-time) | null | yes |
consumedAt | string (date-time) | null | yes |
selfDecided | boolean | yes |
createdAt | string (date-time) | yes |
DppRegistryRecord15 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
updatedAt | string (date-time) | yes |
dppId | string | yes |
externalId | string | null | yes |
dppVersion | number | yes |
error | string | null | yes |
registry | string | yes |
registryUrl | string | null | yes |
requestDigest | string | yes |
response | any | yes |
submittedBy | string | null | yes |
submittedAt | string (date-time) | null | yes |
DppRegistryRecord215 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
dppVersion | number | yes |
registry | string | yes |
status | string | yes |
externalId | string | null | yes |
registryUrl | string | null | yes |
requestDigest | string | yes |
response | any | yes |
error | string | null | yes |
submittedBy | string | null | yes |
submittedAt | string (date-time) | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
DppVersion7 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
dppId | string | yes |
version | number | yes |
schemaVersion | string | yes |
data | any | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
EpcisEmittedEvent5 fields
| Field | Type | Required |
|---|---|---|
type | string | yes |
eventID | string | yes |
eventTime | string | yes |
bizStep | string | yes |
disposition | string | no |
EpcisSubscription13 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
webhookId | string | yes |
destinationUrl | string | yes |
filters | any | yes |
active | boolean | yes |
createdBy | string | null | yes |
notifiedCount | number | yes |
backfilledCount | number | yes |
lastNotifiedAt | string (date-time) | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
EpdIndicator5 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
label | string | yes |
unit | string | yes |
core | boolean | yes |
note | string | no |
EpdModule4 fields
| Field | Type | Required |
|---|---|---|
key | "A1" | "A2" | "A3" | "A4" | "A5" | "B1" | "B2" | "B3" | "B4" | "B5" | "B6" | "B7" | "C1" | "C2" | "C3" | "C4" | "D" | "A1-A3" | yes |
label | string | yes |
stage | "product" | "construction" | "use" | "end-of-life" | "beyond" | yes |
scenarioExpected | boolean | yes |
EpdModuleValues8 fields
| Field | Type | Required |
|---|---|---|
module | string | yes |
label | string | yes |
stage | "product" | "construction" | "use" | "end-of-life" | "beyond" | yes |
indicators | map of number | yes |
declared | string[] | yes |
scenarioDocumented | boolean | yes |
unitIssues | object[] | yes |
notDeclared | string[] | yes |
EpdReadiness16 fields
| Field | Type | Required |
|---|---|---|
status | "partial" | "declared" | "insufficient" | yes |
standard | string | yes |
methodVersion | string | yes |
declaredUnit | string | null | yes |
functionalUnit | string | null | yes |
systemBoundary | string | yes |
modules | EpdModuleValues[] | yes |
indicators | object[] | yes |
coreIndicatorCoveragePercent | number | yes |
carbonStorage | object | yes |
verification | ConstructionVerification | yes |
gaps | ConstructionGap[] | yes |
errorGaps | number | yes |
warningGaps | number | yes |
caveat | string | yes |
disclaimer | string | yes |
EvidenceLink14 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
dppId | string | yes |
version | number | yes |
note | string | null | yes |
documentId | string | yes |
documentSha256 | string | yes |
documentTitle | string | yes |
page | number | null | yes |
quote | string | yes |
fieldPath | string | yes |
capturedValue | any | yes |
Exposure11 fields
| Field | Type | Required |
|---|---|---|
material | string | yes |
criticality | object | yes |
suppliers | number | yes |
singleSource | boolean | yes |
upstreamOnly | boolean | yes |
countries | string[] | yes |
countryConcentration | number | yes |
topCountry | string | null | yes |
unattributed | boolean | yes |
exposureScore | number | yes |
reasons | string[] | yes |
ExtensionInput12 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
label | string | yes |
category | string | null | no |
description | string | null | no |
type | "string" | "number" | "boolean" | "date" | "integer" | "enum" | no |
required | boolean | no |
enumValues | string[] | any | null | no |
pattern | string | null | no |
minValue | number | null | no |
maxValue | number | null | no |
unit | string | null | no |
active | boolean | no |
ExtensionIssue6 fields
| Field | Type | Required |
|---|---|---|
extensionId | string | yes |
key | string | yes |
label | string | yes |
message | string | yes |
kind | "missing" | "invalid" | yes |
severity | "medium" | "high" | yes |
FactInput7 fields
| Field | Type | Required |
|---|---|---|
documentId | string | yes |
path | string | yes |
value | string | yes |
evidence | string | yes |
unit | string | null | no |
confidence | string | no |
note | string | no |
FieldChange4 fields
| Field | Type | Required |
|---|---|---|
field | string | yes |
before | any | yes |
after | any | yes |
classes | "breaking" | "tightening" | "easing" | "editorial" | "timing"[] | yes |
Finding3 fields
| Field | Type | Required |
|---|---|---|
path | string | yes |
message | string | yes |
severity | "error" | "warning" | yes |
FuturePackReadiness6 fields
| Field | Type | Required |
|---|---|---|
pack | object | yes |
daysUntil | number | null | yes |
label | string | yes |
ready | boolean | yes |
missing | object[] | yes |
newFields | string[] | yes |
Gap5 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
requirement | string | yes |
severity | "error" | "info" | "warning" | yes |
basis | string | yes |
detail | string | yes |
GlossaryEntry3 fields
| Field | Type | Required |
|---|---|---|
term | string | yes |
reason | string | yes |
kind | "standard" | "scheme" | "regime" | "acronym" | yes |
Gs1CompanyPrefixe11 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
updatedAt | string (date-time) | yes |
evidence | string | null | yes |
verifiedAt | string (date-time) | null | yes |
prefix | string | yes |
evidenceDocumentId | string | null | yes |
verifiedBy | string | null | yes |
rejectedReason | string | null | yes |
Gs1CompanyPrefixe211 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
prefix | string | yes |
status | string | yes |
evidence | string | null | yes |
evidenceDocumentId | string | null | yes |
verifiedAt | string (date-time) | null | yes |
verifiedBy | string | null | yes |
rejectedReason | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
HazardStatement7 fields
| Field | Type | Required |
|---|---|---|
code | string | yes |
text | string | yes |
hazardClass | string | yes |
category | string | yes |
pictogram | string | null | yes |
signal | "DANGER" | "WARNING" | null | yes |
rule | object | object | object | object | yes |
IgnoredBomField4 fields
| Field | Type | Required |
|---|---|---|
index | number | null | yes |
field | string | yes |
value | string | yes |
reason | string | yes |
IgnoredRiskField3 fields
| Field | Type | Required |
|---|---|---|
field | string | yes |
value | string | yes |
reason | string | yes |
ImpactCoverage6 fields
| Field | Type | Required |
|---|---|---|
passports | number | yes |
newlyFailing | number | yes |
newlyPassing | number | yes |
stillFailing | number | yes |
unchanged | number | yes |
affectedPercent | number | yes |
ImportDefaults5 fields
| Field | Type | Required |
|---|---|---|
category | string | null | no |
workspaceId | string | null | no |
brand | string | null | no |
manufacturerName | string | null | no |
manufacturerCountry | string | null | no |
ImportInput4 fields
| Field | Type | Required |
|---|---|---|
items | object[] | no |
defaultCategory | string | null | no |
workspaceId | string | null | no |
updateLinked | boolean | no |
Item9 fields
| Field | Type | Required |
|---|---|---|
category | string | yes |
ruleId | string | yes |
message | string | yes |
effectiveFrom | string | yes |
source | string | no |
daysUntil | number | yes |
status | "overdue" | "due-today" | "preparation-late" | "on-track" | yes |
label | string | yes |
prepareBy | string | yes |
ItemGenerationJob18 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
gtin | string | yes |
batch | string | null | yes |
prefix | string | yes |
width | number | yes |
startNumber | number | yes |
count | number | yes |
nextOffset | number | yes |
createdCount | number | yes |
skippedCount | number | yes |
status | string | yes |
error | string | null | yes |
heartbeatAt | string (date-time) | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
finishedAt | string (date-time) | null | yes |
ItemGenerationJob218 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
createdBy | string | null | yes |
dppId | string | yes |
width | number | yes |
gtin | string | yes |
count | number | yes |
batch | string | null | yes |
error | string | null | yes |
prefix | string | yes |
startNumber | number | yes |
nextOffset | number | yes |
createdCount | number | yes |
skippedCount | number | yes |
heartbeatAt | string (date-time) | null | yes |
finishedAt | string (date-time) | null | yes |
ItemIdentity11 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
gtin | string | yes |
serial | string | yes |
batch | string | null | yes |
status | string | yes |
attributes | any | yes |
jobId | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
Label14 fields
| Field | Type | Required |
|---|---|---|
method | string | yes |
classified | boolean | yes |
signalWord | "DANGER" | "WARNING" | null | yes |
pictograms | object[] | yes |
hazards | LabelHazard[] | yes |
precautionary | object[] | yes |
mixtureRules | MixtureRuleResult[] | yes |
physicalHazards | PhysicalHazard[] | yes |
perComponent | object[] | yes |
unresolved | object[] | yes |
missing | string[] | yes |
verifyBeforeLabelling | string[] | yes |
notes | string[] | yes |
disclaimer | string | yes |
Label213 fields
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
productName | string | yes |
sku | string | yes |
serial | string | null | yes |
gtin | string | null | yes |
digitalLink | string | yes |
passportUrl | string | yes |
qrDataUrl | string | no |
datamatrixDataUrl | string | no |
symbolText | string | no |
humanReadable | string | no |
symbolWarning | string | no |
status | string | no |
LabelComparison3 fields
| Field | Type | Required |
|---|---|---|
status | "matches" | "not-declared" | "review-required" | yes |
fields | object[] | yes |
warnings | string[] | yes |
LabelHazard8 fields
| Field | Type | Required |
|---|---|---|
code | string | yes |
text | string | yes |
hazardClass | string | yes |
category | string | yes |
pictogram | string | null | yes |
signal | "DANGER" | "WARNING" | null | yes |
trigger | object | object | object | yes |
verify | boolean | yes |
LanguageReport16 fields
| Field | Type | Required |
|---|---|---|
locale | string | yes |
languageName | string | yes |
status | "skipped" | "failed" | "drafted" | yes |
written | boolean | yes |
segments | number | yes |
segmentsDrafted | number | yes |
verdict | "suspect" | "review-carefully" | "ready-for-review" | null | yes |
score | number | null | yes |
termsLost | string[] | yes |
suspect | string[] | yes |
reviewCarefully | string[] | yes |
script | string | yes |
reviewFocus | string[] | yes |
signals | object[] | yes |
skippedReason | string | no |
draft | map of object | no |
LcaEstimateInput4 fields
| Field | Type | Required |
|---|---|---|
materials | object[] | yes |
manufactureCountry | string | no |
manufacturingElectricityKwh | number | no |
transport | LcaTransportInput[] | no |
LcaTransportInput3 fields
| Field | Type | Required |
|---|---|---|
mode | string | yes |
distanceKm | number | yes |
weightKg | number | no |
LeaseContract17 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
contractRef | string | null | yes |
lesseeType | string | yes |
lesseeRef | string | null | yes |
lesseeRefHash | string | null | yes |
country | string | null | yes |
startDate | string (date-time) | yes |
endDate | string (date-time) | null | yes |
monthlyAmount | string | null | yes |
currency | string | null | yes |
status | string | yes |
notes | string | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
LeaseContract217 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
dppId | string | yes |
country | string | null | yes |
notes | string | null | yes |
contractRef | string | null | yes |
lesseeType | string | yes |
lesseeRef | string | null | yes |
lesseeRefHash | string | null | yes |
startDate | string (date-time) | yes |
endDate | string (date-time) | null | yes |
monthlyAmount | string | null | yes |
currency | string | null | yes |
LeaseInput10 fields
| Field | Type | Required |
|---|---|---|
lesseeType | "public" | "consumer" | "business" | no |
lesseeRef | string | null | no |
country | string | null | no |
contractRef | string | null | no |
startDate | string | string (date-time) | no |
endDate | string | string (date-time) | any | null | no |
monthlyAmount | number | null | no |
currency | string | null | no |
notes | string | null | no |
transferCustody | boolean | no |
LedgerState5 fields
| Field | Type | Required |
|---|---|---|
credits | object | yes |
physical | object | yes |
blendRatio | number | null | yes |
lots | Lot[] | yes |
problems | object[] | yes |
LifecycleReport18 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
grantId | string | null | yes |
reporterName | string | yes |
accessTier | string | yes |
type | string | yes |
serial | string | null | yes |
occurredAt | string (date-time) | yes |
location | string | null | yes |
notes | string | null | yes |
measurements | any | yes |
status | string | yes |
decidedBy | string | null | yes |
decidedAt | string (date-time) | null | yes |
decisionReason | string | null | yes |
eventId | string | null | yes |
createdAt | string (date-time) | yes |
LocaleInfo3 fields
| Field | Type | Required |
|---|---|---|
code | string | yes |
name | string | yes |
nativeName | string | yes |
Lot9 fields
| Field | Type | Required |
|---|---|---|
entryId | string | yes |
occurredOn | string | yes |
quantity | number | yes |
credits | number | yes |
share | number | yes |
remainingQuantity | number | yes |
remainingCredits | number | yes |
expiresOn | string | null | yes |
expired | boolean | yes |
MappingTemplate8 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
system | string | yes |
family | "ERP" | "PIM" | "PLM" | yes |
label | string | yes |
description | string | yes |
mapping | object | yes |
feedExample | string | yes |
notes | string[] | yes |
MarketVerdict4 fields
| Field | Type | Required |
|---|---|---|
compliant | boolean | yes |
score | number | yes |
grade | string | yes |
missing | string[] | yes |
MaterialsDossier13 fields
| Field | Type | Required |
|---|---|---|
dossierVersion | string | yes |
dppVersion | number | null | yes |
generatedAt | string | yes |
productType | string | yes |
category | string | yes |
article | object | yes |
repairability | Repairability | yes |
recycledContent | RecycledContentResult | yes |
criticalRawMaterials | object[] | yes |
gaps | Gap[] | yes |
claims | object[] | yes |
crmListVersion | string | yes |
caveat | string | yes |
MergeInput8 fields
| Field | Type | Required |
|---|---|---|
ids | string[] | yes |
data | map of any | no |
schemaId | string | no |
schemaVersion | string | no |
serial | string | no |
publish | boolean | no |
archiveSources | boolean | no |
note | string | no |
MixtureRuleResult8 fields
| Field | Type | Required |
|---|---|---|
group | string | yes |
statements | string[] | yes |
sumPercent | number | yes |
thresholdPercent | number | yes |
triggered | boolean | yes |
resultingClassification | string | no |
contributions | object[] | yes |
verify | boolean | yes |
OrganizationRule13 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
category | string | null | yes |
code | string | yes |
severity | string | yes |
definition | any | yes |
note | string | null | yes |
active | boolean | yes |
effectiveFrom | string (date-time) | null | yes |
effectiveTo | string (date-time) | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
OrganizationRule213 fields
| Field | Type | Required |
|---|---|---|
active | boolean | yes |
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
category | string | null | yes |
note | string | null | yes |
code | string | yes |
severity | string | yes |
definition | any | yes |
effectiveFrom | string (date-time) | null | yes |
effectiveTo | string (date-time) | null | yes |
OrgRuleInput8 fields
| Field | Type | Required |
|---|---|---|
code | string | yes |
category | string | null | no |
severity | "error" | "info" | "warning" | no |
definition | map of any | yes |
note | string | null | no |
active | boolean | no |
effectiveFrom | string | null | no |
effectiveTo | string | null | no |
Outcome8 fields
| Field | Type | Required |
|---|---|---|
record | number | yes |
key | string | null | yes |
action | "error" | "created" | "updated" | "unchanged" | "unmatched" | "would-update" | "would-create" | yes |
productId | string | no |
dppId | string | no |
version | number | no |
changes | object[] | no |
errors | string[] | no |
PackCoverage5 fields
| Field | Type | Required |
|---|---|---|
fields | number | yes |
blockingRules | number | yes |
rules | number | yes |
gradable | boolean | yes |
note | string | yes |
PackRef3 fields
| Field | Type | Required |
|---|---|---|
code | string | yes |
version | string | yes |
status | string | yes |
ParsedElement4 fields
| Field | Type | Required |
|---|---|---|
ai | string | yes |
name | string | yes |
value | string | yes |
formatted | string | no |
ParseResult5 fields
| Field | Type | Required |
|---|---|---|
valid | boolean | yes |
gtin | string | no |
elements | ParsedElement[] | yes |
issues | object[] | yes |
separatorUsed | boolean | yes |
PassportComponent17 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
supplierId | string | null | yes |
role | string | null | yes |
childDppId | string | null | yes |
externalReference | string | null | yes |
quantity | string | yes |
massKg | string | null | yes |
visibility | string | yes |
position | number | yes |
parentDppId | string | yes |
sourceMappingId | string | null | yes |
sourceLine | string | null | yes |
PassportComponent217 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
parentDppId | string | yes |
childDppId | string | null | yes |
externalReference | string | null | yes |
name | string | yes |
role | string | null | yes |
quantity | string | yes |
massKg | string | null | yes |
supplierId | string | null | yes |
visibility | string | yes |
position | number | yes |
sourceMappingId | string | null | yes |
sourceLine | string | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
PassportObligation17 fields
| Field | Type | Required |
|---|---|---|
code | string | yes |
kind | string | yes |
title | string | yes |
instruction | string | yes |
fieldPath | string | null | yes |
evidenceType | string | null | yes |
source | string | yes |
locator | string | yes |
effectiveFrom | string | null | yes |
dateType | "fixed" | "conditional" | "indicative" | yes |
prepareBy | string | null | yes |
daysUntil | number | null | yes |
status | "missing" | "not-applicable" | "overdue" | "ready" | "indicative" | "confirm" | yes |
label | string | yes |
recommendation | string | null | yes |
action | "confirm" | "update-passport" | "upload-evidence" | null | yes |
pack | PackRef | yes |
PhysicalHazard5 fields
| Field | Type | Required |
|---|---|---|
code | string | yes |
property | string | yes |
declared | boolean | yes |
declaredValue | string | null | yes |
note | string | yes |
PlacedBomLine14 fields
| Field | Type | Required |
|---|---|---|
index | number | null | yes |
description | string | yes |
material | string | yes |
factorKey | string | yes |
factor | number | yes |
factorBasis | "mass" | "energy" | yes |
matchedBy | string | yes |
unit | string | yes |
quantity | number | yes |
quantityNormalised | number | yes |
normalisedUnit | "kg" | "kwh" | yes |
valueKgCo2e | number | yes |
evidence | string | null | yes |
source | "model" | "deterministic" | yes |
PlanCheck5 fields
| Field | Type | Required |
|---|---|---|
planName | string | yes |
products | object | yes |
categories | object | yes |
exceeded | boolean | yes |
message | string | null | yes |
Product16 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
workspaceId | string | null | yes |
modelId | string | null | yes |
variantAttributes | any | yes |
name | string | yes |
sku | string | yes |
gtin | string | null | yes |
category | string | yes |
brand | string | null | yes |
description | string | null | yes |
manufacturerName | string | null | yes |
manufacturerCountry | string | null | yes |
metadata | any | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
Product216 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
brand | string | null | yes |
createdAt | string (date-time) | yes |
description | string | null | yes |
updatedAt | string (date-time) | yes |
workspaceId | string | null | yes |
modelId | string | null | yes |
variantAttributes | any | yes |
sku | string | yes |
gtin | string | null | yes |
category | string | yes |
manufacturerName | string | null | yes |
manufacturerCountry | string | null | yes |
metadata | any | yes |
ProductImportRow17 fields
| Field | Type | Required |
|---|---|---|
line | number | yes |
name | string | no |
brand | string | no |
description | string | no |
sku | string | no |
gtin | string | no |
category | string | no |
manufacturerName | string | no |
manufacturerCountry | string | no |
imageUrl | string | no |
modelNumber | string | no |
manufacturerDuns | string | no |
importerName | string | no |
importerCountry | string | no |
importerEori | string | no |
authorizedRepName | string | no |
authorizedRepCountry | string | no |
ProductModel12 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
code | string | yes |
name | string | yes |
category | string | yes |
brand | string | null | yes |
workspaceId | string | null | yes |
variantAxes | any | yes |
sharedData | any | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
ProductModel212 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
brand | string | null | yes |
createdAt | string (date-time) | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
workspaceId | string | null | yes |
category | string | yes |
code | string | yes |
variantAxes | any | yes |
sharedData | any | yes |
PropagationGap7 fields
| Field | Type | Required |
|---|---|---|
cas | string | yes |
name | string | yes |
entity | string | yes |
tier | number | yes |
percent | number | null | yes |
message | string | yes |
severity | "error" | "warning" | yes |
PublicObligation7 fields
| Field | Type | Required |
|---|---|---|
title | string | yes |
summary | string | yes |
regulation | string | yes |
locator | string | yes |
effectiveFrom | string | null | yes |
dateType | "fixed" | "conditional" | "indicative" | yes |
when | string | yes |
RecycledClaim16 fields
| Field | Type | Required |
|---|---|---|
path | string | yes |
component | string | null | yes |
material | string | yes |
recycledPercent | number | yes |
weightKg | number | null | yes |
weightPercent | number | null | yes |
weight | number | yes |
weightUnit | "percent" | "kg" | yes |
weightPercentOfTotal | number | yes |
weightable | boolean | yes |
origin | string | null | yes |
auditScheme | string | null | yes |
substantiated | boolean | yes |
critical | CriticalMaterial | any | null | yes |
target | object | any | null | yes |
meetsTarget | boolean | null | yes |
RecycledContentResult13 fields
| Field | Type | Required |
|---|---|---|
weightedPercent | number | null | yes |
simpleAveragePercent | number | null | yes |
weightBasisKg | number | null | yes |
weightBasisPercent | number | null | yes |
weightUnit | "percent" | "kg" | null | yes |
coveragePercent | number | yes |
claims | RecycledClaim[] | yes |
unweightableClaims | object[] | yes |
unsubstantiatedClaims | object[] | yes |
criticalMaterials | object[] | yes |
targets | object[] | yes |
warnings | string[] | yes |
note | string | yes |
RecycledContentTarget3 fields
| Field | Type | Required |
|---|---|---|
material | string | yes |
targets | object[] | yes |
basis | string | yes |
RegistrationEntry7 fields
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
upi | string | yes |
granularity | "batch" | "model" | "item" | yes |
productGroup | string | null | yes |
modelIdentifier | string | null | yes |
batchIdentifier | string | null | yes |
issues | string[] | yes |
RegulationPack3 fields
| Field | Type | Required |
|---|---|---|
manifest | map of any | yes |
rules | Rule[] | yes |
schema | map of any | yes |
RegulatoryImpactReport24 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
reference | string | yes |
versionNumber | number | yes |
status | string | yes |
code | string | yes |
category | string | yes |
fromVersion | string | null | yes |
toVersion | string | null | yes |
leadTimeDays | number | yes |
breaking | number | yes |
tightening | number | yes |
easing | number | yes |
editorial | number | yes |
timing | number | yes |
passportsInScope | number | yes |
newlyFailing | number | yes |
newlyPassing | number | yes |
stillFailing | number | yes |
payload | any | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
RegulatoryImpactReport224 fields
| Field | Type | Required |
|---|---|---|
status | string | yes |
id | string | yes |
organizationId | string | yes |
payload | any | yes |
category | string | yes |
reference | string | yes |
versionNumber | number | yes |
code | string | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
breaking | number | yes |
tightening | number | yes |
easing | number | yes |
editorial | number | yes |
timing | number | yes |
fromVersion | string | null | yes |
toVersion | string | null | yes |
leadTimeDays | number | yes |
passportsInScope | number | yes |
newlyFailing | number | yes |
newlyPassing | number | yes |
stillFailing | number | yes |
RemediationCampaign18 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
reference | string | yes |
title | string | yes |
impactReference | string | yes |
code | string | yes |
category | string | yes |
fromVersion | string | null | yes |
toVersion | string | yes |
status | string | yes |
dueDate | string | null | yes |
ownerId | string | null | yes |
lastCheckedAt | string (date-time) | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
closedAt | string (date-time) | null | yes |
closedBy | string | null | yes |
closeNote | string | null | yes |
RemediationItem16 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
campaignId | string | yes |
dppId | string | yes |
baseline | string | yes |
findings | any | yes |
status | string | yes |
supplierRequestId | string | null | yes |
checkedVersion | number | null | yes |
lastCheckFindings | any | yes |
lastCheckedAt | string (date-time) | null | yes |
resolvedAt | string (date-time) | null | yes |
note | string | null | yes |
revision | number | yes |
updatedBy | string | null | yes |
updatedAt | string (date-time) | yes |
RenderedSymbol8 fields
| Field | Type | Required |
|---|---|---|
symbology | "DataMatrix" | yes |
encoding | "digital-link" | "element-string" | yes |
text | string | yes |
human | string | yes |
png | string | yes |
svg | string | yes |
width | number | yes |
height | number | yes |
Repairability8 fields
| Field | Type | Required |
|---|---|---|
score | number | null | yes |
coveragePercent | number | yes |
completeness | "partial" | "insufficient" | "complete" | yes |
class | string | null | yes |
criteria | object[] | yes |
declared | object | yes |
missing | string[] | yes |
caveat | string | yes |
ResolvedAttribute12 fields
| Field | Type | Required |
|---|---|---|
key | string | yes |
label | string | yes |
type | "number" | "boolean" | "date" | "url" | "gtin" | "text" | "integer" | "enum" | yes |
required | boolean | yes |
requirement | string | yes |
source | "declared" | "derived" | "missing" | "invalid" | yes |
value | boolean | string | number | any | null | yes |
path | string | null | yes |
status | "missing" | "invalid" | "filled" | yes |
message | string | no |
note | string | no |
unit | string | no |
Restriction5 fields
| Field | Type | Required |
|---|---|---|
cas | string | yes |
name | string | yes |
entry | string | yes |
scope | string | yes |
limitPercent | number | yes |
RiskAssessmentInput3 fields
| Field | Type | Required |
|---|---|---|
dryRun | boolean | no |
note | string | no |
documentIds | string[] | no |
RiskDimension8 fields
| Field | Type | Required |
|---|---|---|
key | "quality" | "labour" | "environment" | "governance" | "sanctions" | "logistics" | "financial" | yes |
label | string | yes |
question | string | yes |
riskPoints | number | yes |
mitigationPoints | number | yes |
netPoints | number | yes |
status | "risk-found" | "mitigated" | "no-signal" | "unassessable" | yes |
signals | object[] | yes |
RiskVerdict3 fields
| Field | Type | Required |
|---|---|---|
verdict | "partial" | "unassessed" | "assessed" | yes |
reasons | string[] | yes |
note | string | yes |
RowOutcome7 fields
| Field | Type | Required |
|---|---|---|
line | number | yes |
sku | string | yes |
name | string | yes |
category | string | null | yes |
action | "error" | "create" | "update" | "skip" | yes |
message | string | no |
productId | string | no |
Rule14 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
severity | "error" | "info" | "warning" | no |
message | string | yes |
source | string | no |
effectiveFrom | string | no |
effectiveTo | string | no |
markets | string[] | no |
when | object | no |
require | object | no |
requireWhen | object | no |
range | object | no |
expiresWithinDays | object | no |
notOlderThanDays | object | no |
pattern | object | no |
RuleChange9 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
kind | "removed" | "added" | "changed" | yes |
classes | "breaking" | "tightening" | "easing" | "editorial" | "timing"[] | yes |
summary | string | yes |
severityBefore | string | null | yes |
severityAfter | string | null | yes |
message | string | yes |
source | string | null | no |
fieldChanges | FieldChange[] | yes |
RuleSetDiff6 fields
| Field | Type | Required |
|---|---|---|
added | RuleChange[] | yes |
removed | RuleChange[] | yes |
changed | RuleChange[] | yes |
counts | object | yes |
headline | string | yes |
mayBreakExistingPassports | boolean | yes |
ScanEvent5 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
createdAt | string (date-time) | yes |
carrierId | string | yes |
country | string | null | yes |
device | string | null | yes |
SchemaExtension17 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
category | string | null | yes |
key | string | yes |
label | string | yes |
description | string | null | yes |
type | string | yes |
required | boolean | yes |
enumValues | any | yes |
pattern | string | null | yes |
minValue | string | null | yes |
maxValue | string | null | yes |
unit | string | null | yes |
active | boolean | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
SchemaExtension217 fields
| Field | Type | Required |
|---|---|---|
active | boolean | yes |
type | string | yes |
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
enumValues | any | yes |
description | string | null | yes |
createdBy | string | null | yes |
updatedAt | string (date-time) | yes |
category | string | null | yes |
key | string | yes |
unit | string | null | yes |
label | string | yes |
required | boolean | yes |
pattern | string | null | yes |
minValue | string | null | yes |
maxValue | string | null | yes |
ScipDossier15 fields
| Field | Type | Required |
|---|---|---|
dossierVersion | string | yes |
dppVersion | number | null | yes |
candidateListVersion | string | yes |
generatedAt | string | yes |
organisation | object | yes |
article | object | yes |
identifiers | object | yes |
containsSvhc | boolean | yes |
substances | object[] | yes |
otherSubstances | object[] | yes |
obligations | ScreeningObligation[] | yes |
safeUseInstructions | string[] | yes |
checklist | object[] | yes |
submission | object | yes |
disclaimer | string | yes |
Screening14 fields
| Field | Type | Required |
|---|---|---|
status | "no-declaration" | "svhc-present" | "svhc-below-threshold" | "restricted-substance" | "no-svhc" | yes |
productType | "unknown" | "article" | "mixture" | yes |
thresholdPercent | number | yes |
declaredCount | number | yes |
hits | SubstanceHit[] | yes |
belowThreshold | SubstanceHit[] | yes |
unresolved | ScreeningUnresolved[] | yes |
watched | SubstanceHit[] | yes |
obligations | ScreeningObligation[] | yes |
scip | object | yes |
markets | string[] | yes |
warnings | string[] | yes |
missingInputs | string[] | yes |
declarationPaths | string[] | yes |
ScreeningObligation6 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
regulation | string | yes |
requirement | string | yes |
status | "satisfied" | "outstanding" | "not-applicable" | yes |
field | string | no |
note | string | yes |
ScreeningUnresolved4 fields
| Field | Type | Required |
|---|---|---|
name | string | null | yes |
cas | string | null | yes |
path | string | yes |
reason | string | yes |
SdsPackage14 fields
| Field | Type | Required |
|---|---|---|
revision | string | yes |
revisionNote | string | null | no |
dppVersion | number | null | no |
generatedAt | string | yes |
language | string | yes |
product | object | yes |
sections | object[] | yes |
filledSections | number | yes |
requiresAuthoring | string[] | yes |
label | Label | yes |
transport | object | yes |
waste | object | yes |
identifiers | object | yes |
disclaimer | string | yes |
SdsRecord26 fields
| Field | Type | Required |
|---|---|---|
status | string | yes |
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
payload | any | yes |
reference | string | yes |
classified | boolean | yes |
ufi | string | null | yes |
language | string | yes |
revision | string | yes |
revisionNumber | number | yes |
clpSubsetVersion | string | yes |
signalWord | string | null | yes |
pictograms | number | yes |
hazardStatements | number | yes |
rulesToVerify | number | yes |
unresolvedComponents | number | yes |
filledSections | number | yes |
requiresAuthoring | number | yes |
labelSnapshot | any | yes |
issuedBy | string | null | yes |
issuedAt | string (date-time) | yes |
supersededAt | string (date-time) | null | yes |
revokedAt | string (date-time) | null | yes |
revokedReason | string | null | yes |
nextReviewAt | string (date-time) | null | yes |
SignedUrl3 fields
| Field | Type | Required |
|---|---|---|
url | string | yes |
expiresAt | string (date-time) | yes |
method | "signed" | "proxied" | yes |
SourceRef5 fields
| Field | Type | Required |
|---|---|---|
kind | "passport" | "document" | "attested" | yes |
documentId | string | null | no |
label | string | yes |
confidence | string | null | no |
issuedAt | string | null | no |
SplitInput7 fields
| Field | Type | Required |
|---|---|---|
count | number | no |
serials | string[] | no |
data | map of any | no |
serialField | string | no |
batch | string | no |
publish | boolean | no |
note | string | no |
SubscriptionInput5 fields
| Field | Type | Required |
|---|---|---|
name | string | yes |
url | string | yes |
secret | string | null | no |
filters | any | no |
active | boolean | no |
SubstanceHit18 fields
| Field | Type | Required |
|---|---|---|
name | string | yes |
cas | string | yes |
ec | string | no |
reason | string | yes |
concentrationPercent | number | null | yes |
concentrationRange | string | yes |
limitPercent | number | yes |
exceedsThreshold | boolean | yes |
annexXiv | boolean | yes |
restricted | object | any | null | yes |
restrictedExceeded | boolean | yes |
watchlisted | boolean | yes |
location | string | null | yes |
basis | "component" | "whole-product" | "unstated" | yes |
basisUndetermined | boolean | no |
path | string | yes |
declaredBy | string | null | yes |
addedOn | string | no |
Supplier12 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
createdAt | string (date-time) | yes |
metadata | any | yes |
country | string | null | yes |
email | string | null | yes |
trustScore | number | null | yes |
tier | number | yes |
viaSupplierId | string | null | yes |
identityWithheld | boolean | yes |
withheldContact | string | null | yes |
SupplierPortalDocument4 fields
| Field | Type | Required |
|---|---|---|
name | string | yes |
instructions | string | no |
id | string | yes |
uploaded | object | no |
SupplierRequest18 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
supplierId | string | yes |
dppId | string | null | yes |
status | string | yes |
requestedFields | any | yes |
requestItems | any | yes |
requestedDocuments | any | yes |
message | string | null | yes |
responseData | any | yes |
respondedAt | string (date-time) | null | yes |
inviteTokenHash | string | null | yes |
inviteSentAt | string (date-time) | null | yes |
inviteExpiresAt | string (date-time) | null | yes |
parentRequestId | string | null | yes |
tier | number | yes |
createdAt | string (date-time) | yes |
updatedAt | string (date-time) | yes |
SupplierRequest218 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
createdAt | string (date-time) | yes |
status | string | yes |
updatedAt | string (date-time) | yes |
dppId | string | null | yes |
supplierId | string | yes |
tier | number | yes |
requestedFields | any | yes |
requestItems | any | yes |
requestedDocuments | any | yes |
message | string | null | yes |
responseData | any | yes |
respondedAt | string (date-time) | null | yes |
inviteTokenHash | string | null | yes |
inviteSentAt | string (date-time) | null | yes |
inviteExpiresAt | string (date-time) | null | yes |
parentRequestId | string | null | yes |
SupplierRequestItem5 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
kind | "material" | "substance" | yes |
name | string | yes |
fields | string[] | yes |
instructions | string | no |
SupplierRiskAssessment37 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
supplierId | string | yes |
reference | string | yes |
versionNumber | number | yes |
status | string | yes |
riskVersion | string | yes |
catalogueVersion | string | yes |
provider | string | yes |
model | string | null | yes |
degraded | boolean | yes |
providerError | string | null | yes |
latencyMs | number | null | yes |
responsesCount | number | yes |
documentsCount | number | yes |
readableDocuments | number | yes |
evidenceCharacters | number | yes |
deterministicScore | number | yes |
deterministicLevel | string | yes |
riskPoints | number | yes |
mitigationPoints | number | yes |
netRiskPoints | number | yes |
penalty | number | yes |
combinedIndex | number | yes |
combinedLevel | string | yes |
acceptedCount | number | yes |
droppedCount | number | yes |
ignoredCount | number | yes |
unassessableCount | number | yes |
verdict | string | yes |
payload | any | yes |
note | string | null | yes |
createdBy | string | null | yes |
createdAt | string (date-time) | yes |
revokedAt | string (date-time) | null | yes |
revokedBy | string | null | yes |
revokeReason | string | null | yes |
SvhcListAge7 fields
| Field | Type | Required |
|---|---|---|
version | string | yes |
ageDays | number | yes |
stale | boolean | yes |
nextExpectedUpdate | string | yes |
entries | number | yes |
coverage | "subset" | yes |
message | string | yes |
TaxonomyResult7 fields
| Field | Type | Required |
|---|---|---|
reference | object | yes |
substantialContribution | object | yes |
dnsh | object[] | yes |
minimumSafeguards | object | yes |
counts | object | yes |
verdict | "aligned" | "not-aligned" | "not-assessed" | "partially-assessed" | yes |
caveat | string | yes |
TransferInput6 fields
| Field | Type | Required |
|---|---|---|
ownerType | "other" | "manufacturer" | "distributor" | "retailer" | "consumer" | "repairer" | "recycler" | "lessee" | yes |
ownerRef | string | null | no |
country | string | null | no |
transferRef | string | null | no |
notes | string | null | no |
occurredAt | string | string (date-time) | no |
TranslateInput5 fields
| Field | Type | Required |
|---|---|---|
locales | string[] | no |
paths | string[] | no |
overwrite | boolean | no |
dryRun | boolean | no |
note | string | no |
UiField18 fields
| Field | Type | Required |
|---|---|---|
path | string | yes |
label | string | yes |
kind | "number" | "boolean" | "object" | "array" | "json" | "text" | "enum" | yes |
required | boolean | yes |
options | string[] | no |
optionLabels | map of string | no |
minimum | number | no |
maximum | number | no |
minLength | number | no |
maxLength | number | no |
description | string | no |
requiredLevel | "error" | "info" | "warning" | no |
requiredIf | string[] | no |
unit | string | no |
examples | any[] | no |
widget | string | no |
deprecated | boolean | no |
children | any[] | no |
UnplacedBomLine3 fields
| Field | Type | Required |
|---|---|---|
index | number | yes |
text | string | yes |
reason | string | yes |
UnresolvedBomLine6 fields
| Field | Type | Required |
|---|---|---|
index | number | null | yes |
material | string | yes |
quantity | number | null | yes |
unit | string | null | yes |
reason | string | yes |
action | string | yes |
UpsertInput6 fields
| Field | Type | Required |
|---|---|---|
fields | map of string | null | yes |
status | string | no |
replace | boolean | no |
note | string | no |
confirm | string[] | no |
provenance | object | no |
ValidationRun10 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
dppId | string | yes |
dppVersion | number | yes |
packCode | string | yes |
packVersion | string | yes |
score | number | yes |
compliant | boolean | yes |
result | any | yes |
createdAt | string (date-time) | yes |
VerifiableCredentialBody8 fields
| Field | Type | Required |
|---|---|---|
@context | string[] | yes |
id | string | no |
type | string[] | yes |
issuer | object | yes |
validFrom | string | yes |
validUntil | string | yes |
credentialStatus | object | no |
credentialSubject | DppCredentialSubject | yes |
VerifiableCredentialClaims15 fields
| Field | Type | Required |
|---|---|---|
@context | string[] | yes |
id | string | no |
type | string[] | yes |
issuer | object | yes |
validFrom | string | yes |
validUntil | string | yes |
credentialStatus | object | no |
credentialSubject | DppCredentialSubject | yes |
iss | string | yes |
sub | string | yes |
jti | string | yes |
iat | number | yes |
nbf | number | yes |
exp | number | yes |
vc | VerifiableCredentialBody | no |
VerificationMethod5 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
type | string | no |
controller | string | no |
publicKeyJwk | map of any | no |
publicKeyMultibase | string | no |
WebhookDelivery11 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
webhookId | string | yes |
organizationId | string | yes |
event | string | yes |
url | string | yes |
statusCode | number | null | yes |
ok | boolean | yes |
error | string | null | yes |
attempts | number | null | yes |
payload | any | yes |
createdAt | string (date-time) | yes |
WidgetPayload13 fields
| Field | Type | Required |
|---|---|---|
dppId | string | yes |
passportUrl | string | yes |
digitalLinkUrl | string | null | yes |
qrImageUrl | string | yes |
product | object | yes |
issuer | object | yes |
version | number | yes |
publishedAt | string | null | yes |
compliance | object | any | null | yes |
badges | object | yes |
label | string | yes |
generatedAt | string | yes |
caveat | string | yes |
WithheldField3 fields
| Field | Type | Required |
|---|---|---|
path | string | yes |
label | string | yes |
tiers | "recycler" | "authority" | "legitimate_interest" | "service"[] | yes |
WorkingDraft9 fields
| Field | Type | Required |
|---|---|---|
organizationId | string | yes |
userId | string | yes |
entityKind | string | yes |
entityId | string | yes |
baseVersion | number | yes |
schemaVersion | string | yes |
data | any | yes |
revision | number | yes |
updatedAt | string (date-time) | yes |
Workspace6 fields
| Field | Type | Required |
|---|---|---|
id | string | yes |
organizationId | string | yes |
name | string | yes |
slug | string | yes |
brand | string | null | yes |
createdAt | string (date-time) | yes |