Product

One print API for every printer, location, and workflow.

Your application makes one consistent request. RocketPrint resolves the organization, the printer, and the station that owns it, then dispatches the job over a connection that station opened outward.

Architecture

Three moving parts, one of which is already in your building.

There is no appliance to buy and no inbound connection to allow. The agent is an ordinary desktop application that runs next to printers you already own.

Your backend

One authenticated POST per job. No SDK is required — it is a JSON REST API — but a Node client is available if you want typed helpers and a status poller.

RocketPrint

Validates the request, persists the job, and finds the station that owns the target printer. If that station is connected, the job dispatches immediately. If it is not, the job waits and dispatches on reconnect.

The local agent

A small desktop application that signs in to your organization, reports every printer the operating system can see, and holds one authenticated outbound connection open. It receives jobs, prints them, and reports back what happened.

Your printers

Thermal label and receipt printers get their native language byte-for-byte. Documents go through the station's own print system with whatever driver that machine already has installed.

The request

One shape of request, five kinds of content.

The same endpoint prints a Zebra label, a packing slip, and a kitchen ticket. What changes is contentType.

bash
$ 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 content

raw_base64 carries the printer's own language — ZPL, EPL, or ESC/POS — base64-encoded. It is written to the queue untouched.

Documents

pdf_base64 and text print through the operating system on the station. Use these for packing slips, invoices, and pick lists.

URI-based content types exist in the API but are disabled by default and return a validation error unless an operator explicitly enables station-side fetching. Send base64.

The job lifecycle

Seven states, each of which means one specific thing.

The most valuable thing a print API can give you is an honest answer about what happened. Here are the states, defined precisely.

pendingdispatchingsentprintingcompleted
pending
Accepted, validated, and persisted. If the printer's station is offline, the job waits here.
dispatching
Atomically leased by one dispatcher so a job is never delivered twice.
sent
Delivered over the open connection to the agent that owns the printer.
printing
The agent handed the job to the operating system's print system and it was accepted.
completed
The print command succeeded. See the boundary note below for exactly what this does and does not mean.
failed
Something went wrong. The job carries the reason — a rejected queue, an unreachable printer, an unsupported format.
canceled
You canceled the job while it was still pending. Once dispatched, a job is no longer cancelable.

Capabilities

What the system actually does for you.

Not feature bullets — the six behaviors that decide whether a print integration survives a real operation.

Cloud-to-local routing

Your application submits one consistent API request naming a printer. RocketPrint resolves the organization, the printer, and the station that owns it, and dispatches over a connection that station opened outward. Your local network is never addressed from the internet, and your application never learns a hostname, an IP, or a port.

Label-native fidelity

Raw ZPL, EPL, and ESC/POS pass through byte-for-byte to the print queue. Nothing is rasterized, re-scaled, or re-encoded, so a barcode you designed at 203 dpi prints at 203 dpi. We have verified the exact bytes arriving on a printer's TCP port.

Offline resilience

A station that is asleep, rebooting, or briefly off the network does not turn into a failed order. Jobs for an offline printer persist as pending and dispatch automatically, in creation order, the moment the agent reconnects.

Observable jobs

Every job has an id, a status, timestamps for creation, dispatch, and completion, and a failure reason when it fails. Filter by status, printer, or source. Support can answer "what happened to that label" by looking, not by asking someone to try again.

Safe retries

Send an Idempotency-Key and a retried request returns the original job with Idempotency-Replayed: true rather than printing a second copy. The same input replays; different input under the same key is rejected with a conflict.

Fleet management

Stations, printers, live presence, job history, API keys with one-time reveal, and monthly usage — across every location, in one console. Printing fails in physical ways; this is where your team sees it happen.

The console

Where your team looks when a printer misbehaves.

Live station and printer presence, job history with failure detail, API key management, and monthly usage.

rocketprint.io/app — printers
DashboardPrintersPrint jobsAPI keysUsage
PrinterStatusStationLast seen
Zebra ZD421 — Pack bench 1onlinebldr-wh-01
Zebra GK420d — Pack bench 2onlinebldr-wh-01
HP LaserJet M110 — Officeonlinebldr-wh-01
Epson TM-T20 — Front counterofflinestore-04

Boundaries

What RocketPrint does not do.

Every one of these is a real limit today. If one of them is a blocker for you, we would rather you find out on this page than three weeks into an integration.

We cannot confirm physical output

completed means the print command succeeded, not that a sensor saw paper. No print API can honestly claim otherwise.

No push notifications yet

Job status is polled. Webhooks are on the roadmap; until they ship, use GET /v1/print-jobs/:id or the Node SDK's poller.

Windows raw printing is unfinished

A Windows station registers printers and prints documents, but raw pass-through returns an explicit error instead of printing something wrong.

We do not design your labels

RocketPrint is transport and status. Generating ZPL or a PDF is your application's job — or your carrier's.

See the full compatibility matrix →

Five minutes, honestly

Send one request. Listen for the printer.

Install the agent, create a key, POST a label. The quickstart is two curl commands.