QR Code API: Generate a Scannable QR in One Call

By the propzapi team · Last updated August 2026 · 9 min read

A QR Code API renders a scannable QR encoded into a branded card in one call.

Generating a bare QR code is a solved problem. Getting that QR onto a real ticket, with the event name, the seat, and your logo, is where the afternoon disappears.

A QR code API turns a URL into a scannable code over one HTTP call. Most return a lone black-and-white PNG. propzapi does it differently: you POST a template plus your URL, and it encodes the QR and renders it inside a finished image — a ticket, a card, a menu — with your text and brand. The code is static, so it works forever with no backend. I checked it both ways below.

I build propzapi, an image and PDF API, so the last half leans on it. But the QR facts here are general. This piece is about static codes; if you want a code you can edit after printing and track, propzapi does that too — see the dynamic QR guide.

QR isn't niche anymore. In 2026, 72% of consumers said they'd scanned a code in the past month, and global scans were on track to pass 1 trillion for the first time in 2025, per Air Apps' 2026 QR report. The market is growing around 20% a year. If you ship anything printed, you'll be generating codes.

How do you generate a QR code with an API?

POST a template and a URL, get an image back. With propzapi you send the built-in qr-card template and a url to /v1/images; it encodes the URL as a QR, drops it into a 1080×1080 card with your title and caption, and returns a hosted image URL. One call, one credit, and a render that fails costs nothing.

Here's the whole thing. I ran this exact call against the live API while writing this.

curl -X POST https://api.propzapi.com/v1/images \
  -H "X-API-Key: pk_live_…" -H "Content-Type: application/json" \
  -d '{"template":"qr-card",
       "modifications":{
         "url":"https://propzapi.com/pricing",
         "title":"Scan for pricing",
         "caption":"propzapi.com/pricing"}}'

# → {
#   "url":"https://images.propzapi.com/img_….png",
#   "template":"qr-card","width":1080,"height":1080,"format":"png","bytes":38066
# }
# X-Credits-Cost: 1   (a render that fails costs 0)

The QR isn't decorative — it scans. I rendered one encoding a test URL, then decoded the returned image: it came back byte-for-byte as the URL I put in. So the output is a real, working code, not a picture of one.

POST /v1/images url + title propzapi encode QR + render card image URL scannable PNG
One POST: your URL becomes a QR, rendered inside your layout, returned as a hosted image.

Static or dynamic QR codes — which does this generate?

Static. The QR encodes your URL directly, so it needs no backend, never expires, and costs nothing to keep alive. The trade-off is real: a static code can't be edited after it's printed, and it carries no scan tracking. A dynamic QR routes through a redirect link you control, which is what lets you change the destination later and count scans — but that needs a hosted service, usually a monthly plan.

This distinction trips people up, so here it is plainly.

A static QR is the URL, drawn as squares. Scan it and your phone goes straight there. Per The QR Code Generator's breakdown, that also means no analytics: you can't see how many people scanned.

A dynamic QR encodes a short redirect URL instead. The scan hits that link, gets logged, and bounces to the real destination — so you can edit where it points and watch scans in real time. Dynamic codes now make up the majority of the market, about 65% of paid QR usage in 2025, precisely because of tracking.

This article covers propzapi's static codes. If you need tracking or an editable destination, propzapi also does dynamic QR: it hosts the redirect, logs every scan, and lets you re-point the code anytime — one API call, no monthly plan.

STATIC (what propzapi makes) scan QR destination direct · no tracking · never expires DYNAMIC (needs a hosted service) scan QR redirect (logs scan) editable target destination + analytics · editable · monthly plan
Static goes straight there; dynamic adds a redirect that logs the scan and can be re-pointed later.

Can you put a QR code on a ticket or card?

Yes, and it's the reason to use a render API instead of a bare-QR one. Because the code renders inside a full HTML template, you get the QR plus the event name, seat, logo and colors as one finished image — not a lone square you have to composite yourself. Use the qr-card built-in, or drop {{ value|qr }} anywhere in your own ticket, menu, or receipt template.

This is the difference from QuickChart or GoQR. They hand you a clean QR PNG, which is perfect when a QR is all you want. The moment you need it inside something, you're back in an image editor.

With propzapi the QR is just another element in your template. The qr filter encodes any string to a crisp SVG QR, inline, wherever you put it.

<!-- Your own template: a QR anywhere in your HTML and CSS -->
<div class="ticket">
  <h1>{{ event }}</h1>
  <p>Seat {{ seat }}</p>
  <img src="{{ ticket_url | qr(scale=10, border=1) }}" alt="ticket QR">
</div>

<!-- POST this once to /v1/templates, then render it with each attendee's data.
     {{ value|qr }} encodes any URL or string to a crisp SVG QR, inline. -->

Now one template renders a personalised ticket per attendee: pass each person's seat and a unique URL, get back a print-ready image with a scannable code baked in. Same idea for a restaurant menu that links to ordering, a receipt that links to a return page, or a business card that links to your site.

BARE QR API a square you still have to place propzapi — QR IN THE IMAGE Prism Live 2026 Seat H-14 Scan at the door
Other QR APIs give you the square. propzapi gives you the ticket, with the code already in it.
ONE TEMPLATE + {{ value|qr }} → MANY FINISHED IMAGES Event ticket seat + entry QR Menu card scan to order Receipt scan to return Business card scan to save
The same template plus each record's URL renders a print-ready image with the code baked in.

