New receipt
The New receipt page lets an operator compose and print a fiscal receipt straight from the back-office, without touching the Android app. Pick a connected device, add the items and payments, click Print receipt, and the receipt is sent to the printer over the cloud connection.
Use it when you do not have the phone in hand, when you need to cut several receipts in a row from a desk, or when you are testing your integration end to end.
Open the page
From the Receipts list, click + New in the top-right corner. The form opens at /portal/receipts/new.
You can also bookmark the URL — no parameters are required.
Pick a target device
The right-hand sidebar shows every printer claimed by your organization, with its live connection status.
A device can be selected only when it is online and assigned to a controller. Devices that fail either check still appear in the dropdown, but they are greyed out with a reason badge:
- Offline — the printer is not reachable.
- Disconnected from WebSocket — the controller lost its live link to the cloud.
- Busy — another command is running on the device.
- Error status — the printer reported a hardware or fiscal error.
- No controller assigned — no controller has claimed this device yet.
Build the receipt
Choose the receipt type
Pick one of:
- Sale — a normal sales receipt (default).
- Refund — refund a previous sale.
- Storno — cancel a previous sale.
The form layout stays the same; the cloud routes the three types differently to the AMEF.
Add items
Each row represents one line on the receipt:
| Field | Notes |
|---|---|
| Name | Free text, required. |
| Quantity | Must be positive. |
| Price | Per-unit price, VAT-inclusive (Romanian fiscal convention). |
| VAT rate | Pick one of the legal Romanian rates (0%, 5%, 9%, 19%). |
| Department | Department index on the printer. |
| Discount | Optional, applied per line. |
Click + Add item to add another row, or the trash icon to remove one. There is always at least one row — you cannot delete the last one, only clear it.
Add payments
Each payment row sets a method and an amount:
- Cash
- Card
- Voucher
- Credit
- Other
Split a receipt across several methods by adding more rows (for example, 50 RON cash + 30 RON card). The sum of all payment amounts must match the receipt total exactly — the form will not submit a mismatch.
Review the totals
The form shows the running total and a VAT breakdown by rate as you type. Both are recalculated by the cloud when the receipt is printed, so you do not have to round anything manually.
Print the receipt
When the form is valid, click Print receipt.
Validation runs
The form checks that every item has a name, quantity, and valid VAT rate, and that the payments sum equals the total. If anything is off, the relevant field is highlighted and a toast explains what to fix.
The command is sent
The receipt is dispatched to the cloud, which forwards it to the controller for your selected device. While this happens, the form and the device picker are locked so you cannot fire a second receipt by accident.
The status badge appears
A status badge shows up under the device picker:
- Pending — the receipt is on its way to the printer.
- Completed — the printer confirmed the receipt was issued. The badge fades after a few seconds.
- Failed — something went wrong. The error message is shown on the badge and in a toast.
The form unlocks
As soon as the printer acknowledges the receipt (success or failure), the form unlocks and you can issue the next one.
Troubleshoot common errors
| Symptom | What to check |
|---|---|
| No device selected toast | Pick a device from the sidebar before clicking Print receipt. |
| Payments do not match total toast | Adjust the payment amounts so they add up to the receipt total exactly. |
| The badge stays on Pending for more than a minute | The printer probably went offline mid-job. Reload the page and check device status on Devices. |
| The badge shows Failed with a hardware message | Read the message on the printer (paper out, drawer open, end-of-day not closed, etc.) and retry. |
| Form is locked and you cannot edit | A previous command is still pending. Wait for the badge to clear, or reload the page. |
Know the limits
- One device per receipt. You cannot fan out the same receipt to several printers from the form.
- Online only. The Portal needs a network connection to print. For offline sales, use the Android app — it queues receipts locally and syncs when the connection comes back.
- No drafts. Closing the tab or reloading the page clears the form. Anything you have not printed is lost.
- Anonymous receipts only. The Portal form does not expose customer name or CIF fields. If you need a named receipt with a CIF, call the API directly (see below).
- Whole-receipt discounts are not supported from this form. Apply discounts per line instead.
- No scheduled sends. Receipts print immediately when you click the button.
Send receipts from your own software
Everything the New receipt page does is also available over the e-bon HTTP API. To issue receipts from your POS, ERP, or scripts, send a print_receipt command to the device:
POST /api/v1/devices/{deviceId}/commands
Authorization: Bearer <api-token>
Idempotency-Key: <unique-key-per-receipt>
Content-Type: application/json
{
"type": "print_receipt",
"payload": {
"type": "sale",
"operatorId": "1",
"items": [
{ "name": "Coffee", "quantity": 2, "price": 12.50, "vatRate": 19, "department": 0 }
],
"payments": [
{ "method": "card", "amount": 25.00 }
]
}
}
The cloud validates the payload, recomputes the totals and VAT breakdown server-side, and forwards the command to the controller. The same idempotency, validation, and status events apply whether the request comes from the Portal, the Android app, or your own integration.
See /api/receipts for the full payload reference, Idempotency for retry behaviour, and Events WebSocket for streaming command status into your own UI.
Continue exploring
- Receipts — browse, filter, and inspect previous receipts.
- Devices — pair printers and check their live status.
- Fiscal operations — run X/Z reports, cash-in, and cash-out from the Portal.
/api/receipts— issue receipts programmatically from your own software.
Device history
See every fiscal command sent to a single device, filter by type, and check whether failures can be safely retried.
Device detail — Overview
The first thing you see when you open a device in the Portal — four cards summarising who the device is, its hardware, the last receipt it printed and any active alerts.