Foodops
All docs

Guides · Updated 2026-08-23 · vb52ad33

QR Codes on the Bill / Receipt

Audio narration for this article is generated with the weekly docs refresh.

Plain-English summary

There is one QR code you can put on a printed bill: the outlet's Payment QR. You upload the QR image once against the outlet, and from then on every printed receipt for that outlet carries it near the bottom, centred, under the caption "Scan to Pay". There is no feedback or review QR feature — nothing in Foodops generates a "rate us" QR for the receipt — and the QR codes you may have seen in outlet settings for tables are a different feature entirely: those are printed on cards for the table so guests can order, not printed on the bill.

When you'd use this

  • You take bank-transfer / wallet payments and want customers to scan and pay from the printed bill.
  • Someone has asked "can we put a QR on the receipt for feedback?" and you need the honest answer plus the nearest workable option.
  • You're setting up a new outlet and want the receipt to look finished — logo, footer message, payment QR.

The one QR slot on the receipt: Payment QR

Set it up (once, per outlet)

  1. In the back-office, open outlet settings and edit the outlet.
  2. The outlet form has an image field for Logo and one for Payment QR — upload your QR image into Payment QR and save. [code: foodops-admin-app/apps/admin/src/components/settings/restaurant/OutletFormDialog.tsx — Logo + Payment QR image fields; apps/admin/src/services/outletSettingsService.ts — UploadPaymentQR / RemovePaymentQR @ d60e53a]
  3. It's per outlet, so a multi-outlet business can point each outlet's QR at a different account.

To take it back off, remove the image from the same field — the receipt then simply prints without it.

What actually prints

When the till builds a receipt it attaches the outlet's payment QR to the receipt footer, alongside the register's footer text. [code: foodops.counter.app/src/services/printing/receiptBrokerBridge.ts:47-59 buildFooter(freeText, outletHeader) → { freeTextLine1, paymentQrUrl, paymentQrBytes }; :517 footer: buildFooter(cachedSession?.receiptFooterContent, cachedSession?.outletHeader) @ c7d7801] The image is pulled down and cached as base64 when the session loads, so printing doesn't depend on fetching it at that moment. [code: foodops.counter.app/src/services/dataPreloader.ts:1284-1298 @ c7d7801]

The desktop print companion then renders the tail of the bill in this order [code: foodops.app.printing/Haafai.Printing/Services/PrintJobService.cs:993-1016 @ master]:

  1. Totals, then Outstanding
  2. Your receipt footer text, centred and word-wrapped over as many lines as it needs
  3. The caption "Scan to Pay"
  4. The QR image — centred, scaled to at most 170px wide, and run through a high-contrast greyscale pass so it stays scannable on thermal paper [code: PrintJobService.cs:432-462 DrawPaymentQR; :343 ApplyHighContrastGrayscale(brightness 1.1, contrast 3.0) @ master]
  5. The "Managed with Foodops" line

If no payment QR is set for the outlet, steps 3–4 are skipped and the receipt prints normally.

The other text you control: the receipt footer message

Separate from the QR, each sales register has a Receipt footer content box — free text, "Shown at the bottom of printed receipts." It's edited on the register in back-office settings and word-wraps across as many lines as it needs. [code: foodops-admin-app/apps/admin/src/components/settings/restaurant/RegisterFormDialog.tsx:536-546 (Field label "Receipt footer content", 3-row textarea, placeholder "Shown at the bottom of printed receipts."), :349 receiptFooterContent submitted @ d60e53a; foodops.app.printing/Haafai.Printing/Services/PrintJobService.cs:994-1006 wraps and centres it @ master]

That's the slot for "Thank you — tell us how we did at example.com/feedback" as text. It cannot render an image or a second QR.

Can I put a feedback / review QR on the receipt?

Not as a feedback feature — no. Foodops has no review/feedback QR generator, no per-receipt survey link, and no second image slot on the receipt. The receipt's only image slots are the outlet logo (at the top) and the outlet Payment QR (at the bottom).

What people do instead, and the trade-offs:

  • Put a feedback URL in the register's receipt footer text. Works everywhere, prints reliably, but it's a typed URL, not a scannable code.
  • Reuse the Payment QR slot for a feedback QR. Technically it will print — the field just takes an image. But the caption above it is hard-coded to "Scan to Pay" [code: foodops.app.printing/Haafai.Printing/Services/PrintJobService.cs:440 graphics.DrawString("Scan to Pay", …) @ master], so customers will be told to pay when you meant them to review, and you lose the slot for actual payment QRs. Only sensible if you don't use payment QRs at all, and even then it reads wrong.
  • Print your own table talkers / stickers for feedback and keep the receipt for payment.

