DPP Agent docs

Suppliers — registry with journey-block overlay

The supplier registry mirrors certifications. A supplier (mill, component-maker, assembler, recycler, packaging vendor, logistics partner) is registered once at the tenant level and applies automatically to matching DPPs via a scope filter — same model as certifications.

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.

The supplier rows then surface on the public DPP's Journey block: who made what, where, when.

Industry-agnostic on purpose: this same model handles textile mills, battery cathode suppliers, semiconductor fabs, raw cotton growers, plastic resin suppliers, leather tanneries, packaging companies, recyclers, freight forwarders, and end-of-life processors.

Object shape

{
  "id": "5b7c2d10-91aa-4c3e-8f6d-2e7a9c4b1d05",
  "tenant_id": "8d3a4f91-427f-4d5d-b527-c0b28363676c",
  "factory_name": "Example Spinning Mill",
  "parent_company": null,
  "country_iso": "PT",
  "address_city": "Porto",
  "tier": "T2",
  "process": "Ring spinning of organic cotton",
  "facility_type": "spinning",
  "production_share_pct": 60,
  "latest_audit_year": 2025,
  "certifications": ["GOTS"],
  "scope_filter": { "category": "textile", "material_contains": "cotton" }
}

tier is T1 (final assembly) to T4 (raw material). facility_type comes from a list per category (for textiles for example spinning, dyeing, cut_sew; for batteries cell_assembly, refiner, mine); process is free text. scope_filter works as for certifications.

List suppliers

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

Register a supplier

POST /api/v1/tenants/{id}/suppliers
{
  "factory_name": "Example Cell Coating GmbH",
  "country_iso": "DE",
  "tier": "T2",
  "facility_type": "cell_assembly",
  "scope_filter": { "category": "battery" }
}

Bulk import

POST /api/v1/tenants/{id}/suppliers

Send an array of supplier objects (or { "suppliers": [...] }), up to 1 000 rows per request.

To turn a supplier list in PDF, image, XLSX or CSV into rows first:

POST /api/v1/tenants/{id}/suppliers-extract
{ "file_base64": "…", "mime_type": "text/csv", "file_name": "suppliers.csv" }

It returns proposed rows for review and saves nothing.

Update or delete a supplier

PATCH /api/v1/tenants/{id}/suppliers?id={supplier_id}
DELETE /api/v1/tenants/{id}/suppliers?id={supplier_id}

Preview the scope

POST /api/v1/tenants/{id}/scope-preview with { "scope_filter": … }, as for certifications, shows which DPPs a filter matches before you save it.

Auto-apply on read

Resolver evaluates each DPP read against the tenant's supplier registry and overlays matching rows onto the Journey block. No per-DPP write.