Skip to content

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.

  1. 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).
  2. 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.
  3. To remove a logo, click Remove logo, confirm the warning checkbox (removing also changes the pattern), then confirm again to delete it.

Via API

POST /v1/codes/{id}/logo — multipart request, field file.

Terminal window
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.

DELETE /v1/codes/{id}/logo — no body.

Terminal window
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

StatusWhen
403The API key’s role is viewer
404Code not found in this workspace
413The file is larger than 1 MB
422Missing 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.svg or qr.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.pdf and qr.eps never contain a logo. For print artwork that should show the logo, download qr.svg or qr.png instead.
  • Always do a test scan on the real material before a full print run, especially after a pattern change.