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 into the SVG and PNG downloads; PDF and EPS never include it.
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
qr.svg and qr.png embed the logo’s actual pixels, centered, scaled to a
fixed share of the code’s area. Both raise the error correction level to H
to keep the code scannable. qr.pdf and qr.eps are unaffected by a logo —
they never embed one and keep the pattern they would have without it.
Cache
With a logo set, qr.svg and qr.png 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 the current
qr.svgorqr.png— 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.
qr.pdfandqr.epsnever contain a logo. For print artwork that should show the logo, downloadqr.svgorqr.pnginstead.- Always do a test scan on the real material before a full print run, especially after a pattern change.