The order lands in the POS and nothing prints at the station
In short
An order that reaches the POS but never prints has been accepted without being routed, and routing is decided by the restaurant's own configuration rather than by anything in your payload. Trace one order across 3 columns — accepted by the API, visible in the order list, present in a device's queue — and the failure is always between the second and the third.
Key takeaways
- Accepted and routed are 2 different events. Your API response only tells you about the first.
- The dining option you send is a routing key. Send one the restaurant has not mapped and the order goes nowhere visible.
- Routing lives in a configuration matrix the restaurant owns: dining option, revenue centre, item category, device group.
- A scheduled order is not missing at 11am. It routes when it fires, and that is the intended behaviour.
- Nothing in the order payload can override station mapping, which is why this is fixed on the terminal and not in your code.
The order is in the POS. It appears in the order list, it will appear in tonight's sales report, and the kitchen has never heard of it. That gap is not a payload problem and it is very rarely an API problem: the POS accepted the order and then made a separate decision about which physical devices should see it, using configuration the restaurant owns and your integration cannot set.
That distinction is the whole diagnosis. Acceptance is an answer about validity. Routing is an answer about which prep station, which printer, which screen — and it is computed from the check the POS created, not from the JSON you sent. What the accepted order becomes is described in the check: what an online order turns into.
Three columns for one order, filled in during a live service
Do this with a single real order rather than a spreadsheet of complaints, and do it while someone is standing at the pass. It takes about 10 minutes and it removes 4 of the 5 candidate causes.
- Column 1, accepted. Record the POS check id and check number returned in the API response, plus the exact dining option, revenue centre and service-area values you sent.
- Column 2, visible. Find that check number on the terminal's own order list. Note what the terminal shows for its order type and revenue centre — not what you sent, what it stored.
- Column 3, queued. Ask the manager to open the kitchen routing view for each prep station and look for the check. If your POS has a printed-tickets or send log, read that too.
- Compare. A check present in column 2 and absent from every station in column 3 is a routing gap, and the rest of this page applies. A check absent from column 2 was never accepted, whatever your response said, and that is a payload question answered in building an order payload the POS will accept.
- Repeat once with an order placed by staff on the terminal itself, with the same items. If the staff order prints and yours does not, the difference is in the fields only your channel sets.
The dining option is a routing key you did not know you were setting
Most POS platforms use the dining option — takeaway, delivery, dine-in, curbside, whatever the restaurant has configured — as an input to routing, not merely as a label for reporting. A takeaway order may be configured to print at the expo printer and a delivery order at a packing station, and an option nobody has mapped routes to nothing.
Two failure shapes come out of this. The first is a value that does not exist at that location, so the POS falls back to a default that has no station attached. The second is a value that exists everywhere and has been mapped at 1 site only, which is how this symptom appears at 4 restaurants out of 5 in the same group. Both are cheap to see once you compare what you sent against what the terminal stored, and the reporting consequences of these fields are worked through in order source and dining option.
The revenue centre or service area nobody set on the new location
Revenue centre, service area and floor plan section are the same idea under different names: a subdivision of the restaurant that owns its own devices and its own reporting. Table-service sites usually have several — bar, terrace, main floor — and online orders need one assigned explicitly, because they did not arrive at a table.
When a group adds a location, the revenue centres are often created and the routing rules for the online-ordering centre are not. The check is created against an empty or default centre and there is no device group behind it. Table service adds a second version of the same trap: a check attached to a table inherits that table's service area, and tables are messier objects than they look — two parties at one table covers why.
Items in a category that no station has claimed
This is the partial version of the symptom, and it is the one that arrives as a complaint rather than a ticket: the mains printed and the desserts did not. Station routing is usually driven by the item's category or its printer group, so a new category created for an online-only item — a bundle, a meal deal, a channel-exclusive — has no station until someone assigns it.
- Check the item, not the order. Ask which categories exist and which have a station assignment, then look up your unprinted items in that list.
- Watch for modifier-only lines. Some platforms route a modifier with its parent item and some treat certain modifiers as their own printable line, which is how a single ticket ends up split across 2 stations.
- Expect new items to inherit nothing. A category created last week is the commonest culprit, and mapping items to stations is a standing job rather than a one-off — items to stations.
- Confirm your ids resolve to the items you think they do. A stale mapping row sends a real order for the wrong product, which is the failure described in the mapping table between your ids and the POS.
A device that is offline, unmapped, or quietly out of paper
The mapping can be perfect and the hardware still not deliver. A network printer with a stale address, a screen that lost its pairing after a firmware update, a device group that lists a printer somebody unplugged in April — each produces an order that the POS considers sent and the kitchen never sees. If your POS reports the ticket as printed and no paper appeared, that is a different investigation entirely: the order says printed and no chit came out.
| Column 2 shows | Column 3 shows | Most likely cause | Who fixes it |
|---|---|---|---|
| Check present, dining option differs from what you sent | Nothing anywhere | Unmapped or substituted dining option | Restaurant, in POS configuration |
| Check present, revenue centre blank or default | Nothing anywhere | No device group behind that centre | Restaurant, usually with the POS reseller |
| Check present and correct | Some lines queued, others missing | Item category with no station assignment | Restaurant, per item category |
| Check present and correct | Queued at a station, never produced | Device offline, unpaired or out of paper | Restaurant, on the floor |
| Check present, marked for a later time | Nothing yet | Working as designed — it routes at fire time | Nobody. Set the expectation instead |
Scheduled orders route when they fire, not when they arrive
An order placed at 11:00 for collection at 19:30 is supposed to sit. Most platforms hold it and release it to the kitchen a configured lead time before the promised moment, which means every mid-morning check of the kitchen screen finds it missing and every investigation into it wastes an afternoon.
Two things make this manageable. Ask the restaurant what the fire lead time is per location, because it is set per location and is frequently different from what head office believes. And make your own order status reflect it: a state of "scheduled, fires at 19:05" answers the guest and the manager without anyone opening the POS.
Acceptance is the POS agreeing your order is valid. Printing is the restaurant's configuration agreeing it belongs to a device. Only 1 of those 2 is anything you control.
Ask for the routing matrix, in writing, before go-live
The artefact that prevents all of this is unglamorous: a grid, per location, of dining option against revenue centre, showing which device group receives it, plus a list of item categories and their station assignments. Most restaurants have never written it down, and asking for it is how the gaps surface before a Friday service rather than during one.
Take it as an export or a screenshot from the POS rather than as a description, hold it per location, and re-check it whenever a menu category or a location is added. It belongs in the same pre-launch pack as your credential inventory — which matters because the identical rules are configured independently per site, the pattern behind it works at the first location and fails at the rest and behind the full menu sync that never finishes.
What we do not supply: printers, screens and the kitchen around them
We integrate with the POS and the kitchen display the restaurant already runs. We do not select, sell or support printers and KDS hardware, and a build that depends on new hardware needs the reseller in the room from week 1. Where the workflow itself is the problem — pacing, batching, what the line can absorb — that is kitchen throughput and fulfilment, a different piece of work from order injection.
What we do own is the part your channel can be held to: a payload that carries defensible values, a status model that distinguishes accepted from fired, and reconciliation that catches a check whose totals moved — your total and the POS total never quite agree. That is ordinary product build work, and the rest of this silo sits under integrating with the POS on the counter, inside our restaurants and food service practice.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Why does an order accepted by the POS never reach the kitchen printer?
Because acceptance and routing are 2 separate decisions. The POS validates your order and creates a check, then decides which prep stations should receive it using its own configuration — dining option, revenue centre, item category, device group. If any of those routes to no device, the check exists, reports on it correctly, and prints nowhere.
Can we force an order to a specific printer from the API?
No, and treating that as a gap is the wrong model. Station routing is configuration the restaurant owns on the terminal, and order APIs deliberately do not expose it, because a channel that could redirect tickets could also route food past the wrong station. What you can control is the dining option and revenue centre you send, and those have to match values the restaurant has actually mapped.
Only some items on the ticket printed. What causes that?
An item category with no station assignment. Routing is usually driven by an item's category or printer group, so items in a category created for online-only products — a bundle, a meal deal, a channel exclusive — will land on the check and never reach a station. Check which categories have assignments before assuming the integration dropped lines.
Should scheduled orders appear on the kitchen screen straight away?
No, and most platforms deliberately hold them. A future order is released to the kitchen a configured lead time before the promised time, and that lead time is set per location. Ask each restaurant what theirs is, and show the fire time in your own order status so nobody investigates an order that is behaving correctly.
- pos
- order injection
- kitchen routing
- diagnostics
The work behind this page
Builds from our portfolio that this page draws on.
Read next
- Order source and dining option: two fields your reporting rests onTwo small POS fields decide whether an injected order is taxed, routed and attributed correctly — and a wrong value is invisible until the first report nobody can answer.definition
- External IDs: the mapping table nobody designs until it breaksThe identity map between your catalogue and the till is the contract that makes every order possible, and 4 routine events break it silently. Design it as a versioned artefact.definition
- It works at the first location and returns an auth error at the other fourIdentical code, one store working and four rejecting, means authorisation was granted per merchant location and only completed once. The fix is an inventory, not a retry.diagnostic
- The full menu sync hits the limit before it finishesA sync that works on a 40-item menu and dies on a 400-item one is not too big. It is making one request per item, at the same minute as every other location.diagnostic
- The POS says it sent the event and your system never movedA status event that arrives after service is worth nothing. Five places it dies before your handler, and why the durable fix is a polling sweep over open orders rather than better webhook code.diagnostic
- What a POS partner programme gates, and what it does notA partner programme is a commercial gate wearing technical clothing. It controls scopes, production credentials and listing — and the wait is somebody else's decision, not engineering.definition
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation