DPP Agent docs

Files — DoP, SDS, technical files

Files are documents attached either at the tenant level (applies to all DPPs in scope) or per-DPP level (this product only). A resolver read inherits tenant-level files into every matching DPP's response automatically.

Common use cases per industry:

  • Construction: DoP (Declaration of Performance) per EU 305/2011
  • Chemicals / detergents: SDS (Safety Data Sheet) per REACH
  • Electronics / battery: technical documentation
  • Cosmetics: PIF (Product Information File) per EU 1223/2009
  • Toys / PPE: CE-marking technical file
  • Textile: care guides, supply-chain attestations
  • Furniture / mattresses: flammability test reports

These endpoints are used by the dashboard and need a signed-in session of a tenant admin or editor; an API key is not accepted.

Object shape

{
  "id": "3f2a9b1c-e0d8-4f8e-b308-d2541886e331",
  "tenant_id": "8d3a4f91-427f-4d5d-b527-c0b28363676c",
  "dpp_id": null,
  "category": "construction",
  "doc_type": "dop",
  "original_filename": "DoP-cement-2026.pdf",
  "mime_type": "application/pdf",
  "description": null,
  "storage_path": "tenant-…/cat-construction/dop-….pdf",
  "signed_url": "https://…",
  "updated_at": "2026-06-26T13:42:05.000Z"
}

dpp_id is null for a tenant-level file, which applies to every DPP in its category (or every DPP when the category is all). A file with a dpp_id belongs to that passport only. signed_url is a link valid for six hours.

doc_type says what the document is. Some types fill a passport field when the passport is read:

doc_type Fills
declaration_of_conformity espr.comp.declaration_url
technical_documentation espr.comp.technical_doc_url
repair_instructions espr.circ.repair
disassembly_instructions espr.circ.disassembly
collection_info bat.collection_info_url
due_diligence bat.due_diligence_url
dop con.comp_reg.dop_url
epd con.env.epd_url

Other types (safety data sheets, ingredient lists and so on) are kept as evidence and do not fill a field.

List files

GET /api/v1/tenants/{id}/files

Optional filters: ?dpp_id={uuid} (one passport's files), ?dpp_id=null (tenant-level only), ?category=construction, ?doc_type=dop. Response: { "files": [ … ] }.

Upload a file

POST /api/v1/tenants/{id}/files
Content-Type: application/json
{
  "category": "construction",
  "doc_type": "dop",
  "original_filename": "DoP-cement-2026.pdf",
  "mime_type": "application/pdf",
  "file_base64": "JVBERi0xLjcK…",
  "description": "Declaration of Performance, 2026 edition",
  "dpp_id": null
}

PDF or an image (PNG, JPEG, WebP, HEIC), up to about 15 MB. Add dpp_id to attach the file to one passport. Uploading the same dpp_id/category/doc_type again replaces the file.

Delete a file

DELETE /api/v1/tenants/{id}/files?id={file_id}

Resolver inheritance

When a passport is read, each document type is taken from the first of:

  1. a file attached to this passport,
  2. an address already typed into the passport's own field,
  3. a tenant-level file for the passport's category,
  4. a tenant-level file for category all.