Developers
Generating QR codes in Zapier with OpenQR
By Sam Moreton · updated 28 June 2026
Zapier connects OpenQR to thousands of apps so you can generate a QR code as a step in any automation — when a form is submitted, a row is added, an order ships. The OpenQR Zapier app exposes two actions: Create QR Code for a static image, and Create Dynamic QR Code for a re-pointable oqr.to link you can edit after it's printed. This guide connects the account, walks a real Zap end to end, and is honest about what the Zapier surface does and doesn't do.
8 min read · Updated 28 June 2026
This is the no-code path through Zapier. If you want the underlying mechanics, the two actions call the OpenQR REST API — see getting started with the API and dynamic codes and scan analytics. For where Zapier sits among the automation options, see QR codes in LLM apps and workflows.
Connect your OpenQR account
Authentication is a single API key. Create a free one at openqr.uk/api — sign in with a magic link, then mint a key (it starts with oqr_).
- 1
Add the action
In a Zap, add an action step and search OpenQR. Pick Create QR Code or Create Dynamic QR Code.
- 2
Connect the account
When prompted, paste your
oqr_…key. Zapier sends it asAuthorization: Bearer oqr_…on every request. - 3
Let it test
The connection test hits
GET /v1/dynamic?limit=1, so a successful connect confirms the key works.
The key controls the whole account
An OpenQR key can read and edit every dynamic code on your account, so treat it like a password — Zapier stores it in the encrypted connection, never put it in a Zap field. Keys are shown once and SHA-256-hashed at rest; rotate by minting a new one and reconnecting the account.
The two actions
| Action | Calls | Returns | Use it for |
|---|---|---|---|
| Create QR Code | POST /v1/qr | A file (PNG) + raw svg markup | A one-off static code for a known link |
| Create Dynamic QR Code | POST /v1/dynamic | id, slug, short_url, destination + a PNG | A re-pointable code you can edit later |
Create QR Code (static)
Encodes whatever you give it straight into the image. Fields: Text or URL (required, ≤2000 chars), Format (png default or svg), Size (64–2048, default 512), Quiet-zone margin (0–16), and Foreground/Background hex colours. The endpoint returns the raw image, so the action stashes it as a Zapier file you can attach to an email, upload to Drive, or print — plus the raw svg markup when you choose SVG.
Static codes can't be edited or tracked
A static code bakes the link into the pattern — there's no redirect in the middle, so it can never be re-pointed or counted. That's the right choice when the link is permanent. When you need editability or scan data, use the dynamic action instead. See static vs dynamic for the trade-off.
Create Dynamic QR Code (editable)
Creates an oqr.to short link that redirects through OpenQR. Fields: Destination URL (required, a public http(s) URL), an optional Label, and an optional Theme (a saved style's id or name). The action surfaces id, slug, short_url and destination, plus a printable PNG (qr_png) that already encodes the short_url — so the code you print stays re-pointable.
Custom slugs, tags and folders are an edit, not a create
The create-dynamic action doesn't set a custom slug, tags or a folder — the POST /v1/dynamic endpoint doesn't accept them at creation. Set those afterwards in the dashboard, or via PATCH /v1/dynamic/{id} from your own code. Lock in a memorable slug before you print, since changing it later breaks the old link.
Worked Zap: form submission → dynamic code → email
A common pattern: someone submits a form to register an asset (a product, a property, an exhibit), and you want to email them a QR that links to its page — but you want to keep the option to re-point it later. Three steps:
- 1
Trigger
Any trigger that yields a destination — a Typeform/Google Forms submission, a new Airtable or Sheets row, a new Shopify order. Map a field to the page URL you want the code to point at.
- 2
OpenQR → Create Dynamic QR Code
Set
Destination URLfrom the trigger field and aLabellike the submitter's name or the asset id. The step outputsshort_url,idand theqr_pngfile. - 3
Send and store
Add a Gmail/Outlook step that attaches
qr_png. In parallel, writeidandshort_urlback to a Sheets/Airtable record — thatidis your handle for re-pointing or reading scans later.
Always persist the id
Store the returned id against your own record at creation time. It's the only handle for re-pointing the code or reading its analytics afterwards. Keep just the image and you can never edit or measure that code again.
Re-pointing and analytics: where Zapier stops
Be clear about the boundary: the Zapier app only creates codes. It has no built-in action to re-point a code or read scans. Those operations live on the REST API — PATCH /v1/dynamic/{id} to change a destination, GET /v1/dynamic/{id}/scans for analytics. You have two clean ways to drive them from a Zap:
- Zapier's built-in Webhooks by Zapier action — a
PATCHtohttps://openqr.uk/v1/dynamic/{id}with anAuthorization: Bearer oqr_…header and a JSON body of{ "destination": "…" }. Same for aGETon the/scansendpoint. - The n8n community node, which does expose Update and Get Scans as first-class steps — if a chunk of your automation can live in n8n, it's the richer surface. See generating QR codes in n8n.
If re-pointing and analytics are central to your flow, the full REST endpoints are documented in dynamic codes and scan analytics, and the OpenAPI spec is at https://openqr.uk/openapi.json.
Mind the creation rate limit
Dynamic-code creation is capped at 20 per hour per account; over that the API returns 429 and the Zap step errors. For high-volume flows — a Zap that fires on every order — either add a delay/throttle, or move bulk minting to POST /v1/dynamic/bulk (up to 200 per request) outside Zapier. The bulk generation guide covers that path.