DPP Agent docs

QR codes and printable labels

DPP Agent renders QR codes and printable labels on demand. Both endpoints are public and need no key: anyone with a DPP id can request a QR or a label. Branding (dot style, eye style, centre logo, wordmark, font, layout) comes from the tenant's saved designs under Print → QR and Print → Labels in the dashboard.

QR code

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

Query parameters

Param Default Notes
url — Address to encode (instead of dppid)
dppid — DPP UUID; encodes the passport's public address
tenant from the DPP Tenant UUID; loads the tenant's default design
design tenant default A saved QR design id
src — tag or label: which label the code is printed on, added to the encoded address as ?src=
format svg svg or png
size 240 Pixel size of the PNG
color 000000 Foreground hex, no #
bg ffffff Background hex
dot_style square square, rounded-soft, rounded, rounded-heavy, dots
dot_size 100 Module coverage in %, 70–100
eye_style square square, rounded-soft, rounded, leaf
eye_color color Hex
margin 4 Quiet zone in modules, 0–8 (ISO/IEC 18004 asks for at least 4)
ec M Error correction L, M, Q or H; raised automatically when a logo is set
logo design's Centre logo, https:// or data:image/ URL, up to 24 KB
logo_pct design's Logo size as % of the code, 8–40
module_mm 0.4 Printed module size in mm, used with the measurement-window options
keep_host — 1 to encode url exactly as given. Without it, an address on <slug>.dpp.dppagent.com is moved to the brand's verified domain
download — 1 to send the file as a download named after the product

Examples

The tenant's default QR for a passport:

GET /api/v1/qr?dppid=3f2a9b1c-e0d8-4f8e-b308-d2541886e331

A 600 px PNG for print, with higher error correction, for a hang tag:

GET /api/v1/qr?dppid=3f2a9b1c-e0d8-4f8e-b308-d2541886e331&size=600&format=png&ec=Q&src=tag

A QR for any address, rounded, in a brand colour:

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

Where the code was scanned

src=tag (a hang tag, read in the shop) or src=label (a sewn-in label, read at home) goes into the encoded address. The passport records it with each scan, Analytics shows the split, and Ask the passport puts the questions that fit that moment first. Labels printed from Print → Labels set it from the template's Where the code is scanned from setting.

Cache

Cache-Control: public, max-age=600, s-maxage=600, with an ETag, so a changed design shows within ten minutes.

Label SVG

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

Renders a printable label from the tenant's default label template, or from a specific one with template=. The output is SVG at the label's physical size in millimetres.

Query parameters

Param Default Notes
dppid required DPP UUID
template tenant default Label template id
format svg Only svg; png answers 400

Cache: public, max-age=600, s-maxage=600.

Layouts

hangtag, care-label, neck-label, size-label, flag-label, sticker-square, nameplate, bottle-wrap, tyre-strip, bag-label and custom. Print → Labels has ready templates per category to start from.

Variables

Text in a template can use placeholders, written $var:source.field$:

$var:tenant.name$          brand name
$var:dpp.product_name$     product name
$var:dpp.gtin$             GTIN
$var:dpp.batch$            batch
$var:dpp.serial$           serial
$var:dpp.cpv$              variant (CPV)
$var:dpp.size$             size
$var:dpp.color$            colour
$var:dpp.passport_url$     passport address

A placeholder with no value is left as written, so a missing value is visible on the proof.

Many labels at once

Print runs of many labels (a PDF sheet or a ZIP of files per passport) are made in the dashboard under Print → Labels.