Point of Sale (POS)

Ring up in-shop sales at /admin/pos without going through the web checkout flow.

Optional add-on · $15/month

Enabled per-tenant from the platform admin. Once active, STAFF and MANAGER roles see the POS link in the sidebar.

  • Customer attach (optional): anonymous walk-in by default; click the customer slot to search or quick-create.
  • Cart items: scan/search catalogue products, or use “Ad-hoc item” for free-form lines.
  • Quick-pick: active rentals and services with a price appear as labeled tiles at the top of the till — colored stripe shows Rental vs Service, and one tap opens the line modal pre-filled with the name and price.
  • Payments: Cash, e-transfer, paired Square Terminal reader, the Square POS mobile app (any Square hardware including the Square Reader), or manual card entry on the till.
  • Card device support: the “Send to reader” flow uses Square’s Terminal API and only works with Square Terminal, Square Register, or Square Stand after they’ve been paired with a device code. The handheld Square Reader / Reader for contactless and chip are not supported by the Terminal API — for those devices use the Square POS app handoff (below) or manual entry.
  • Receipts: print to a regular printer or email — the till accepts a receipt email even for anonymous sales.
  • Refunds: initiated from /admin/orders and /admin/invoices exactly like web orders.

Square POS app handoff (for Square Reader and other mobile Square hardware)

When the till is opened on an iPhone, iPad, or Android device that has the Square Point of Sale app installed, the card-payment modal shows a “Charge in Square POS app” option. Tapping it launches Square POS with the sale amount pre-filled; the cashier completes the charge with whatever hardware Square POS is paired to (Square Reader, Tap to Pay, etc.) and returns to the till to finish the sale.

Two confirmation flows are available — controlled by a single checkbox in /admin/configuration:

  • Manual confirm (default, no Square dashboard setup): the till launches Square POS and shows a “Did the charge succeed?” prompt with an optional reference field. Quick to set up, but the till has no automated proof of the charge — reconcile against the Square dashboard.
  • Verified callback (recommended for production): Square POS deep-links back to a callback URL on this site after the charge; the server re-fetches the order from Square’s API and confirms state + amount before saving the sale. End-of-day reconciliation is automatic.

Configuring the verified callback flow

  1. Sign in to the Square Developer Dashboard with the same Square account that powers your POS.
  2. Open the Application that issued the Access Token you pasted into /admin/configuration.
  3. Go to Point of Sale APIWeb Callback URL and paste the callback URL shown on the Configuration page (it ends in /admin/pos/square-callback). Repeat for the Sandbox application if you’re testing.
  4. Back in /admin/configuration, tick “I have registered the callback URL above in my Square Developer Dashboard.” Save.
  5. On your till device (iOS or Android), install the Square POS app and sign in with the same merchant account.

If the cashier reports that Square POS “didn’t come back” after a charge, the till exposes a manual-confirm fallback in the same modal — use it to save the sale and double-check the callback URL is registered exactly as shown.

Schedule enrollment at the till

The cashier can enroll walk-ins in any scheduled course, trip, or event from the till, in the same sale as products. Tap + Schedule to open the picker — a colored chip (Course / Trip / Event) on each row makes the type obvious. The schedule can be added to the cart before a customer is attached; the cart shows a reminder and the payment buttons stay locked until one is. Prerequisite warnings surface inline once both are present (cert-tier mismatch can be overridden with a reason; experience prereqs and paperwork are informational and the relevant emails go out automatically).

  • One schedule per sale; products + add-ons go on the same invoice.
  • If the schedule is full, the cashier picks a different date.
  • Emergency contact and medical notes are collected via a follow-up email and a self-serve page at /account/enrollments/<id>/complete-registration.