A tracked code for every placement in a campaign
One code for the whole campaign tells you it worked. One code per placement tells you where. Generate them from your campaign tooling, each with its own UTM tags and live dates.
curl -X POST https://api.qravio.app/api/public/v1/qrcodes/bulk \
-H "Authorization: Bearer $QRAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"name": "Diwali poster Mumbai",
"type": "website",
"category": "dynamic",
"content": {
"url": "https://example.com/diwali"
},
"destinations": [
{
"target_url": "https://example.com/diwali"
}
],
"client_ref": "diwali26-poster-mumbai",
"utm": {
"source": "poster",
"medium": "offline",
"campaign": "diwali26",
"content": "mumbai"
},
"start_at": "2026-10-20T00:00:00Z",
"end_at": "2026-11-10T23:59:00Z"
},
{
"name": "Diwali poster Pune",
"type": "website",
"category": "dynamic",
"content": {
"url": "https://example.com/diwali"
},
"destinations": [
{
"target_url": "https://example.com/diwali"
}
],
"client_ref": "diwali26-poster-pune",
"utm": {
"source": "poster",
"medium": "offline",
"campaign": "diwali26",
"content": "pune"
},
"start_at": "2026-10-20T00:00:00Z",
"end_at": "2026-11-10T23:59:00Z"
}
]
}'How the integration works
Your campaign tool or a script creates one code per placement, store or print run with the placement as the client_ref and utm fields set. start_at and end_at line the codes up with the flight dates.
- 1Create an API key under Developers.
- 2Send one item per placement to POST /qrcodes/bulk, each with utm fields and the flight dates.
- 3Hand the preview_url SVGs to the print or design team.
- 4Read per-code analytics, or let UTM tags carry the visits into your web analytics.
What you get
UTM on the redirect
utm source, medium, campaign, term and content are appended when the code redirects, so visits land in your analytics correctly tagged.
Flight dates
start_at and end_at keep a code dark before launch and after the campaign ends.
Placement-level results
Every code has its own scan analytics by day, device and country.
Milestone alerts
On Agency, a scan.milestone webhook fires when a code crosses a scan threshold.
What each plan allows
Every call counts against the monthly quota, and a bulk request counts one call per item. Static codes use calls but not the dynamic QR allowance.
| Plan | API calls | Dynamic QRs | Webhooks |
|---|---|---|---|
| Free, Starter | No API access | n/a | No |
| Pro | 3,000 a month | 300 | Scan, lead, scan limit |
| Agency | 25,000 a month | No cap | Adds scan milestones |
Prices are on the pricing page.
Campaigns API FAQ
Do UTM tags work on every QR type?
They apply to codes that redirect to a URL, such as website codes. Page-type codes host their own page, so there is no onward URL to tag.
Can I change a placement after printing?
Yes. PATCH the destination or the UTM fields; the printed code does not change.
How do I compare placements?
Each code has its own analytics endpoint, and folders or tags let you group a campaign for the dashboard view.
Other things teams build
Packaging
Generate a unique, editable QR code per SKU or production batch from your ERP. Repoint printed boxes after they ship and see scans by country.
Tickets
Issue a unique QR code per ticket from your booking system, stop it working after the event, and pause it when a ticket is refunded.
Restaurant tables
Generate a QR code for every table across every outlet from your POS, and see which tables and outlets get scanned, and when.
Inventory
Tag every asset with a QR code generated from your inventory system. Static codes for permanent labels, dynamic codes when the record can move.
Certificates
Put a verification QR code on every certificate you issue, generated from your LMS or credential system. Static codes do not count against your plan allowance.
Loyalty
Issue a personal QR code per loyalty member from your CRM, and receive a webhook each time it is scanned.
SaaS products
Add editable, tracked QR codes to your own product. Create them on behalf of your customers, organise them per account, and show scan analytics in your UI.
Start generating codes
Create an account, upgrade to Pro or Agency, and make a key under Developers in your workspace.