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.

Custom Domains

Serve Digital Product Passports from your own branded domain instead of eulabel.eu.

By default, QR codes resolve through eulabel.eu. With custom domains, your products resolve through your own branded URL (e.g., labels.yourbrand.com).

At a glance

  • Bring-your-own domain for passports (e.g. labels.yourbrand.com).
  • Configure a CNAME to resolver.eulabel.eu.
  • EUlabel provisions TLS automatically after verification.

How it works

When a consumer scans a QR code, the request flows through:

labels.yourbrand.com/01/05601012012200
         |
   DNS CNAME → resolver.eulabel.eu
         |
   EUlabel resolver identifies your tenant
         |
   Passport served under your domain

Setup steps

Choose your subdomain

Pick a subdomain that clearly indicates product information:

  • labels.yourbrand.com
  • products.yourbrand.com
  • dpp.yourbrand.com

Add a CNAME record

In your DNS provider, create a CNAME record pointing to EUlabel's resolver:

TypeNameValue
CNAMElabelsresolver.eulabel.eu

DNS propagation typically takes 5-30 minutes, but can take up to 48 hours depending on your DNS provider and TTL settings.

Register the domain in EUlabel

export EULABEL_API_KEY="sk_live_..."

curl -X POST https://api.eulabel.eu/v1/custom-domains \
  -H "Authorization: Bearer $EULABEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "labels.yourbrand.com"
  }'
const EULABEL_API_KEY = process.env.EULABEL_API_KEY;

const domain = await fetch('https://api.eulabel.eu/v1/custom-domains', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${EULABEL_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ domain: 'labels.yourbrand.com' }),
}).then(r => r.json());

Verify ownership

EUlabel will attempt to verify the CNAME record. You can check the status:

curl https://api.eulabel.eu/v1/custom-domains/DOMAIN_ID \
  -H "Authorization: Bearer $EULABEL_API_KEY"

Possible statuses:

StatusMeaning
pendingCNAME not yet detected
verifiedDomain is active and serving
errorDNS misconfiguration detected

SSL certificate provisioning

EUlabel automatically provisions a TLS certificate via Let's Encrypt once the CNAME is verified. This typically completes within 2-5 minutes.

Troubleshooting

Go-live checklist: confirm CNAME, wait for verified, confirm HTTPS works, then roll out QR codes in production print runs.

After setup

Once verified, your existing QR codes continue to work through eulabel.eu, and new products can use your custom domain:

# Both resolve to the same passport:
https://eulabel.eu/01/05601012012200
https://labels.yourbrand.com/01/05601012012200

Next steps

On this page