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.