Table QR codes for every outlet, created from your POS
A chain opening a new site should not rebuild its table codes by hand. Create them when the floor plan is set up in your POS, one per table, each opening your menu with the table number already filled in.
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": "Indiranagar table 1",
"type": "website",
"category": "dynamic",
"content": {
"url": "https://example.com/menu/indiranagar?table=1"
},
"destinations": [
{
"target_url": "https://example.com/menu/indiranagar?table=1"
}
],
"client_ref": "indiranagar-t1"
},
{
"name": "Indiranagar table 2",
"type": "website",
"category": "dynamic",
"content": {
"url": "https://example.com/menu/indiranagar?table=2"
},
"destinations": [
{
"target_url": "https://example.com/menu/indiranagar?table=2"
}
],
"client_ref": "indiranagar-t2"
}
]
}'How the integration works
Your POS or ordering platform calls the API when an outlet floor plan is saved, with outlet and table as the client_ref. Each code opens your menu or ordering page with the table in the query string, so the order arrives already tagged.
- 1Create an API key under Developers.
- 2When an outlet floor plan is saved, send one item per table to POST /qrcodes/bulk with outlet and table as client_ref.
- 3Print the preview_url SVGs as table tents, or use the dashboard print sheets.
- 4When the menu moves, PATCH the destination. The printed tents stay on the tables.
What you get
Busy tables, busy hours
Per-code analytics show which tables and outlets are scanned, and when, without any extra tracking on your side.
Opening hours
daily_start, daily_end and daily_days limit a code to service hours on the days you choose.
Folders per outlet
folder_id groups every table of one outlet, so the dashboard stays usable at hundreds of codes.
New site in one request
Up to 50 tables in a single call, validated as a batch before anything is created.
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.
Restaurant tables API FAQ
Do I need a code per table?
Only if you want to know the table. A single code per outlet works for a menu; a code per table is what lets an order or a scan say where it came from.
Can I use the Qravio menu page instead of my own?
Yes. The menu QR type hosts a menu page for you, and it can be created through the same API.
What if a table number changes?
PATCH the destination or the name. The printed code keeps working.
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.
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.
Campaigns
Generate a tracked QR code for every placement, store or channel in a campaign, with UTM tags and a schedule, from your own tools.
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.