DPP Agent docs

QR codes and printable labels

DPP Agent renders QR codes and printable labels on demand. Both endpoints are public — meaning anyone with a DPP id can request a QR or label. Branding details (dot style, eye style, center logo, wordmark, font, layout) come from the tenant's saved designs in Settings → Design.

QR code

GET /api/v1/qr?dppid={uuid}

Query parameters

Param Default Notes
url URL to encode (alternative to dppid)
dppid DPP id; encodes the canonical passport_id
tenant from DPP Tenant id; pulls the tenant's default design
design tenant default Specific design id
size 240 Pixel size (PNG only — SVG scales freely)
color 000000 Foreground hex, no #
bg ffffff Background hex
dot_style square square | rounded | dots
eye_style square square | rounded | leaf
eye_color inherits color Hex
margin 4 Quiet-zone modules (ISO/IEC 18004 §7.3.7 min 4)
ec M Error correction: L / M / Q / H
format svg svg | png

Examples

Default tenant QR for a DPP:

GET /api/v1/qr?dppid=dpp_3f2a9b1c

Custom 600 px PNG, ready for print, high error correction:

GET /api/v1/qr?dppid=dpp_3f2a9b1c&size=600&format=png&ec=Q

Standalone QR for any URL with rounded modules and a brand colour:

GET /api/v1/qr?url=https://example.com/recall-info&color=B14B2C&dot_style=rounded

Custom designs

A tenant can save QR designs in Settings → Design → QR — for example a black-on-white minimal style for hangtags and a brand- coloured rounded style for shipping cartons. Each saved design has an id you can pass via design=.

Designs can be cloned from house defaults or built from scratch. House defaults render desaturated until hover in the editor so your own designs read as the active ones.

Cache

Cache-Control: public, max-age=86400 — a QR for a given URL + design is deterministic, so the CDN holds it for a day.

Label SVG

GET /api/v1/label?dppid={uuid}

Renders a printable label (hangtag, care-label, sticker, custom) per the tenant's default label template — or a specific template via template=.

Query parameters

Param Default Notes
dppid required DPP id
template tenant default Specific label template id
format svg svg only in v1; png, pdf, zpl ship via the batch print-run flow

Layouts

The renderer ships four base layouts. Tenants pick one per template and configure the details.

Layout Sizes Industries
hangtag 50×80, 60×100, custom Textile, footwear, furniture
care-label 35×60, custom Textile sew-in care label
sticker-square 25×10 up to 148×210, custom Electronics, battery, cosmetics, tyres, construction, detergents
custom-svg any Operator-supplied SVG

Variables

Label config strings support placeholders:

$var:tenant.name$        — brand name
$var:product.name$       — DPP product name (espr.pid.product_name)
$var:product.gtin$       — GTIN
$var:product.batch$      — batch
$var:product.serial$     — serial
$var:product.cpv$        — CPV
$var:passport.url$       — full canonical URL

Branding sources

Wordmark image walks: explicit wordmark_image_url → tenant logo_url → text fallback. Font picks from a 35-font allowlist spanning system fonts + Google Fonts.

For category-specific presets (hangtag for textile, nameplate for electronics, cell-label for battery, bottle-sticker for cosmetics, sidewall-sticker for tyres, etc.) see the seed catalogue under Settings → Design → Labels.

Examples

Tenant default label for a DPP:

GET /api/v1/label?dppid=dpp_3f2a9b1c

Specific template:

GET /api/v1/label?dppid=dpp_3f2a9b1c&template=tpl_hangtag_premium

Batch print run (v1.1)

For real production runs (10–10 000 labels), use the batch print endpoint that returns a single PDF or ZPL stream ready for the print shop or label printer:

POST /api/v1/print-runs
{
  "tenant_id": "tnt_…",
  "template_id": "tpl_hangtag_premium",
  "dpp_ids": ["dpp_a", "dpp_b", "…"],
  "format": "pdf",
  "dpi": 300
}

Returns a job id and a signed URL to download the rendered run once complete.