Textile DPP
Textile DPP
In addition to the Phase-4a battery schema, qr3.app supports a full textile DPP schema based on the French Loi AGEC (information duties under Art. R. 541-227 et seq. Code de l’environnement) starting with Q3.3, with fields prepared for the expected, not yet adopted ESPR delegated act for textiles. Textile passports can be created, validated, served via QR, and checked for EU compliance live before save — the same way battery passports work.
Choose a category
category: "textile" selects the textile schema when creating a passport:
{ "category": "textile", "gtin": "04012345678901", "product_name": "Organic Cotton T-Shirt", "manufacturer": "EcoWear GmbH", "origin_country": "PT", "landing_locale": "en", "market_countries": ["DE", "AT", "FR"], "textile_data": { "fiber_composition": [ { "material": "cotton", "percentage": 95, "origin_country": "TR", "recycled_pct": 0 }, { "material": "elastane", "percentage": 5, "origin_country": "IT", "recycled_pct": 0 } ], "country_weaving_knitting": "PT", "country_dyeing_printing": "PT", "country_assembly": "PT", "contains_microplastics": false }}Mandatory fields (AGEC)
| Field | Internal check ID | Content |
|---|---|---|
fiber_composition[] | A1 | All fiber shares, summing to 100% |
fiber_composition[].recycled_pct | A1 | Recycled share per fiber (default 0) |
country_weaving_knitting | A2 | Weaving/knitting country (ISO 3166-1 alpha-2) |
country_dyeing_printing | A3 | Dyeing/printing country |
country_assembly | A4 | Assembly/confection country |
contains_microplastics | A5 | Must be true when synthetic fibers total more than 50% |
svhc_substances[] | A6 | REACH SVHC substances from 0.1% concentration, with CAS numbers |
Microplastics rule: When the recipe contains more than 50% synthetic fibers (polyester, acrylic, polyamide, elastane, …), contains_microplastics: true must be set — otherwise the endpoint responds with 422. The consumer HTML view will render a prominent orange warning box with the French AGEC mandatory text (and, for DE/EN buyers, an additional “Mention obligatoire (marché français)” block whenever "FR" ∈ market_countries). qr3.app requires the flag above 50% synthetic fibres — matching the AGEC notice duty itself (Art. R. 541-228 XI Code de l’environnement).
ESPR opt-in fields
These fields are optional but unlock the ESPR-ready badge in the dashboard and the consumer view:
durability_class— durability class A–Erecyclability_class— recyclability class A–Eexpected_lifetime_wash_cycles— expected wash cyclesexpected_lifetime_years— expected lifetime in yearspef_carbon_footprint_kg— Product Environmental Footprint (CO₂eq)recyclability_pct— share of recyclable materialrepair_instructions_url— HTTPS link to the repair manualspare_parts_available_until— ISO date until which spare parts are availabledisassembly_url— HTTPS link to disassembly instructionstake_back_info— free-text take-back info
When all fields B7–B15 are set, the EU validator emits the info badge TEXTILE_ESPR_READY.
Market countries (market_countries)
market_countries: string[] is a base field across all DPP categories (ISO 3166-1 alpha-2, up to 32 entries). It drives two mechanisms:
- Consumer HTML: When
"FR"is included and the user opens the page in a non-French locale, the AGEC mandatory text is additionally rendered in French under “Mention obligatoire (marché français)”. - EU validator (see EU Compliance): FR-specific rules activate — AGEC chain becomes an
error, greenwashing terms (biodégradable,écologique, …) are promoted fromwarningtoerror.
Greenwashing linter
The validator scans product_name and fiber_composition[].material against a curated prohibited-term list in DE/EN/FR. Hits (e.g. “natural”, “biodegradable”, “umweltfreundlich”) surface as a TEXTILE_GREENWASHING issue — warning outside the EU, error as soon as the market set includes FR.
Best practice: use only substantiated, specific terms ("Organic Cotton" over "Natural"; “100% recycled” over “eco-friendly”).
Pre-save validation
qr3.app ships a live preview in the dashboard (see EU Compliance) — you see AGEC hits, greenwashing warnings, and the ESPR-ready status before the passport is saved:
curl -X POST https://qr3.app/v1/dpp/validate \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d @textile-payload.jsonThe response contains an eu_compliance block with compliant, espr_ready, issues[], and a summary by severity (errors / warnings / info).
Consumer view
The consumer HTML view at https://qr3.app/01/{GTIN}/21/{SERIAL} renders:
- AGEC warning box (when microplastics apply), including the FR mandatory block for the French market
- Origin chain: weaving/knitting → dyeing/printing → assembly (with flag pills)
- Fiber enrichment: per fiber origin country + recycled share
- SVHC list (REACH) with names, CAS numbers, concentrations
- Durability section (ESPR): wash cycles, lifetime, PEF CO₂, repair URL, spare parts
- Recyclability section: %, class, disassembly URL, take-back
- Market countries
Bulk import
The CSV/XLSX bulk import at POST /v1/dpp/import supports textiles — template at GET /v1/dpp/import/templates/textile?format=xlsx (or ?format=csv). See the API reference.
Next steps
- Create in dashboard:
/dashboard/dpp/new→ pick Textile, fill the form, watch the live preview, save. - Check EU compliance: see EU Compliance for rule details.
- GS1 onboarding: register GTINs and check ownership — see GS1 Identifiers & Onboarding.