ProductDNA
ProductDNA is the product-level identity layer for the localLOOP platform. It references constituent MaterialDNA entries and aligns with EU Digital Product Passport requirements under ESPR Art. 9-10. This is an early-stage lab concept with no public pilots yet.
Scope & boundaries
In scope
Stable product identifiers, DPP passport fields, material composition links, and lifecycle stage.
Out of scope
Live inventory tracking, financial settlement, or verified carbon accounting.
Status
Lab-demo concept only — no public pilots or deployments yet.
Why cities adopt ProductDNA
EU DPP readiness
Future-proof your city's product data infrastructure ahead of ESPR Art. 9-10 Digital Product Passport mandates coming into force from 2026 onwards
Circular procurement
Verify product condition, material composition, and lifecycle stage to meet circular public procurement requirements
Reuse marketplaces
Enable inter-city product exchanges for furniture, equipment, and refurbished goods with verified provenance data
Fraud prevention
Prevent false sustainability claims by attaching verifiable certifications and conformity evidence to every product record
Data sovereignty
Passport data stays under city control — third parties can be granted scoped read access without handing over raw records
What we aim to enable
A DPP-aligned digital passport for finished products, linking provenance metadata and material composition to support traceability across circular economy loops.
Identity
Persistent product IDs referencing constituent MaterialDNA entries via material_ids
DPP fields
ESPR Art. 9-10 aligned passport fields, certifications, and regulatory metadata
Lifecycle stage
Condition, repair history, and end-of-life indicators
Interoperability
Compatible with Offer/Match/Transfer flows across city nodes
Data model snapshot
Current status
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://local-loop-io.github.io/projects/loop-protocol/schemas/v0.2.0/product-dna.schema.json",
"title": "ProductDNA",
"description": "Product identity and metadata schema — LOOP v0.2.0 (DPP-aligned, ESPR Art. 9-10 compatible). Products reference constituent materials via material_ids.",
"type": "object",
"required": [
"@context",
"@type",
"schema_version",
"id",
"product_category",
"name",
"condition",
"quantity",
"origin_city",
"current_city",
"available_from"
],
"properties": {
"@context": {
"description": "JSON-LD context",
"type": "string",
"enum": [
"https://local-loop-io.github.io/projects/loop-protocol/contexts/loop-v0.1.1.jsonld",
"https://local-loop-io.github.io/projects/loop-protocol/contexts/loop-v0.2.0.jsonld"
]
},
"@type": {
"description": "Object type identifier",
"type": "string",
"const": "ProductDNA"
},
"schema_version": {
"description": "Schema version for the interop flow. Emitters SHOULD use 0.2.0; receivers SHOULD accept additive minor/patch releases.",
"type": "string",
"pattern": "^0\\.[1-9]\\d*\\.\\d+$",
"examples": [
"0.2.0"
]
},
"id": {
"description": "Unique ProductDNA identifier",
"type": "string",
"pattern": "^PRD-[A-Z0-9-]{8,}$",
"examples": [
"PRD-DE-MUC-2025-LAPTOP-A1B2C3"
]
},
"product_category": {
"description": "Standardized product category",
"type": "string",
"enum": [
"furniture-office",
"furniture-residential",
"furniture-industrial",
"building-structural",
"building-fixture",
"building-hvac",
"building-electrical",
"electronics-computing",
"electronics-mobile",
"electronics-appliance",
"electronics-components",
"textile-garment",
"textile-industrial",
"packaging-reusable",
"vehicle-parts",
"equipment-industrial",
"equipment-medical"
]
},
"name": {
"description": "Product name or short description",
"type": "string",
"minLength": 2,
"maxLength": 200,
"examples": [
"Standing Desk — Ergotron WorkFit"
]
},
"condition": {
"description": "Physical condition of the product",
"type": "string",
"enum": [
"new",
"like-new",
"good",
"fair",
"poor",
"for-parts"
]
},
"quantity": {
"description": "Amount of product units",
"type": "object",
"required": [
"value",
"unit"
],
"properties": {
"value": {
"description": "Numeric quantity",
"type": "number",
"minimum": 0,
"examples": [
12,
1
]
},
"unit": {
"description": "Unit of measurement",
"type": "string",
"enum": [
"kg",
"g",
"t",
"l",
"ml",
"m3",
"piece",
"bundle"
],
"examples": [
"piece"
]
}
}
},
"origin_city": {
"description": "City that registered the product",
"type": "string",
"minLength": 2,
"maxLength": 80,
"examples": [
"Munich"
]
},
"current_city": {
"description": "City currently holding custody of the product",
"type": "string",
"minLength": 2,
"maxLength": 80,
"examples": [
"Munich"
]
},
"available_from": {
"description": "When product becomes available (ISO 8601)",
"type": "string",
"format": "date-time",
"examples": [
"2026-03-15T08:00:00Z"
]
},
"expires": {
"description": "When product listing expires (ISO 8601)",
"type": "string",
"format": "date-time"
},
"manufacturer": {
"description": "Product manufacturer name",
"type": "string",
"maxLength": 200,
"examples": [
"Ergotron"
]
},
"model": {
"description": "Product model name or number",
"type": "string",
"maxLength": 200,
"examples": [
"WorkFit-S"
]
},
"manufacture_year": {
"description": "Year of manufacture",
"type": "integer",
"minimum": 1900,
"examples": [
2021
]
},
"serial_number": {
"description": "Product serial number",
"type": "string",
"maxLength": 120
},
"functional_status": {
"description": "Functional state of the product",
"type": "string",
"enum": [
"fully-functional",
"partially-functional",
"non-functional",
"untested"
]
},
"lifecycle_stage": {
"description": "Current stage in product lifecycle (ESPR/UNTP aligned)",
"type": "string",
"enum": [
"production",
"in-use",
"end-of-first-use",
"refurbished",
"end-of-life"
]
},
"material_ids": {
"description": "References to constituent MaterialDNA identifiers (composition link)",
"type": "array",
"items": {
"type": "string",
"pattern": "^MAT-[A-Z]{2}-[A-Z]{3}-\\d{4}-[A-Z]+-[A-Z0-9]{6,}$"
},
"examples": [
[
"MAT-DE-MUC-2025-METAL-4EB84C",
"MAT-DE-MUC-2025-PLASTIC-96FE78"
]
]
},
"dimensions": {
"description": "Physical dimensions of the product",
"type": "object",
"properties": {
"length_cm": {
"description": "Length in centimeters",
"type": "number",
"minimum": 0
},
"width_cm": {
"description": "Width in centimeters",
"type": "number",
"minimum": 0
},
"height_cm": {
"description": "Height in centimeters",
"type": "number",
"minimum": 0
},
"weight_kg": {
"description": "Weight in kilograms",
"type": "number",
"minimum": 0
}
}
},
"images": {
"description": "Photos of the product",
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 10
},
"reuse_potential": {
"description": "Free-text notes on reuse potential and condition details",
"type": "string",
"maxLength": 500,
"examples": [
"Fully functional standing desks from office clearance. Minor cosmetic wear."
]
},
"certifications": {
"description": "List of certifications",
"type": "array",
"items": {
"type": "string"
}
},
"location": {
"description": "Geographic location of product",
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"description": "Latitude",
"type": "number",
"minimum": -90,
"maximum": 90
},
"lon": {
"description": "Longitude",
"type": "number",
"minimum": -180,
"maximum": 180
},
"address": {
"description": "Human-readable address",
"type": "string"
}
}
},
"contact": {
"description": "Reserved. Personal contact details are not permitted in minimal interop payloads.",
"not": {}
},
"passport": {
"description": "Optional regulatory interoperability metadata for DPP-style integrations (ESPR Art. 9-10, UNTP ProductPassport aligned).",
"type": "object",
"properties": {
"passport_id": {
"type": "string",
"maxLength": 160
},
"passport_url": {
"type": "string",
"format": "uri"
},
"backup_copy_url": {
"type": "string",
"format": "uri"
},
"passport_status": {
"type": "string",
"enum": [
"not_applicable",
"optional",
"required",
"available",
"restricted"
]
},
"data_carrier_id": {
"type": "string",
"maxLength": 160
},
"issued_at": {
"type": "string",
"format": "date-time"
},
"issuer_node": {
"type": "string",
"maxLength": 160
},
"access_scope": {
"type": "string",
"enum": [
"public",
"role-based",
"restricted"
]
},
"supported_regimes": {
"type": "array",
"items": {
"type": "string",
"enum": [
"espr-dpp",
"battery-passport",
"ppwr",
"waste-shipment",
"nkws"
]
}
},
"gtin": {
"description": "GS1 Global Trade Item Number",
"type": "string",
"pattern": "^\\d{8,14}$"
},
"gs1_digital_link": {
"description": "GS1 Digital Link URL",
"type": "string",
"format": "uri"
},
"economic_operator_id": {
"description": "ESPR economic operator identifier",
"type": "string",
"maxLength": 120
},
"economic_operator_name": {
"description": "ESPR economic operator name",
"type": "string",
"maxLength": 200
},
"manufacturer_id": {
"description": "Manufacturer identifier",
"type": "string",
"maxLength": 120
},
"country_of_production": {
"description": "ISO 3166-1 alpha-2 country code of production",
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"conformity_declaration_ref": {
"description": "EU Declaration of Conformity link",
"type": "string",
"format": "uri"
},
"carbon_footprint_kg_co2e": {
"description": "Carbon footprint per declared unit (kg CO2e)",
"type": "number",
"minimum": 0
},
"carbon_footprint_unit": {
"description": "Declared unit for carbon footprint",
"type": "string"
},
"recycled_content_percent": {
"description": "Percentage of recycled content (ESPR & PPWR)",
"type": "number",
"minimum": 0,
"maximum": 100
},
"recyclable_content_percent": {
"description": "Percentage of recyclable content (UNTP circularity)",
"type": "number",
"minimum": 0,
"maximum": 100
},
"repair_score": {
"description": "Repairability index 0-10 (ESPR)",
"type": "number",
"minimum": 0,
"maximum": 10
},
"durability_score": {
"description": "Durability rating 0-10",
"type": "number",
"minimum": 0,
"maximum": 10
},
"disassembly_instructions": {
"description": "Link to disassembly information",
"type": "string",
"format": "uri"
},
"substances_of_concern": {
"description": "Substances of Concern declarations (ESPR)",
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"cas_number": {
"type": "string",
"pattern": "^\\d{1,7}-\\d{2}-\\d$"
},
"concentration_ppm": {
"type": "number"
},
"location": {
"type": "string"
}
}
}
},
"hazardous": {
"description": "Hazardous product flag",
"type": "boolean"
},
"material_safety_info_url": {
"description": "Material safety data sheet URL",
"type": "string",
"format": "uri"
},
"verified_ratio": {
"description": "UNTP data verification coverage (0.0 to 1.0)",
"type": "number",
"minimum": 0,
"maximum": 1
},
"verification_evidence_url": {
"description": "Link to verification attestation",
"type": "string",
"format": "uri"
}
},
"additionalProperties": true
},
"traceability": {
"description": "Optional chain-of-custody, retention, and evidence references.",
"type": "object",
"properties": {
"batch_id": {
"type": "string",
"maxLength": 120
},
"serial_number": {
"type": "string",
"maxLength": 160
},
"lot_number": {
"type": "string",
"maxLength": 120
},
"epcis_event_refs": {
"description": "ISO 19987 (EPCIS) event references for supply chain traceability",
"type": "array",
"items": {
"type": "object",
"required": [
"event_type",
"event_id"
],
"properties": {
"event_type": {
"type": "string",
"enum": [
"observation",
"aggregation",
"transaction",
"transformation"
]
},
"event_id": {
"type": "string"
},
"event_url": {
"type": "string",
"format": "uri"
},
"hash_digest": {
"type": "string"
},
"hash_method": {
"type": "string",
"enum": [
"SHA-256",
"SHA-384",
"SHA-512"
]
}
}
}
},
"chain_of_custody_url": {
"type": "string",
"format": "uri"
},
"w3c_vc_credential_id": {
"type": "string",
"format": "uri"
},
"w3c_vc_issuer": {
"type": "string",
"format": "uri"
}
},
"additionalProperties": true
},
"conformity_claims": {
"description": "UNTP-aligned conformity claims for regulatory and standards compliance.",
"type": "array",
"items": {
"type": "object",
"required": [
"claim_id"
],
"properties": {
"claim_id": {
"type": "string"
},
"description": {
"type": "string"
},
"reference_standard": {
"type": "string"
},
"reference_regulation": {
"type": "string"
},
"conformity_topic": {
"type": "string",
"enum": [
"environment",
"social",
"governance",
"safety",
"quality"
]
},
"declared_value": {
"type": "object",
"properties": {
"metric": {
"type": "string"
},
"value": {
"type": "number"
},
"unit": {
"type": "string"
},
"accuracy": {
"type": "number"
}
}
},
"conformance": {
"type": "boolean"
},
"assessment_date": {
"type": "string",
"format": "date-time"
},
"conformity_evidence_url": {
"type": "string",
"format": "uri"
}
}
}
},
"metadata": {
"description": "Additional metadata",
"type": "object",
"additionalProperties": true
}
},
"additionalProperties": true
}