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:
- a file attached to this passport,
- an address already typed into the passport's own field,
- a tenant-level file for the passport's category,
- a tenant-level file for category
all.