Dynamic QR · Spring sale 2026
The developer-first dynamic QR API
The dynamic QR API for developers and print shops. Generate at 600 DPI, edit destinations after print, track scans by country and device. Bulk endpoints, signed webhooks, REST API on every plan.
No credit card. Free trial - 5 generations/mo, 1 dynamic QR with 1 destination edit, 50 scans/mo.
$7/mo
Production API from
600 DPI
Print resolution
5,000/req
Bulk endpoint
99.9%
API uptime SLA
Print once. Edit forever. The dynamic QR API for developers and print shops.
See it in motion
One screen, one printed QR, every scan accounted for. Edit destinations on the fly without reprinting a single sticker.
q.qrstudio.agency/q/sps26Live/spring-sale12,487/summer-sale7,842/black-friday4,310/holiday2,701https://yourbrand.com/spring-saleAll printed QRs reroute in under 2 seconds. No reprint.
Same stack your customers already trust
Stripe billing · Cloudflare DNS + custom-domain TLS · Resend transactional email · Sentry error monitoring.
How dynamic QR codes actually work
What a dynamic QR lets you do that a static one can't.
Print 10,000 flyers carrying a QR pointing at /spring-sale. The QR encodes a short URL on your domain - once etched, never re-rendered.
Watch every scan come in: country, city, device, browser, hour-of-week heatmap. Filter by referer or A/B variant. No tracking pixels needed.
Sale ends? Switch the destination to /summer-sale in 2 clicks. The QR on every printed flyer instantly redirects to the new page. Zero reprint cost.
The QR encoded on your physical asset never changes. Only what's on the other end of it does. That's the whole pitch.
Native SDKs for Python and TypeScript. Or just hit the API with any HTTP client - no wrapper required.
curl -X POST https://api.qrstudio.agency/api/v1/generate/ \
-H "X-Api-Key: smk_..." \
-H "Content-Type: application/json" \
-d '{
"data": "https://yourbrand.com",
"size_inches": 4,
"format": "png"
}' \
--output qr.pngFull quickstart · pip install qrstudio · npm install @qrstudio/sdk
One field away from dynamic
Change data into data_type: "dynamic" and the same QR becomes editable forever, with scan analytics and webhooks attached.
examples/spring-sale-qr.sh01curl -X POST https://api.qrstudio.agency/api/v1/generate/ \02 -H "X-Api-Key: smk_..." \03 -H "Content-Type: application/json" \04 -d '{05 "data": "https://yourbrand.com/spring-sale",06 "size_inches": 4,07 "format": "svg"08 }' \09 --output qr.svg10
01curl -X POST https://api.qrstudio.agency/api/v1/generate/ \02 -H "X-Api-Key: smk_..." \03 -H "Content-Type: application/json" \04 -d '{05 "data_type": "dynamic",06 "payload": {07 "name": "Spring sale 2026",08 "destination_url": "https://yourbrand.com/spring-sale"09 },10 "size_inches": 4,11 "format": "svg"12 }' \13 --output qr.svg1415# Response now carries X-QR-Dynamic-Id - PATCH it later to redirect16# anywhere without re-printing. Every scan logs to /api/v1/dynamic/<id>/analytics/.
01 curl -X POST https://api.qrstudio.agency/api/v1/generate/ \02 -H "X-Api-Key: smk_..." \03 -H "Content-Type: application/json" \04 -d '{05- "data": "https://yourbrand.com/spring-sale",05+ "data_type": "dynamic",06+ "payload": {07+ "name": "Spring sale 2026",08+ "destination_url": "https://yourbrand.com/spring-sale"09+ },06 "size_inches": 4,07 "format": "svg"08 }' \09 --output qr.svg1015+# Response now carries X-QR-Dynamic-Id - PATCH it later to redirect16+# anywhere without re-printing. Every scan logs to /api/v1/dynamic/<id>/analytics/.
Or skip the boilerplate
Drop in @qrstudio/sdk and the same script ships dynamic QRs, scan analytics, and a typed client - in five lines.
campaigns/spring-sale.ts01import { writeFile } from "node:fs/promises";0203const res = await fetch(04 "https://api.qrstudio.agency/api/v1/generate/",05 {06 method: "POST",07 headers: {08 "X-Api-Key": process.env.QR_KEY!,09 "Content-Type": "application/json",10 },11 body: JSON.stringify({12 data: "https://yourbrand.com/spring",13 size_inches: 4,14 }),15 },16);17const buf = Buffer.from(await res.arrayBuffer());18await writeFile("qr.png", buf);
01import { writeFile } from "node:fs/promises";02import { QRStudio } from "@qrstudio/sdk";0304const qr = new QRStudio({ apiKey: process.env.QR_KEY! });0506// Dynamic QR - destination editable forever, scan analytics built-in07const code = await qr.dynamic.create({08 name: "Spring sale",09 destination_url: "https://yourbrand.com/spring",10 size_inches: 4,11});12await writeFile("qr.png", code.bytes);
01 import { writeFile } from "node:fs/promises";02+import { QRStudio } from "@qrstudio/sdk";0203-const res = await fetch(04- "https://api.qrstudio.agency/api/v1/generate/",05- {06- method: "POST",07- headers: {08- "X-Api-Key": process.env.QR_KEY!,09- "Content-Type": "application/json",10- },11- body: JSON.stringify({12- data: "https://yourbrand.com/spring",13- size_inches: 4,14- }),15- },16-);17-const buf = Buffer.from(await res.arrayBuffer());18-await writeFile("qr.png", buf);04+const qr = new QRStudio({ apiKey: process.env.QR_KEY! });05+06+// Dynamic QR - destination editable forever, scan analytics built-in07+const code = await qr.dynamic.create({08+ name: "Spring sale",09+ destination_url: "https://yourbrand.com/spring",10+ size_inches: 4,11+});12+await writeFile("qr.png", code.bytes);
In Starter for $7. Or Pro for $19.
Rounded modules, square finder patterns, custom colors, transparent backgrounds, neon-alpha logo backings. ERROR_CORRECT_H baked in.
Up to 4500×4500 PNG (15″ at 300 DPI) or scalable SVG. Stickers, posters, billboards: scannable from across the room.
Encode a short URL once, change the destination forever. Don't reprint. Scan analytics on every redirect.
Up to 5,000 QRs per POST. Returns a ZIP plus manifest.json. Render cache makes re-runs free.
By country, city, device, browser, hour-of-week heatmap, geo pins, A/B variant split. Pro+ unlocks the full picture.
Agency tier: route every dynamic QR through qr.yourbrand.com. Auto-TLS via Cloudflare for SaaS.
Get pinged on every scan, dynamic create/update, quota threshold. Stripe-style signature verification. Retries with exponential backoff.
SHA-256 hashed API keys, scoped permissions (read / generate / dynamic-write), 7-day rotation grace, audit log on every call.
URL, vCard, Wi-Fi, mailto, SMS, geo, plain text. The API formats correctly so every scanner triggers the right action.
Pick your fit. Same API, same dashboard. The use case is the workflow on top.
Why teams pick QR Code Agency
Concrete things competitors charge $99+/mo for.
30% of modules can be obstructed before scannability drops. Logos, smudges, print bleed: scans keep working.
15″ at 300 DPI or scalable SVG. Stickers, posters, billboards: scannable from across the room.
EN + FR pages, GDPR + CCPA + Quebec Law 25 compliant out of the box. Cookieless analytics, no tracking pixels.
Open-source SDKs (pip + npm). HMAC-signed webhooks. Plan-aware rate limits. Audit log on every call.
Beta - May 2026
We ship a new feature every couple of days. Early customers shape what comes next. The testimonial slot on this page is yours.
Every plan, including free, ships dynamic QRs, scan analytics, and the full REST API. No enterprise gates. À-la-carte credits when you don't need a subscription.
Need volume / SLA / on-prem? Compare all plans or email sales@qrstudio.agency.
Free trial - 5 generations/mo, 1 dynamic QR, full REST API. No credit card. Upgrade in one click when you outgrow it.
Live preview
Inside the dashboard
The home view of QR Code Agency. Click any update to read the thread. Press ⌘K to search across the feed.
Live after launch
Click any webhook event to see the signed payload. Click a destination to spotlight its share. Same dashboard your team opens after the print run goes live.
Dynamic QR · Spring sale 2026
Webhook events
POST https://api.acme.studio/qrstudio