Your backend
One authenticated POST per job. You do not need a client library — it is a JSON REST API — but a Node client is available if you want typed helpers and something to wait for the result.
Product
Your code makes one request. We find the printer you named, and the computer it is attached to, and send the job down the connection that computer already opened to us.
Architecture
There is no hardware to buy and nothing to let in through your firewall. RocketPrint Station is an ordinary desktop app that runs next to printers you already own.
One authenticated POST per job. You do not need a client library — it is a JSON REST API — but a Node client is available if you want typed helpers and something to wait for the result.
Checks the request, saves the job, and finds the computer attached to the printer you named. If that computer is connected, the job goes out immediately. If not, the job waits and goes out as soon as it reconnects.
A small desktop app that signs in to your account, reports every printer that computer can see, and keeps one connection open to us. It receives jobs, prints them, and tells you what happened.
Thermal label and receipt printers get their own language, untouched. Documents print the normal way, using whatever driver that computer already has.
The request
The same request prints a Zebra label, a packing slip, or a kitchen ticket. The only thing that changes is contentType.
$ curl -X POST https://rocketprint.io/api/v1/print-jobs \
-H "X-API-Key: $ROCKETPRINT_KEY" \
-H "Idempotency-Key: order-1042-label" \
-H "Content-Type: application/json" \
-d '{
"printerId": "6a4738f7462183c7f5d70598",
"title": "Order #1042 label",
"contentType": "raw_base64",
"content": "XlhBLi4uXlha",
"source": "my-shop",
"options": { "copies": 1 }
}'
{
"id": "job_abc123",
"printerId": "6a4738f7462183c7f5d70598",
"stationId": "stn_bldr_wh_01",
"status": "sent",
"createdAt": "2026-08-22T14:03:07Z"
}raw_base64 carries the printer's own language — ZPL, EPL, or ESC/POS — base64-encoded. It reaches the printer untouched.
pdf_base64 and text print the normal way through that computer. Use these for packing slips, invoices, and pick lists.
The API also accepts URLs, but that is switched off by default and returns an error unless someone deliberately turns it on. Send base64.
The job lifecycle
The most useful thing a print service can give you is a straight answer about what happened. Here is what each status means.
Capabilities
The six things that decide whether a print integration survives a real warehouse.
Your code sends one request naming a printer. We find that printer and the computer it is attached to, and send the job down the connection that computer already opened to us. Nothing on your network is reachable from the internet, and your code never needs a hostname, an IP address, or a port.
ZPL, EPL, and ESC/POS reach the printer untouched. Nothing is redrawn, rescaled, or re-encoded, so a barcode you designed at 203 dpi prints at 203 dpi. We have checked the exact bytes arriving at the printer.
A computer that is asleep, restarting, or briefly off the network does not turn into a failed order. Jobs for an offline printer wait, then print automatically in the order you sent them the moment the Station app reconnects.
Every job has an ID, a status, timestamps, and a reason when it fails. Filter by status, printer, or source. Support can answer "what happened to that label" by looking, instead of asking someone to try again.
Send an Idempotency-Key and a repeated request returns the original job instead of printing a second copy. Send different content under a key you already used and we reject it rather than printing something unexpected.
Every computer, printer, job, API key, and monthly usage total across all your locations, in one place. Printing fails in physical ways; this is where your team sees it happen.
The console
Which computers and printers are online, what printed, what failed and why, your API keys, and this month's usage.
Boundaries
Every one of these is a real limit today. If one of them rules us out for you, better to find out here than three weeks into an integration.
completed means the print command succeeded, not that a sensor saw paper. No print service can tell you otherwise.
To find out how a job finished, you ask us. Webhooks are coming; until then, check the job with GET /v1/print-jobs/:id or let the Node client poll for you.
Label printing on Windows goes straight to the print spooler. PDFs and text open with whatever app Windows associates them with, which is the least predictable path we have.
We deliver what you send and tell you what happened. Producing the ZPL or the PDF is your code's job, or your carrier's.
About five minutes
Install the Station app, create a key, send a label. The quickstart is two curl commands.