Worked QR samples
The endpoint list below documents every operation’s parameters; this overlay walks a QR render the way a checkout or loyalty integration actually uses it: render the JSON envelope → save the PNG binary → branch on the script-scheme rejection. Success envelopes are{ data, meta } when you ask for JSON (format=json), and raw binary when you
let the default image/png content-type carry the pixels — see How to
read a worked sample. Rendering runs fully
in-cluster — the payload never leaves the platform.
Every response carries meta.request_id. Quote it when you report a
render the SDK will not link to, or a phone number that failed the
normalization the SMS route applies.
1. Render a QR for arbitrary data, returned as a JSON envelope
Passformat=json to get the base64 data URL inside the standard
{ data, meta } envelope instead of raw PNG bytes:
200
2. Save the QR as a raw PNG
Omitformat (or pass format=png) and the route streams image/png
bytes straight to disk — useful for batch print jobs and attach-to-CDN
pipelines:
- The output is square; the
sizequery param (50–1024, default 300) sets the edge length. - Responses are cacheable for five minutes (
private, max-age=300), so a CDN between you and the API can serve repeat scans without a re-render.
3. Deep-link a QR to the native SMS composer
GET /api/v1/qr/sms encodes an sms:<phone>?body=… deep link —
scanning it opens the device’s native SMS composer addressed to the
given number with an optional pre-filled body. The number is validated
and normalised to E.164 before render.
200
- The envelope echoes the exact
sms_linkencoded into the QR, plus the normalised E.164phone— pass a national-format number and the route returns the same envelope with E.164 applied. - A 400 fires when the phone is undialable under the numbering plan; the rejected input is echoed back, not stored.
4. Click-to-chat a WhatsApp conversation from a QR
GET /api/v1/qr/whatsapp encodes a https://wa.me/<phone>?text=…
click-to-chat deep link — scanning it opens a WhatsApp chat with the
given number and an optional pre-filled message. Same envelope shape as
the SMS route, so a checkout scanner picks the channel by preference
and renders the data URL inline:
200
- The
whatsapp_linkis the exact deep link encoded into the QR — paste it into a<a href>for an SMS-fallback path when the scanner stripswa.me. phoneis echoed in bare-digit form (no+), matching the seeded recipient stringwa.meitself renders.
5. Errors
Errors follow the{ error, meta } envelope. The failure every
integrator builds a branch for:
400 — script-scheme rejection. A payload starting with
javascript:, data:, vbscript: or another pseudo-scheme never
reaches the renderer, so a misrouted user gesture cannot become a stored
XSS in someone’s scanner; plain text and http(s) URLs still encode:
400