Online Orders
How an order placed on your storefront reaches your counter — the order pipeline, the inbox, and what the flags on an order mean.
7 min read · Updated 10 Sep 2026
On this page
An online order is not a sale yet. It sits in an inbox on your side, waiting for a person to look at it, and it only becomes a sale in your books when you accept it. This page explains that waiting room: what the states mean, where you see them, and what happens to an order nobody touches.
Needs the Online Store, which is free with any active or trialing add-on or bundle. See Setting up your Online Store.
Why an order is not a sale straight away
Every sale in Kassly gets a sequential receipt number and, if you are voiding one, a permanent audit trail — because that is what the BIR requires of a sales record. An order typed in by a stranger on the internet must never land in that record unchecked. If it did, a burst of prank orders would burn a run of receipt numbers, and turning each one down would need a void that the BIR can see.
So online orders live in their own list. Two moments matter:
- Accept creates the sale, still unpaid, and pushes it to your kitchen.
- Complete takes the payment, issues the receipt number, and takes the stock out of your inventory.
Everything before Accept costs you nothing to turn down.
The order number
Each order gets a number like OS-00001, counting up per store. It is a convenience for talking to the customer on the phone, nothing more — it is not a receipt number and it means nothing to the BIR. The real receipt number is issued at completion. See Receipts.
The pipeline
| State | What you see | What the customer sees | Meaning |
|---|---|---|---|
| Pending | Pending | Received | Placed, waiting for someone on your side |
| Accepted | Accepted | Confirmed | You committed to it. A sale now exists, unpaid |
| Preparing | Preparing | Preparing | Being cooked, packed or picked |
| Ready | Ready | Ready | Waiting for the rider or for pickup |
| Completed | Completed | Completed | Paid, receipt issued, stock deducted |
| Rejected | Declined | Declined | You turned it down before accepting |
| Cancelled | Cancelled | Cancelled | You aborted it after accepting; the sale is voided |
| Expired | Expired | Expired | Nobody accepted it in time |
The moves Kassly allows are exactly these, and no others:
- Pending → Accepted, Declined, or Expired
- Accepted → Preparing, Ready, or Cancelled
- Preparing → Ready or Cancelled
- Ready → Completed or Cancelled
Completed, Declined, Cancelled and Expired are final. There is no reopening an order and no going backwards — a mistake after completion is handled as a normal return or void on the sale itself. See Returns and refunds.
Declined, Cancelled and Expired are three genuinely different things and Kassly keeps them apart on purpose. Declined and Cancelled are your decisions. Expired is the system's, and a pile of expired orders means nobody is watching the inbox — which is worth knowing separately from orders you turned away.
The inbox
The inbox is the bell icon in the top bar of the Kassly web app, on every
page. It carries a red count of orders still Pending (shown as 9+ above nine).
The bell is hidden entirely for stores without the Online Store, so it is never
a dead button.
Click it and a panel slides in listing every order that is Pending, Accepted, Preparing or Ready — that is, everything still in play. Finished, declined and expired orders drop off this list.
Each order card shows:
- The order number, with a bike icon for delivery or a bag icon for pickup
- The customer's name and the order total
- How many minutes ago it arrived, while it is still Pending. The timer turns red at 15 minutes
- Any risk flags
- The customer's mobile number as a tap-to-call link
- The delivery address and landmark
- Every item with its quantity and line total
- The customer's payment preference
Then the buttons for whatever the order's state allows: Accept / Decline while it is Pending, Start preparing, Mark ready, and finally a payment picker with Complete.
Declining requires a reason. You have to type one — the Decline button stays disabled until you do. It is stored on the order, not shown to the customer; their tracking page only says the store could not take the order and to call you.
Three limits worth knowing about the web inbox:
- It does not refresh by itself. It loads when the page loads and reloads after you act on an order. A new order that arrives while you sit on the page will not appear until you reload it. Do not rely on the web bell as your alarm for new orders — keep the Kassly app on your counter tablet open instead.
- The count is store-wide, not branch-wide. With more than one branch, the number on the bell is every pending order in the business.
- It shows recent orders only — the most recent 25. If you leave dozens of orders unaccepted, the oldest ones stop appearing in the panel.
Risk flags
Kassly marks orders that deserve a closer look before you commit a rider and a cooked meal. A flag is not a block; it is a nudge to make the phone call count.
| Flag | What triggers it |
|---|---|
| Email not verified | Email verification is on and this customer has not yet entered their code |
| High-value COD | A cash-on-delivery order worth more than 80% of your COD limit |
| Repeat canceller | This mobile number has two or more previous orders at your store that were declined, cancelled or expired |
Repeat canceller works off the phone number itself, so it catches a guest who has never been saved as a customer — which is the whole point of it.
Orders that expire on their own
Every five minutes, Kassly expires Pending orders that have sat longer than your Expire unaccepted orders after setting (30 minutes unless you changed it). The customer's tracking page then tells them it was not confirmed in time and offers them the menu again.
This only ever touches orders still Pending. Once you have accepted one, it is yours and no sweep will take it away.
An order booked for later is exempt from expiry — Kassly deliberately does not sweep scheduled orders. In practice this does not come up yet: the storefront checkout has no "order for later" option, so every order your customers can currently place is a now order, and every one of them will expire if left unaccepted.
Where an accepted order shows up elsewhere
Accepting does three things at once:
- Creates the sale. An unpaid sale appears with the order type set to Delivery or Takeout, tagged as having come from the online store, and with the customer's name, phone, address and landmark copied into the sale's notes so whoever prepares and delivers it can read them.
- Pushes it to the kitchen. If you have the Kitchen Display System, the order appears on it exactly like a counter order. See Kitchen Display System.
- Carries the delivery fee onto the sale, as a service charge, so the sale totals what the customer was actually quoted.
Accepting the same order twice — a double tap, a network retry, two staff on two terminals — creates only one sale. Kassly stamps the sale with the order's identity and simply hands back the sale that already exists.
What accepting does not do: it does not take payment, does not deduct stock, and does not issue a receipt number. Those all happen at completion, which is covered in Storefront fulfilment.