Quickstart
Go from zero to a working Digital Product Passport in under 5 minutes.
This guide walks you through creating a product, attaching passport data, and retrieving it -- all with simple API calls.
Prerequisites
- An EUlabel account with an API key (format:
sk_live_...) curlor any HTTP client
Step 1: Create a product
Every product needs a name, category, brand, and a valid GTIN (Global Trade Item Number).
curl -X POST https://api.eulabel.eu/v1/products \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Quinta do Crasto Douro Red 2021",
"category": "wine",
"brand": "Quinta do Crasto",
"gtin": "5601234567890"
}'Response:
{
"productId": "a1b2c3d4-...",
"qrCodeUrl": "https://eulabel.eu/01/05601234567890",
"createdAt": "2026-03-14T20:00:00.000Z"
}Save the productId -- you'll need it for the next steps.
Step 2: Attach a Digital Product Passport
Attach wine e-label data (ingredients, nutrition, allergens, origin) to your product:
curl -X POST https://api.eulabel.eu/v1/passports \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"productId": "a1b2c3d4-...",
"data": {
"productType": "wine",
"colour": "red",
"vintage": 2021,
"ingredients": ["Grapes (Touriga Nacional, Touriga Franca)", "Sulphur Dioxide"],
"nutrition": {
"energyKj": 351,
"energyKcal": 84,
"fatG": 0,
"saturatedFatG": 0,
"carbohydratesG": 0.6,
"sugarsG": 0.3,
"proteinG": 0.1,
"saltG": 0,
"alcoholG": 13.5
},
"allergens": {
"containsSulphites": true,
"containsEgg": false,
"containsFish": false,
"containsMilk": false
},
"origin": {
"country": "PT",
"region": "Douro",
"designation": "Douro DOC"
},
"producers": [
{ "name": "Quinta do Crasto", "role": "producer", "country": "PT" }
]
}
}'Response:
{
"passportId": "e5f6g7h8-...",
"productId": "a1b2c3d4-...",
"version": 1,
"status": "published",
"createdAt": "2026-03-14T20:00:00.000Z"
}Step 3: Retrieve the passport
curl https://api.eulabel.eu/v1/products/a1b2c3d4-.../passport \
-H "Authorization: Bearer sk_live_YOUR_API_KEY"The response contains the full structured passport data for your product.
Step 4: Download the QR code
curl https://api.eulabel.eu/v1/products/a1b2c3d4-.../qr \
-H "Authorization: Bearer sk_live_YOUR_API_KEY" \
-o label-qr.svgThis generates an SVG QR code encoding a GS1 Digital Link URI. When scanned, the resolver routes users to the appropriate passport view.
What happens when the QR code is scanned
Consumer scans QR code on wine bottle
|
eulabel.eu/01/05601234567890
|
Resolver detects audience context
|
Passport page displayed with ingredients, nutrition, allergensThe resolver serves different data to different audiences -- consumers see the product story, regulators get structured compliance data, and recyclers see material composition.
Next steps
- Authentication -- Learn about API keys, scopes, and permissions
- API Reference -- Full endpoint documentation
- SDK -- Use the TypeScript or Python SDK instead of raw HTTP