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.
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": "sup_3f2a9b1c-…",
"tenant_id": "tnt_…",
"name": "Hangzhou Cotton Mills",
"country": "CN",
"facility_id": "DUNS:445566778",
"tier": "T2",
"activity": "Spinning",
"year": 2026,
"category_scope": ["textile"],
"scope_filter": {
"category": ["textile"],
"material_family": ["cotton"]
},
"source_category": "textile_voluntary",
"verified_at": null
}
tier follows the textile / battery / electronics convention:
T0— the brand itself (assembler / packager)T1— confection / final assemblyT2— sub-component manufacturingT3— material processing (spinning, smelting, refining)T4— raw material (fibre, ore, plant-based precursor)
activity is a free-text descriptor that surfaces on the Journey
block ("Spinning", "Cell coating", "Dyeing", "Final assembly").
List suppliers
GET /api/v1/tenants/{id}/suppliers
Register a supplier
POST /api/v1/tenants/{id}/suppliers
{
"name": "Bavaria Cell Coating GmbH",
"country": "DE",
"tier": "T2",
"activity": "Cell coating",
"year": 2026,
"category_scope": ["battery"],
"scope_filter": { "category": ["battery"] }
}
Bulk import
POST /api/v1/tenants/{id}/suppliers/import
Content-Type: multipart/form-data
Upload XLSX or CSV. Header row is auto-mapped per category (textile, battery, electronics each have category-aware header detection — no LLM required for standard exports).
Preview matches
GET /api/v1/tenants/{id}/suppliers/{sup_id}/preview-matches
Same as for certifications. Verifies the scope_filter covers the DPPs you expect before committing.
Templates
GET /api/v1/tenants/{id}/suppliers/template?category=textile
Downloads a category-specific XLSX template with the right columns
- example rows for the operator to fill out.
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.