Introduction
Developer-first infrastructure for Digital Product Passports and EU digital labels.
EUlabel is the infrastructure layer that connects physical products to their digital identity. Through simple API calls, you can create compliant Digital Product Passports, generate GS1 Digital Link QR codes, and serve structured product data to consumers, regulators, recyclers, and retailers.
Early access — these docs are evolving quickly. If you need a walkthrough or notice a missing endpoint/example, open an issue on GitHub.
At a glance
- What you're building: Digital Product Passports (DPPs) and EU digital labels that are compliant by default.
- How it works: create a product → attach passport data → publish → QR scans resolve via the GS1-conformant resolver.
- What you get: API + SDKs + resolver + analytics, designed for both humans and machines.
Quickstart — pick your stack
cURL
Get started with raw HTTP requests
TypeScript
Type-safe SDK with auto-completion
Python
Idiomatic client with async support
Quick example
export EULABEL_API_KEY="sk_test_..."
curl -X POST https://api.eulabel.eu/v1/products \
-H "Authorization: Bearer $EULABEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Quinta do Crasto Douro Red 2021",
"category": "wine",
"brand": "Quinta do Crasto",
"gtin": "5601234567890"
}'const EULABEL_API_KEY = process.env.EULABEL_API_KEY;
const product = await fetch('https://api.eulabel.eu/v1/products', {
method: 'POST',
headers: {
'Authorization': `Bearer ${EULABEL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Quinta do Crasto Douro Red 2021',
category: 'wine',
brand: 'Quinta do Crasto',
gtin: '5601234567890',
}),
}).then(r => r.json());import requests
EULABEL_API_KEY = "sk_test_..."
product = requests.post(
"https://api.eulabel.eu/v1/products",
headers={"Authorization": f"Bearer {EULABEL_API_KEY}"},
json={
"name": "Quinta do Crasto Douro Red 2021",
"category": "wine",
"brand": "Quinta do Crasto",
"gtin": "5601234567890",
},
).json()Use sk_test_... in the sandbox and sk_live_... in production. Keep keys server-side and store them in a secrets manager.
Explore
Quickstart
Go from zero to a working passport in 5 minutes
SDKs
Client libraries for TypeScript and Python
API Reference
Complete REST endpoint documentation
Webhooks
Real-time event notifications
Data Formats
JSON-LD, linksets, and structured data
Knowledge Base
Learn about DPP, GS1, and EU compliance
Base URL
All API requests use the following base URL:
https://api.eulabel.eu/v1Authentication
Include your API key in the Authorization header:
curl https://api.eulabel.eu/v1/products \
-H "Authorization: Bearer sk_test_..."const response = await fetch('https://api.eulabel.eu/v1/products', {
headers: { 'Authorization': 'Bearer sk_test_...' },
});response = requests.get(
"https://api.eulabel.eu/v1/products",
headers={"Authorization": "Bearer sk_test_..."},
)