Qravio
QR code API for restaurant tables

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
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.

  1. 1Create an API key under Developers.
  2. 2When an outlet floor plan is saved, send one item per table to POST /qrcodes/bulk with outlet and table as client_ref.
  3. 3Print the preview_url SVGs as table tents, or use the dashboard print sheets.
  4. 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.

PlanAPI callsDynamic QRsWebhooks
Free, StarterNo API accessn/aNo
Pro3,000 a month300Scan, lead, scan limit
Agency25,000 a monthNo capAdds 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.

Start generating codes

Create an account, upgrade to Pro or Agency, and make a key under Developers in your workspace.