Dynamic QR Code API: Editable, Trackable QR Codes
You printed 10,000 flyers with a QR code. The campaign URL just changed. With a static code, that's 10,000 pieces of scrap paper.
A dynamic QR code API lets you create a QR whose destination you can change after it's printed, and whose scans you can count. The trick is that the code encodes a short URL you host, not the final link. Scans pass through that URL, get logged, and redirect to wherever the code points right now. propzapi does this over plain REST — create, re-point, and read scans — and renders the code into a real image, not a bare square.
I build propzapi, an image and PDF API that added dynamic QR. So the code here is ours, but the mechanics are universal, and I'll be straight about where it stops (it's scan telemetry, not a marketing analytics suite).
What is a dynamic QR code, and why use an API?
A dynamic QR encodes a short redirect URL you control instead of the destination itself. That one layer of indirection buys two things a static code can never do: an editable destination and scan tracking. An API matters because it turns those into programmatic actions — generate thousands of codes, re-point them from your backend, and pull scan data into your own dashboard, instead of clicking around a marketing tool.
The distinction is the entire product. Static means the URL is drawn into the squares; change your mind and you reprint. Dynamic means the squares point at your server, and your server decides the rest.
That server hop is also what makes tracking possible. Because every scan hits your redirect first, you can record it before forwarding. No redirect, no analytics — which is why static codes are, by definition, invisible after they leave the printer.
How do you create a dynamic QR code with an API?
POST a destination and get back a code. With propzapi, send a target_url to /v1/qr and it returns a short URL, the QR image encoding that short URL, and a code id you'll use to re-point or track it later. Creating a code costs one credit because it renders the image; from then on the image never changes. Print image_url and you're done.
This is the call, run live against the API.
curl -X POST https://api.propzapi.com/v1/qr \
-H "X-API-Key: pk_live_…" -H "Content-Type: application/json" \
-d '{"target_url":"https://propzapi.com/summer-sale","title":"Summer campaign"}'
# → {
# "code": "KRu8NUM0e4",
# "short_url": "https://api.propzapi.com/q/KRu8NUM0e4",
# "target_url": "https://propzapi.com/summer-sale",
# "image_url": "https://images.propzapi.com/img_….png",
# "format": "png", "scans": 0
# }
# The QR encodes short_url; image_url is what you print. X-Credits-Cost: 1 The important field is short_url. That's what the QR actually encodes, and it's stable forever. The code is your handle for the two operations that make it dynamic: re-pointing and analytics.
You can also drop the QR into your own template. propzapi's {{ url|qr }} filter renders a QR anywhere in an HTML template, so a dynamic code can sit inside a full ticket, poster, or packaging label instead of standing alone.
How do you change where a QR points after it's printed?
Send one PATCH with the new destination. PATCH /v1/qr/{code} with a fresh target_url updates where the short URL redirects, and the change takes effect on the very next scan. The printed image is untouched because it still encodes the same short URL. Re-pointing is a data change, not a render, so it's free and instant.
This is the feature people actually buy dynamic codes for.
# Campaign changed. Same printed code, new destination — nothing to reprint:
curl -X PATCH https://api.propzapi.com/v1/qr/KRu8NUM0e4 \
-H "X-API-Key: pk_live_…" -H "Content-Type: application/json" \
-d '{"target_url":"https://propzapi.com/black-friday"}'
# → { "code":"KRu8NUM0e4",
# "target_url":"https://propzapi.com/black-friday",
# "short_url":"https://api.propzapi.com/q/KRu8NUM0e4", "updated":true }
# Free — re-pointing changes data, it doesn't render anything. Run a summer sale, then re-point the same physical code to your Black Friday page in November, then to a new-year landing in January. One printed asset, a whole year of campaigns. Fix a typo'd URL after the posters are already on the wall. Rotate a menu link when the menu changes. The code on the wall never has to move.
How do you track QR code scans?
Ask the code for its scans. GET /v1/qr/{code}/analytics returns the total, a breakdown by device and coarse country, and the most recent scans with timestamps. Because every scan already flows through your redirect, the counting is free and automatic. This is scan telemetry you can pull into your own tools — deliberately not a full marketing dashboard with heatmaps and funnels.
Here's the real response.
curl https://api.propzapi.com/v1/qr/KRu8NUM0e4/analytics \
-H "X-API-Key: pk_live_…"
# → {
# "code":"KRu8NUM0e4", "total":3,
# "by_device": [ {"device":"iOS","n":2}, {"device":"Android","n":1} ],
# "by_country": [ {"country":"IN","n":3} ],
# "recent": [ {"ts":"2026-08-19T17:57:43Z","country":"IN","device":"iOS"}, … ]
# }
# Free. Scans logged before a re-point stay counted — history carries across. Two honest notes on scope. Country is coarse, read from an edge header on the request, not a precise geolocation. And the device split comes from the user agent, so it's iOS / Android / desktop buckets, not a device fingerprint. It's enough to answer "how many, on what, from where," which is what most teams actually need, without pretending to be a surveillance platform.
One detail that matters for campaigns: scans recorded before a re-point stay counted. So when you move a code from one campaign to the next, its scan history carries across instead of resetting. The number is the code's lifetime, and you own it over the API.
Dynamic QR code APIs, compared
Most dynamic-QR tools are marketing platforms with an API bolted on, sold as monthly subscriptions with per-code or per-scan caps. A developer API prices the primitive instead: create, re-point, and track over REST, per call, no plan. Pick a marketing suite if you want campaign dashboards and a no-code editor; pick an API if you want to build QR into your own product.
Here's the honest rundown, with prices checked in August 2026.
| Tool | Model | Caps to watch | QR in your image |
|---|---|---|---|
| Bitly | $10/mo+ subscription | Few codes on entry plans | No — bare code |
| QR TIGER | $7/mo subscription | ~500 scans/code on entry | No |
| Uniqode | $9–15/mo subscription | ~50 codes per plan | No |
| propzapi | Pay-as-you-go, $5 / 150 | None on your codes | Yes — rendered into a template |
To be fair: the marketing suites give you a polished campaign UI, branded short domains, and bulk editors that propzapi doesn't. If a marketer owns your QR program, use one. If a developer is wiring QR into a product, an API with no subscription and no per-code ceiling is the lighter fit.
What does a dynamic QR code API cost?
With propzapi, one credit to create a code (it renders the image once), and re-pointing and analytics are free forever. There's a 50-image trial with no card, then pay-as-you-go packs from $5 for 150 that never expire. No monthly subscription, no per-code fee, and no scan caps on codes you own — so a code that gets a million scans costs the same one credit as one that gets ten.
That's the real gap from the $7-to-$60/month platforms. You pay once, when the code is born, and never again for the scans it earns. For a product that mints codes on demand — one per ticket, per asset, per user — per-call pricing beats a subscription with a code ceiling every time.
Frequently asked questions
- What is a dynamic QR code?
- A dynamic QR code encodes a short redirect URL you control, not the final destination. Every scan hits that URL, gets logged, and forwards to wherever the code currently points. Because the destination lives on the server, you can change it after the code is printed, and you get scan analytics. A static QR encodes the destination directly, so it can do neither.
- Can I change a QR code's destination after printing it?
- Yes — that's the whole point of a dynamic code. The printed image never changes because it encodes a fixed short URL. You update where that short URL redirects with one API call. With propzapi it's PATCH /v1/qr/{code} with a new target_url; the next scan lands on the new page, and the code you already printed keeps working.
- How do I track scans on a QR code?
- Route the QR through a redirect you own and log each hit. With propzapi that's built in: GET /v1/qr/{code}/analytics returns the total scan count, a breakdown by device and coarse country, and the most recent scans. It's scan telemetry over REST, not a full marketing analytics suite — no heatmaps or time-series charts, just the counts you can pull into your own dashboard.
- How is a dynamic QR code API different from Bitly or QR TIGER?
- Those are marketing tools with a QR feature, priced as monthly subscriptions with per-code or per-scan caps. propzapi is a developer API: create, re-point, and read scans over plain REST, billed one credit per code you generate, with no subscription and no caps on your own codes. It also renders the QR inside a template image, not just a bare square.
- Does the QR image change when I re-point it?
- No. The image encodes a stable short URL, so it stays byte-identical no matter how many times you change the destination. That's why you can print it once and re-point it across campaigns forever. Re-pointing is a data change on the server, not a re-render, so it costs nothing and takes effect on the very next scan.
- How much does a dynamic QR code API cost?
- With propzapi, creating a dynamic code costs one credit (it renders the QR image once); re-pointing and reading analytics are free. There's a 50-image free trial with no card, then pay-as-you-go packs from $5 for 150 that never expire. No monthly subscription, no per-code fee, and no scan caps on codes you own — unlike the $7 to $60/month QR platforms.
Mint your first dynamic code in one call
If you need a QR you can edit after it ships and count the scans on, a dynamic code is the tool, and an API is the way to wire it into your product. POST a URL to /v1/qr, print the image, and re-point it whenever the campaign moves. Grab a free key and create your first trackable code now.