Last verified: 2026-05-19
Use POS (point of sale)
Take in-venue or counter orders through the storefront POS screen (staff-operated).
Path
/pos/{slug} — replace {slug} with the location slug (same organization as the public storefront at /store/{slug}).
Requires staff (or admin) session with POS permissions (pos.read, pos.create_order, etc.).
Who can do this
| Role | Access |
|---|---|
| Staff | When POS permissions granted |
| Admin | Typically yes |
Steps
- Sign in as staff or admin.
- Navigate to
/pos/{location-slug}for the active branch. - Build an order using the POS catalog UI (categories, items, modifiers).
- Assign order type (dine-in, pickup, etc.) if prompted.
- Submit payment or mark order per POS workflow (cash/card integrations vary by merchant).
- Order appears in
/staff/ordersor/admin/ordersfor fulfillment status updates.
Offline mode (cash only)
POS can continue limited operations when connectivity drops after the terminal has cached the branch catalog while online.
- Open
/pos/{slug}online at least once so menu, categories, and tables are cached locally. - Staff PIN login can use a cached credential snapshot after a prior successful online login.
- When offline, the banner shows Offline mode — cash orders only.
- New orders are saved to a local outbox and sync automatically when the connection returns.
- Cash payments for offline-created orders are queued and applied after the parent order sync completes.
- Card and e-wallet payments remain unavailable offline.
Superadmin ops can review server-side queue health at /superadmin/pos-offline-ops.
Status updates from POS
POS status changes may call /api/pos/order/status — fulfillment staff should still monitor the orders dashboard for Preparing → Ready → Completed transitions.
Verify it worked
- Order number appears in staff/admin orders list.
- Kitchen or customer displays update if configured.
Common issues
| Symptom | Likely cause | What to do |
|---|---|---|
| 403 / redirect | Missing POS permission | Admin updates role |
| Wrong location catalog | Wrong slug in URL | Use correct branch slug |