Epson Receipt Printers
ProxyBox supports Epson TM-series POS thermal printers (receipt printers) over USB as raw ESC/POS devices. Like Zebra printers, these are pass-through: your application generates the ESC/POS byte stream and ProxyBox delivers it to the printer unmodified — no driver processing, no rendering.
Connecting
Section titled “Connecting”Plug the printer in via USB and it’s auto-discovered. This includes older TM-series units with UB-* USB interface boards that don’t report a USB serial number — ProxyBox derives a stable printer path from the USB identity, so the path survives reboots.
Newer models with built-in USB (TM-T20III, TM-m30III, etc.) work the same way. The printer appears in the Printers module with a raw content type and a path like usb_sn_<serial> (or a synthetic identifier for serial-less units).
Sending ESC/POS
Section titled “Sending ESC/POS”POST the raw bytes directly:
curl -X POST https://pbx-D8A4.pbxz.io/api/v1/print/usb_sn_X7A123456 \ -H 'Content-Type: application/octet-stream' \ -H 'X-API-Key: ULA9WHXMFCHF' \ --data-binary @receipt.binESC/POS is a binary format, so when submitting through JSON use contentType: "raw_base64" and base64-encode the bytes. A minimal receipt in JavaScript:
const ESC = 0x1b, GS = 0x1d;const bytes = Buffer.concat([ Buffer.from([ESC, 0x40]), // ESC @ — initialize printer Buffer.from('Hello from ProxyBox\n\n\n'), // text + feed Buffer.from([GS, 0x56, 0x41, 0x03]), // GS V A 3 — feed and cut]);
await fetch('https://pbx-D8A4.pbxz.io/api/v1/print/usb_sn_X7A123456', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': 'ULA9WHXMFCHF' }, body: JSON.stringify({ content: bytes.toString('base64'), contentType: 'raw_base64' }),});Any ESC/POS library works — the popular ones for Node, Python, and Go all produce a byte buffer you can submit exactly like this.
Test Prints
Section titled “Test Prints”The Test Print button (and POST /print/{target}/test) prints a branded ESC/POS test receipt, formatted for standard 80mm receipt paper.
- Everything passes through. Formatting commands, barcodes, QR codes, and peripheral commands like the cash-drawer kick (
ESC p) are all just bytes to ProxyBox — if the printer supports it, it works. - No status feedback. ESC/POS status queries are request/response over the USB channel, which the raw print path doesn’t read. A paper-out condition won’t fail the job — check the printer’s LEDs if receipts stop coming out.
- Monochrome thermal. Like all receipt printers, output is black-on-white only.
ProxyBox Docs v1.0.6
