2026-09 · Logo in the QR code
A QR code on packaging rarely stands alone — there is almost always a brand next to it. Until now, that logo had to sit beside the code. Now it can be uploaded straight into the middle of the code itself.
In the dashboard
A code’s detail page now has its own logo card:
- Choose logo opens the file picker (PNG, JPEG or WebP, up to 1 MB).
- Adding a first logo and removing one both show a warning with a mandatory checkbox, because both change the code’s module pattern (see below) — confirm it, then Upload logo or Remove logo.
- Replacing a logo needs no confirmation: only the image in the center changes, the pattern stays the same.
Anyone with read-only access (the viewer role) sees the status and preview,
but none of the three actions — uploading, replacing and removing all require
a write role.
What changes on the code
An uploaded logo is normalized to 512 × 512 px and embedded as actual
pixels into qr.svg and qr.png — not just a cleared area in the middle.
Both raise the error correction to H for it.
That has a consequence that matters for print: adding or removing a logo
changes the code’s module pattern (error correction M ↔ H). Replacing a
logo does not — error correction stays H, only the embedded pixels change.
In both cases, an already-printed code keeps working, since the encoded
destination does not depend on the logo — reprint only if you want the (new)
logo to show on the physical material, and never mix old and new print files.
PDF and EPS never embed a logo and keep their pattern unchanged; for
printing with a logo, SVG or PNG are the right choice.
Via API
curl -X POST https://qr3.app/v1/codes/qr_a1b2c3d4/logo \
-H "Authorization: Bearer qr3_sk_..." \
-F "[email protected]"
POST /v1/codes/{id}/logo accepts a multipart field file and replaces any
existing logo. DELETE /v1/codes/{id}/logo removes it again and is
idempotent. An oversized image answers 413, an unsupported format
(including SVG — only raster images are accepted) answers 422,
and a viewer role answers 403.
With a logo set, qr.svg and qr.png serve Cache-Control: public, max-age=300 instead of the usual 24 hours — an embedded image URL shows a
change within up to 5 minutes instead of the next day.
A full guide with every limit, error code and print note lives at Logo in the QR code.
What you need to do
Nothing. Without an uploaded logo, nothing changes for existing codes — no different pattern, no different cache time, no different download. The logo is a purely optional addition.