Skip to content

Scan guarantee

A QR code that doesn't scan is worthless, no matter how pretty it is. We treat scannability as a hard requirement, not a "best effort".

What we do server-side

Every QR the engine produces — manual or AI — goes through three checks before the file leaves the server:

  1. ISO/IEC 18004 conformance. Matrix dimensions, alignment patterns, timing patterns, quiet-zone width and error-correction level are verified to spec.
  2. Module contrast ratio. Foreground vs background contrast is measured perceptually (CIE Lab). Anything below the safe threshold is auto-corrected: gradients re-anchored, finder colors restored.
  3. Synthetic scan pass. A reference decoder (zbar) reads the rendered output. If the decode fails or returns the wrong payload, the engine fixes the config (raises ECC level, increases module scale, restores finders) and re-renders — automatically.

If the auto-fix can't reach a passing state, the API returns a structured error pointing to the offending fields rather than a broken QR.

What you see in the AI builder

The "strictScannability" toggle (on by default) tells the AI to prefer scannability over aesthetics when the two conflict. Turn it off and the engine will still validate, but it'll surface a warning instead of forcing a fix.

What happens if a printed QR fails

Send us the printed sample (photo) + the original export, and we regenerate the QR for free — no questions. Email us via the address in your receipt.

We have not yet seen a failure for a QR generated with strictScannability: true and eccLevel: "H". If we do, it's on us.

Why ECC H matters

Error correction level H lets the QR survive ~30% damage and still decode. We default to H for:

  • Any QR with a logo or center text overlay
  • Anything you plan to print on uncoated paper, fabric, or anything that ages
  • Outdoor signage exposed to UV / rain

L and M are valid for pixel-perfect screen displays where you control the medium. The builder lets you set this explicitly in Manual mode.