2026-09 · Logo in the QR code

A logo in the middle of the code — without it stopping scanning

dashboard api print

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 MH). 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.

Documentação técnica completa →

← Todas as entradas