PPWR Compliance Use Case
Learn how to use Coolset APIs to meet Packaging and Packaging Waste Regulation (PPWR) requirements.
Overview
The EU Packaging and Packaging Waste Regulation (PPWR) requires companies to track, assess, and report on packaging across their supply chain. Coolset's APIs let you flag packaging products via tags, track the packaging risk assessments Coolset runs on them, and upload supporting evidence — using the same infrastructure as EUDR, without any regulation-specific endpoints.
Compliance Workflow
Step 1: Flag Products as Packaging
Products are flagged for PPWR via tags. Two tags are used:
| Tag | Meaning |
|---|---|
PPWR | This product is in scope for PPWR compliance |
PPWR_PACKAGING | This product is a packaging component used within a PPWR product |
Use PATCH /products/{id}/ to apply tags to existing products:
# Flag a product as in scope for PPWR
curl -X PATCH https://developers-scranton.coolset.com/api/products/456/ \
-H "Authorization: ApiKey YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tags": ["PPWR"]}'
# Flag a packaging component
curl -X PATCH https://developers-scranton.coolset.com/api/products/789/ \
-H "Authorization: ApiKey YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tags": ["PPWR_PACKAGING"]}'
Response:
{
"id": 456,
"name": "Cardboard Box 30x20x15cm",
"tags": ["PPWR"],
"pulse_params": {
"identifier": "scranton$Product$456",
"model_identifier": "scranton$Product"
}
}
Updating a product makes Coolset (re)run its packaging assessment. Note the pulse_params.identifier — assessments for the product are filed under it.
Step 2: Check the Packaging Assessment
Packaging assessments are run by Coolset, not created through the API. Look up the product's latest one by its pulse_params.identifier. There is no per-ID retrieve endpoint — filter the list instead:
curl -G https://developers-pulse.coolset.com/api/compliance/risk-assessments/ \
-H "Authorization: ApiKey YOUR_API_TOKEN" \
--data-urlencode 'identifier=scranton$Product$456' \
--data-urlencode 'assessment_type=ppwr_packaging_assessment' \
--data-urlencode 'latest_per_identifier=true'
Response (one entry of results, abridged):
{
"id": 101,
"identifier": "scranton$Product$456",
"assessment_type": "ppwr_packaging_assessment",
"assessment_run_id": "b2c3d4e5-f6a7-4890-b123-456789abcdef",
"assessment_summary": {
"status": "in_progress"
},
"results": {
"ppwr_conformity": {
"metadata": {
"role": "not_manufacturer",
"category": null,
"weights": { "by_material": {} }
},
"socs": {
"risk_score": null,
"risk_score_text": null,
"status": "analyzing",
"kpi_data": {
"socs_actions": {
"kpi_score": null,
"kpi_score_text": null,
"data_point_data": {}
}
},
"sources": {
"questionnaire": { "type": "questionnaire", "url": "" }
}
},
"heavy_metals_restrictions": { "...": "same shape as socs" },
"pfas_restrictions": { "...": "same shape as socs" },
"en_13430_compliance": { "...": "same shape as socs" },
"document_completeness": {
"...": "same shape, with additional kpi_data sub-keys (technical_documents, design_documents, component_breakdown, harmonisation, specifications)"
}
}
},
"assessment_date": "2025-05-12T10:00:00Z"
}
A fresh assessment is pending, and each control under results.ppwr_conformity reports "analyzing" with null scores until the relevant supplier data or questionnaire responses are available. Read the overall outcome from assessment_summary.status — pending, in_progress, failing, mitigated or passing — and poll the list filter above until it is no longer pending/in_progress.
results and metadata are untyped JSON: the shape above is what a ppwr_packaging_assessment returns today, but it varies by assessment_type and may change between assessment versions. Treat it as informational rather than a fixed contract.
Aggregate assessments run automatically — no need to trigger them manually.
Step 3: Upload Supporting Documents
Attach evidence (supplier declarations, material certificates) to your assessment:
# 1. Create the document record. `identifiers` links it to the product.
curl -X POST https://developers-pulse.coolset.com/api/documents/ \
-H "Authorization: ApiKey YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Recycled Content Certificate.pdf",
"content_type": "application/pdf",
"identifiers": ["scranton$Product$456"]
}'
# Response: {"document_id": 5521, "upload_url": "https://storage.googleapis.com/...", ...}
# 2. Upload the file to `upload_url` within 15 minutes (max 100 MB).
curl -X PUT "UPLOAD_URL" \
-H "Content-Type: application/pdf" \
-H "x-goog-content-length-range: 0,104857600" \
--upload-file "Recycled Content Certificate.pdf"
# 3. Confirm the upload. 200 = done, 202 = not visible yet, retry shortly.
curl -X POST https://developers-pulse.coolset.com/api/documents/5521/confirm_upload/ \
-H "Authorization: ApiKey YOUR_API_TOKEN"
Step 4: Download Evidence Package
Package all evidence for regulatory submission or audit. To see what the bundle contains first — or to download only some files — list it with GET /compliance/risk-assessments/101/evidence-bundle/ and pass the item keys you want as selected_items (see the EUDR guide):
curl -X POST https://developers-pulse.coolset.com/api/compliance/risk-assessments/101/evidence-downloads/ \
-H "Authorization: ApiKey YOUR_API_TOKEN" \
--output ppwr-evidence-package.zip
Optional: Invite Suppliers onto the Platform
If you want suppliers to contribute their own data, create a Value Chain with type: "supplier" and set send_information_request: true to trigger an invitation email:
curl -X POST https://developers-scranton.coolset.com/api/value-chains/ \
-H "Authorization: ApiKey YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"company_name": "Acme Packaging GmbH",
"type": "supplier",
"country_code": "DE",
"contact_name": "Jana Schmidt",
"contact_email": "jana.schmidt@acme-packaging.de",
"send_information_request": true
}'
Once the supplier accepts and connects, their data becomes available in your assessments.
Key Concepts
Product Tags
| Tag | Use |
|---|---|
PPWR | Marks the product as in scope for PPWR — used to filter which products get assessed |
PPWR_PACKAGING | Marks the product as a packaging component within a PPWR product |
Assessment Types
| Type | Description |
|---|---|
ppwr_packaging_assessment | Assessment of a single packaging product for PPWR compliance |
ppwr_aggregate_packaging_assessment | Aggregate of individual packaging assessments, run automatically |
Aggregate assessments run automatically after individual assessments complete.
Assessment Status
| Status | Action Required |
|---|---|
pending / in_progress | Wait — controls are still being evaluated |
passing / mitigated | Acceptable — download evidence package |
failing | Gather evidence and remediate |
Compliance Checklist
- PPWR-scoped products tagged with
PPWR - Packaging components tagged with
PPWR_PACKAGING - Packaging assessments resolved for all in-scope products
- Supporting documents (material certs, declarations) uploaded
- Evidence package downloaded and archived
- Non-compliant products flagged for remediation
API Endpoints Used
PATCH /products/{id}/— Supply Chain API — tag products as PPWR / PPWR_PACKAGINGGET /compliance/risk-assessments/— Compliance API — check packaging assessmentsPOST /documents/— Data API — upload evidencePOST /documents/{id}/confirm_upload/— Data API — confirm uploadGET /compliance/risk-assessments/{id}/evidence-bundle/— Compliance API — list evidence filesPOST /compliance/risk-assessments/{id}/evidence-downloads/— Compliance API — download evidence packagePOST /value-chains/— Supply Chain API — invite suppliers