If a scannable feedback code on the bill matters to you, treat it as a feature request rather than a configuration change.

What the per-table QR codes are (and aren't)

Outlet settings also has a QR codes feature under Floor layout — a design studio that generates a QR per table, lets you style the card (colours, header/footer text, logo), and exports them as printable 2×3 inch cards in a PDF. Each code points at that table's ordering link. [code: foodops-admin-app/apps/admin/src/components/settings/restaurant/QRCodesModal.tsx — floor selector, card design, qr-code-styling preview, bulk 2x3in PDF export, per-table URL /table/{id}/login @ d60e53a]

Those go on the table, not on the bill — they're for guests to scan and order, and they're covered in Outlets and Online Ordering. They have nothing to do with the receipt's payment QR.

Key concepts

  • Payment QR — one image, uploaded per outlet, printed at the bottom of every receipt for that outlet under a fixed "Scan to Pay" caption.
  • Receipt footer content — free text, set per register (not per outlet), printed centred above the QR.
  • Table QR codes — a separate per-table ordering feature, exported as printable cards from the outlet's Floor layout. Not on the receipt.
  • Print companion — the desktop print app that actually draws the receipt (including the QR) for thermal printers.

Common questions

Q: Can I put a QR code on the bill? A: Yes — one: the outlet's Payment QR. Upload the QR image on the outlet in back-office settings and every printed receipt for that outlet carries it at the bottom, centred, under a "Scan to Pay" caption.

Q: How do I add a QR code to the receipt for payment? A: Back-office → outlet settings → edit the outlet → upload your image into the Payment QR field → save. Nothing to configure on the till; the next receipt it prints includes it.

Q: Can I put a QR code on the receipt so customers can give feedback / leave a review? A: There's no feedback-QR feature. The receipt has exactly two image slots — the outlet logo at the top and the outlet Payment QR at the bottom — and the caption above the QR is hard-coded to "Scan to Pay". The workable option today is putting a feedback URL in the register's Receipt footer content text; a scannable feedback code on the bill is a feature request.

Q: Can I have two QR codes on one receipt — payment and feedback? A: No. There is a single QR slot on the receipt.

Q: Can I change the "Scan to Pay" wording above the QR? A: No — that caption is fixed in the print companion and isn't configurable. What you can change is the free-text Receipt footer content line, which prints just above it.

Q: Is the payment QR set per outlet or per register? A: The QR is per outlet. The footer text is per register. So two registers in one outlet share the same QR but can carry different footer messages.

Q: The QR prints but won't scan. A: Thermal paper and small QRs are a bad combination. The print companion caps the QR at about 170px wide and applies a high-contrast pass to help, so the usual fixes are on your side: upload a clean, high-contrast, square QR image (not a photo or screenshot of one), keep the encoded data short, and check the printer's paper and print density.

Q: We have several outlets — can each have its own payment QR? A: Yes. It's an outlet-level setting, so each outlet's receipts carry that outlet's own QR.

Q: What are the QR codes I see under Floor layout? A: Those are table QR codes for table ordering — generated per table and exported as printable cards. They go on the table, not on the receipt, and are unrelated to the payment QR.

Edge cases and known issues

QR set on the outlet but nothing prints

  • Symptom: The Payment QR is uploaded, but receipts come out without it.
  • Cause: The till caches the outlet header (logo + QR, as base64) when the session loads, so a QR uploaded mid-session may not be in that till's cached header yet. [code: foodops.counter.app/src/services/dataPreloader.ts:1284-1298 @ c7d7801]
  • Workaround: Reload the counter (or close and reopen the session) so it re-pulls the outlet header, then print again.

Feedback QR printed under a "Scan to Pay" caption

  • Symptom: A feedback/review QR was uploaded into the Payment QR slot and the receipt tells customers to pay.
  • Cause: The caption is hard-coded above whatever image is in that slot. [code: foodops.app.printing/Haafai.Printing/Services/PrintJobService.cs:440 @ master]
  • Workaround: Keep the slot for payment QRs and put the feedback link in the register's Receipt footer text instead.

Related

  • Outlets — where the Payment QR is uploaded, and the per-table QR design studio
  • Sales Registers — where the receipt footer text is set
  • Printers — receipt printing setup and the print companion
  • PDF Templates — document templates for invoices/credit notes (a different surface to the thermal receipt)
  • Online Ordering — what the per-table QR codes link to

Go beyond POS.
Choose the total solution.

Focus on creating the best experience for your guests while we handle the rest.