Logo in the QR code
A code can carry an optional logo in its center — your own brand mark instead of a plain QR pattern. The logo is embedded as actual pixels, in all four downloads: SVG, PNG, PDF and EPS.
In the dashboard
Open a code’s detail page. Next to the QR preview and download buttons is a Logo in the QR code card.
- Click Choose logo and pick a PNG, JPEG or WebP file (up to 1 MB — larger or other formats, including SVG, are rejected before upload).
- A preview of the selected file appears together with a warning:
- No logo yet — adding one changes the code’s module pattern. Confirm the checkbox, then click Upload logo.
- A logo is already set — replacing it only swaps the image in the center, the pattern stays the same. Click Replace logo; no confirmation is required.
- To remove a logo, click Remove logo, confirm the warning checkbox (removing also changes the pattern), then confirm again to delete it.
Via API
Upload or replace a logo
POST /v1/codes/{id}/logo — multipart request, field file.
curl -X POST https://qr3.app/v1/codes/qr_a1b2c3d4/logo \ -H "Authorization: Bearer qr3_sk_..." \Response (HTTP 201): the updated code, with logo_file_id set.
The file is checked by its magic bytes, not its extension or Content-Type,
and normalized to a 512 × 512 px transparent PNG (aspect ratio preserved). An
existing logo is replaced — there is only ever one logo per code.
Remove a logo
DELETE /v1/codes/{id}/logo — no body.
curl -X DELETE https://qr3.app/v1/codes/qr_a1b2c3d4/logo \ -H "Authorization: Bearer qr3_sk_..."Response (HTTP 200): the updated code, with logo_file_id set back to
null. Idempotent — calling it on a code with no logo still returns 200 and
changes nothing.
Errors
| Status | When |
|---|---|
| 403 | The API key’s role is viewer |
| 404 | Code not found in this workspace |
| 413 | The file is larger than 1 MB |
| 422 | Missing file field, or a format other than PNG/JPEG/WebP (SVG included) |
What changes on the code
All four formats — qr.svg, qr.png, qr.pdf and qr.eps — embed the
logo’s actual pixels, centered, scaled to a fixed share of the code’s area.
All four raise the error correction level to H to keep the code scannable.
Cache
With a logo set, all four formats — qr.svg, qr.png, qr.pdf and
qr.eps — are served with Cache-Control: public, max-age=300 (5 minutes)
instead of the usual public, max-age=86400, immutable (24 hours). An
embedded image URL used elsewhere — a page, an email, a document — therefore
picks up a logo change within up to 5 minutes. A cached copy from before a
code ever had a logo can take up to the full 24 hours to refresh, since it was
cached under the longer, immutable lifetime.
Printing
- A code already printed keeps working whether or not you add, replace or remove a logo — the destination it encodes never depends on the logo.
- Adding or removing a logo changes the module pattern. If the logo itself
needs to show up on the physical material, reprint using any of the four
current formats (
qr.svg,qr.png,qr.pdforqr.eps) — never mix print runs from before and after the change. - Replacing a logo does not change the pattern, so a reprint is only about wanting the new image on the material, not about scannability.
- All four formats now contain the logo alike — which one fits your print artwork is purely a question for your layout program (vector for PDF/EPS, raster for PNG, SVG for either).
- Always do a test scan on the real material before a full print run, especially after a pattern change, and never mix files from different states.