The data of a counter receipt, to print or show
- Credentials, one of
- Station token
- OAuth access token
- Scopes
orders:read
What the till's own slip is built from, so a printer, WhatsApp and the screen never disagree: the shop's name, address, phone and (for a VAT vendor only) VAT number, the lines, any discount, the total, the VAT inside it, each payment with the cash tendered and the change given, and the first name of who served. Minor units, ZAR. Printing is the client's.
Access: OAuth scope orders:read; not write-gated.
AuthorizationBearer <token>It may call only the operations whose x-stations lists its kind, on its own store, and acts through the access of the owner or admin who paired it. Unpairing it, or that person leaving the business, ends it (401 station_revoked).
storeId*stringA store the person can reach. Any other id answers 404, never 403.
orderId*stringOK
application/json- response
data*curl -X GET 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/orders/<orderId>/counter-receipt' \ -H 'Authorization: Bearer <access_token>'{ "data": { "storeName": "Jabu's Plant Shop", "address": "12 Example Street, Greenside, Johannesburg", "phone": "+27 82 000 0000", "orderId": "riEhGrBxE2kF04RzXyaz", "number": "ORD-00001", "at": 1792924396792, "customerName": "Thandi Mokoena", "customerEmail": "thandi.mokoena@example.com", "customerPhone": "+27 82 000 0001", "lines": [ { "title": "Monstera deliciosa, 20 cm pot", "quantity": 1, "totalMinor": 32900 } ], "discountMinor": 0, "totalMinor": 32900, "taxMinor": 0, "payments": [] }}Has the customer paid yet GET
`waiting`, `paid`, or `cancelled` (the order was cancelled). The till asks every few seconds while the QR is up and stops when it is closed: one order, read by id. Nothing is charged or changed. Access: OAuth scope `orders:read`; not write-gated.
Email the customer a counter receipt POST
A walk-in only gets a receipt when asked, so this is that ask: it goes to the email on the order, for a customer of any kind. Once per order: a repeat, or a retry, sends nothing and answers `already_sent`. The order must have an email (422 `validation_error`: "No email for this customer.") and be paid (422: a receipt says the money arrived). A send that failed is 500 `internal_error`; try again. The mail is sent from the store's name; it is transactional, so it does not count against the daily email limit of connected AI apps. Access: OAuth scope `orders:write`; write-gated by the subscription.