# GET /api/v1/qr

> GET /api/v1/qr turns any string into a QR code image with no key and no signup. Pass the payload as data (text, content, url and q also work), and optionally size, format, style, colours and error correction. Responses are deterministic and cache forever.

Source: https://useqr.app/docs/api/qr · No API key required · UseQR is free forever, no signup.

---

## Parameters

| Name | Type | Required | Detail |
| --- | --- | --- | --- |
| `data` | string | yes | What the code should contain. Anything up to 2,953 bytes. Also accepts text, content, url, q, chl. |
| `size` | integer | no | Pixel width of the rendered image. Ignored for svg and json. Values: 64–4096. Also accepts width, s, chs. Default 512. |
| `format` | enum | no | What comes back. svg-tiny is SVG Tiny 1.2, for Illustrator and cutters. Values: png · svg · svg-tiny · json · base64. Also accepts type, output, f. Default png. |
| `style` | enum | no | Module shape. Values: square · rounded · dot · diamond · star · vertical-bars · horizontal-bars · organic. Also accepts dots, modulestyle. Default square. |
| `eye` | enum | no | Finder-pattern shape. Values: square · rounded · circle · leaf · diamond. Also accepts eyes, eyestyle. |
| `color` | string | no | Foreground, as a 3- or 6-digit hex value with or without the #. Also accepts fg, dark, foreground. Default 000000. |
| `bg` | string | no | Background. `transparent` is accepted. Also accepts light, background, bgcolor. Default ffffff. |
| `ec` | enum | no | Error correction. H survives the most damage but makes a denser code. Values: L · M · Q · H. Also accepts ecc, level, errorcorrection. |
| `margin` | integer | no | Quiet zone in modules. The spec asks for 4. Values: 0–10. Also accepts quiet, quietzone, qz. Default 4. |
| `verify` | boolean | no | Run the full decode round-trip before responding and report it in x-qr-verified. Costs a rasterize and a decode, so it is off by default. Values: 1 · 0. Also accepts check. Default 0. |

## Example

```
curl "https://useqr.app/api/v1/qr?data=hello&size=512&style=rounded&fg=312e81&verify=1"
```

## Notes

- Every response carries x-qr-version, x-qr-ec, x-qr-modules and (when both colours are known) x-qr-contrast.
- Cache-Control is immutable: the same query always produces the same bytes.

## Errors

Every 4xx is RFC 9457 problem+json with an extra `fix` field containing a corrected call.

```json
{
  "type": "https://useqr.app/errors",
  "title": "Invalid parameter",
  "status": 400,
  "detail": "\"pink\" is not a color we understand",
  "fix": "use a hex color like color=0f172a (with or without #), e.g. ?data=hello&color=0f172a"
}
```
