Generate a QR code

Configure it below, then copy the URL, HTML, or cURL snippet straight into your app.

svg · png · jpeg

Content

5 params
data
Up to 2,000 characters over GET. Longer payloads switch this preview to POST automatically.
Formatformat
Error correctionecl
Recovers from ~15% damage. Good default.
size
400 px
margin
2 modules
Border around the code. The QR spec recommends 4; smaller looks tighter but may scan less reliably.

Style

3 params
color
bgcolor
Module shapeshape
QR code preview
Download

              

              

            

API reference

The generator above is just a client for this API: it calls GET /qr directly, with no separate backend logic.

GET/qr live

The primary endpoint. Cache-friendly and meant to be used directly as an <img src> target. Returns raw image bytes with Cache-Control: public, max-age=31536000, immutable.

If data exceeds capacity for the chosen ecl, it fails with 400 and a clear message.

POST/qr live

Escape hatch for long payloads. Same fields as the GET params, as a JSON body. Response is the raw image bytes (not JSON/base64).

Not cache-controlled. Body limit 64 KiB.

GET/healthz live

Returns 200 ok. Used by the Docker healthcheck, and by the status pill in the nav.

Parameters

query string · or JSON body
datarequired
URL-encoded content to encode. Capped at 2,000 characters on GET — use POST /qr for longer payloads.
formatpng
svg | png | jpeg
sizeauto
Approximate output width/height in pixels (square). Capped at 4096.
eclM
Error correction: L 7% · M 15% · Q 25% · H 30%
color#000000
Foreground hex color.
bgcolor#ffffff
Background hex color. Low-contrast pairs still succeed but carry an X-QR-Contrast-Warning header.
shapesquare
square | rounded | circle | diamond
margin2
Quiet zone width in modules, 0–10. The QR spec recommends 4.

About

QR Studio is an API for turning any URL, string, or blob of text into a QR code — for embedding in an app, printing on packaging or signage, or generating one-off codes from a script or CI pipeline. Point an <img> tag, a backend job, or a build step at GET /qr and get back an image; every option above — colors, shape, error correction — is just part of that same request. Output is fully deterministic per parameter set, so GET /qr responses are cached for a year at the edge.

  • go
  • net/http
  • go-qrcode/v2
  • svg
  • png
  • jpeg
  • docker
  • 2,000chars over GET
  • 4096px max size
  • 1yimmutable cache
  • 0external state