Fetch the complete documentation index at: https://eulabel.eu/docs/llms.txt Use this file to discover all available pages before exploring further. Full content: https://eulabel.eu/docs/llms-full.txt Append .md to any page URL for markdown, or send Accept: text/markdown.
Get Started

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

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

Base URL

All API requests use the following base URL:

https://api.eulabel.eu/v1

Authentication

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_..."},
)

On this page