---
title: "Render a QR symbol"
method: GET
path: "/api/v1/qr/render"
tags: ["Public API v1"]
---

# Render a QR symbol

`GET /api/v1/qr/render`

## Request

- Base URL: `https://scanduro.com`
- URL: `https://scanduro.com/api/v1/qr/render`
- Auth: HTTP bearer

Stateless. Touches no stored code, consumes no quota and creates nothing, which makes it the
right endpoint to call while you are still checking that your key works.

Returns SVG by default, or a 1024-pixel PNG when `format=png` for safe website image caching.
Prefer SVG for print: a bitmap at the wrong size can fail silently. The
four-module quiet zone is always included and is not configurable; trimming it is a common
false economy that makes scanning fail at an angle.

Rate limited more tightly than the rest of the surface because it is CPU work rather than a
database read.

## Query parameters

- `format` 'svg' | 'png'
- `data` string, required
- `ecc` 'L' | 'M' | 'Q' | 'H'
- `dark` string
- `light` string

## Response `200`

The symbol as SVG or a 1024-pixel PNG, including a four-module quiet zone.

## Other responses

- `400`: Validation failure, a missing Idempotency-Key, or an unusable cursor.
- `401`: No key, a malformed key, an unknown key, a revoked key or an expired key. Deliberately one response for all five: telling the caller which applies would make the endpoint an oracle for enumerating valid keys.
- `403`: Either the plan does not include API access (`plan_required`) or the key does not carry the required scope (`missing_scope`). The credential itself is valid in both cases.
- `429`: Per-key limit reached. Retry-After gives the seconds remaining in the window.

---

[API](https://skmtc.dev/scanduro/apis/scanduro-public-api.md) · [All operations](https://skmtc.dev/scanduro/apis/scanduro-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scanduro/apis/scanduro-public-api/revisions/cdb36d96cad7?raw)
