Receipt printers (ESC/POS)
Connect an 80 mm or 58 mm thermal receipt printer by IP, print a test receipt, and print receipts from your own app.
Most network receipt printers speak ESC/POS on port 9100. That includes the Epson TM range and the many generic 80 mm thermal printers. Laberty drives them through the print bridge, with no driver. Some Star printers use Star's own command set instead; check yours supports ESC/POS before buying.
You need Home or Business for the bridge, and Business to print receipts from your own app.
Set it up
- Connect the printer to your network, by cable or Wi-Fi.
- Give it a fixed IP address in your router. See how to fix an IP address. Many receipt printers print their own settings, including the IP address, if you hold the feed button while switching them on. Check your printer's manual.
- On Admin → Printers & stock, press Add a printer and choose Receipt printer. Pick your model: Epson TM-T88VII, TM-T88VI, TM-T20III or TM-m30III. For anything else that speaks ESC/POS, choose Generic receipt printer (80mm thermal) or Other receipt printer (58mm) under My model isn't listed.
- Choose On my network and type its IP address. Leave Port empty for 9100.
- Pick the paper width: 80 mm or 58 mm. Receipts are laid out to fit it, 48 characters across on 80 mm paper and 32 on 58 mm.
- Name it and press Save & send a test page. For a receipt printer, Laberty sends a test receipt in ESC/POS, never a PDF.
If you have a label printer too, keep the label printer as your default printer. Laberty's own screens make labels, not receipts.
What prints receipts
- The test receipt on Printers & stock.
- Your own app, through the API, on Business.
Laberty's own label screens (address labels, food labels, notes and appointment cards) make PDFs, which a receipt printer can't print.
Receipts from your app
Send receipt with a list of lines to POST /api/print. Laberty turns it into ESC/POS for the paper width: rows that line up, bold and large text, rules, a cut at the end, and accented letters that print properly.
{
"printerId": 2,
"receipt": {
"lines": [
{ "text": "MAPLE STREET BAKERY", "align": "center", "size": "big" },
{ "rule": true },
{ "key": "Sourdough", "value": "$6.00" },
{ "key": "Coffee", "value": "$3.00" },
{ "rule": true },
{ "key": "TOTAL", "value": "$9.00" },
"Thank you!"
],
"openDrawer": true
}
}
| Line | Prints |
|---|---|
"plain text" | A left-aligned line, wrapped to the paper |
{ "text": "…", "align": "center", "bold": true, "size": "big" } | align: left, center, right. size: normal, tall, wide, big |
{ "key": "Coffee", "value": "$3.00" } | The key on the left and the value on the right, joined by dots |
{ "rule": true } | A line of dashes across the paper |
{ "feed": 2 } | Blank lines |
- The paper is cut at the end. Send
"cut": falseto feed a little paper instead. "openDrawer": trueopens a cash drawer plugged into the printer.- You can also send your own bytes with
kind: "escpos"orkind: "raw".
Sending a label or a PDF to a receipt printer is refused with 422 wrong_kind, instead of wasting the roll. The full walkthrough is in the Integration guide.
If nothing prints
| The job or log says | What to do |
|---|---|
has no IP address set | Add the address on Printers & stock |
did not respond (timed out) | The printer is off, or the address is wrong |
refused the connection | The address is right but nothing listens on that port. Use 9100, or the port in the manual |
is not reachable from this machine | The bridge is on a different network from the printer |
More in Nothing printed.
Still stuck?
Contact support and tell us what you tried. We reply by email, usually within 1–2 business days.