QR code APIs compared

For a plain code, free bare-QR APIs win — QuickChart and GoQR return a PNG or SVG over a simple GET with no key. For a QR inside a designed image, a render API like propzapi fits. For editable destinations and scan analytics, use a dynamic QR — propzapi's is a plain API call, no monthly plan. They solve different problems; pick by what the QR has to sit inside and whether you need tracking.

Here's the honest rundown, checked in August 2026.

ToolReturnsTrackingBest for
QuickChartBare QR (PNG/SVG), freeNoa plain code, fast
GoQR / qrserverBare QR (PNG/SVG), free, no keyNoa plain code, no signup
Dynamic-QR servicesManaged redirect + codeYes (dashboard)editable links, scan analytics
propzapiQR inside your image/templateStatic + dynamictickets, cards, menus, receipts

Being straight about it: if a lone QR is all you need, use the free ones. propzapi earns its credit when the code has to live inside a branded, data-driven image you'd otherwise assemble by hand.

How do you make sure the QR code actually scans?

Four things decide it: error correction, a quiet zone, contrast, and size. Error correction rebuilds a code that's partly damaged or covered; a quiet zone is the clear margin phones need to find the code; contrast means a dark code on a light field; and size has to match the scan distance. propzapi renders at high resolution with a quiet border by default, so the output stays sharp when printed.

Most "it won't scan" problems come down to those four.

Error correction has four levels, L through H. Higher levels add redundancy so the code survives a logo overlay or a smudge, at the cost of density. propzapi's qr-card uses a middle level, which reads reliably while keeping the pattern clean.

The quiet zone is the one people delete to save space, and then nothing scans. Keep a clear margin around the code — the render leaves one by default. And don't invert it: a light code on a dark background confuses many scanners, so keep the code dark on light.

If proof matters — a code going on ten thousand printed tickets — pass receipt: true and the response returns the exact bytes' hash and the text that rendered, so you can confirm the run before it goes to the printer.

Error correction L–H · rebuilds a code that's partly covered Quiet zone clear margin so the phone can find it Contrast dark code on a light field — never inverted Size big enough for the scan distance
Get these four right and the code scans on the first try. propzapi handles the quiet zone and resolution for you.

What does a QR code API cost?

With propzapi it's one credit per rendered image, billed on delivery, and a render that fails costs nothing. There's a one-time 50-image trial with no card, then pay-as-you-go packs from $5 for 150 images that never expire. Bare-QR APIs are free for a plain code; you're paying propzapi for the QR rendered inside a finished, on-brand image, plus the same key that does cards, PDFs and screenshots.

So the math is simple. Need a naked QR? Use a free API. Need ten thousand personalised tickets, each with a scannable code and a seat number, rendered from one template? That's one credit each, and no image editor.

Frequently asked questions

How do I generate a QR code with an API?
POST a template and your data to an image API and get a PNG back. With propzapi, send template "qr-card" and a url to /v1/images: it encodes the url as a QR, drops it into a 1080x1080 card with your title and caption, and returns a hosted image URL. One call, one credit. Or embed {{ url|qr }} in your own template.
Does this create static or dynamic QR codes?
Static. The QR encodes your URL or text directly, so it works forever with no backend and no subscription. It does not redirect through a tracking link, which means you can't edit the destination after it's printed or count scans. If you need an editable destination or scan analytics, use propzapi's dynamic QR instead — POST /v1/qr gives a trackable code you can re-point anytime.
Can I track how many people scan the QR code?
Not from a static QR — static codes carry no tracking. For counts you need a dynamic QR, which routes each scan through a redirect that logs it. propzapi has this built in: POST /v1/qr gives an editable, trackable code with device and country breakdowns over REST, no monthly plan. This article is about static codes; the dynamic QR guide covers tracking.
Can I put a QR code on a ticket or card?
Yes, and that's the point. Because the QR renders inside a full HTML template, you get the code plus your event name, seat, logo and colors as one finished image, not a bare black-and-white square you have to composite yourself. Use the qr-card built-in, or add {{ value|qr }} anywhere in your own ticket, menu, or receipt template.
How do I make sure the QR code actually scans?
Keep four things right: enough error correction, a quiet zone (clear border) around the code, high contrast between the code and its background, and a large enough size for the scan distance. propzapi renders at high resolution with a quiet border by default, so the output stays sharp. You can also verify the exact bytes with a receipt.
How much does a QR code API cost?
With propzapi it's one credit per rendered image, billed on delivery, and a failed render costs nothing. There's a one-time 50-image trial with no card, then pay-as-you-go packs from $5 for 150 images that never expire. Bare-QR APIs like QuickChart and GoQR are free for a plain code; you pay here for the QR rendered inside a finished, branded image.

Encode your first QR in one call

If you just need a bare code, a free QR API is the right tool. If the code has to sit inside a ticket, a card, or your own branded layout, POST the qr-card template and a URL and get a scannable image back — or drop {{ url|qr }} into a template of your own. Grab a free key and render your first QR code now.

Get a free key See the templates