Integration recipe

Keep ShipStation. Drop the print dialog.

ShipStation returns the label when you create it. Send those bytes to the printer at the bench doing the packing, and nobody has to sit in front of a browser with the right printer selected.

The recipe

Create the label, forward the bytes.

Trigger it from your own workflow or from a ShipStation webhook. Either way, printing is one request.

01

Create the label

Ask ShipStation for the label, requesting ZPL when it is going to a thermal printer. It comes back base64-encoded.

createlabel → labelData
02

Pick the printer

Map the warehouse or bench on the order to a printer ID you store. This is your data, not a network address.

bench → printerId
03

Send it

Send the base64 label as raw content, with an idempotency key built from the shipment ID.

POST /v1/print-jobs
label-printer.ts
const RocketPrint = require("rocketprint");

const rocketprint = new RocketPrint(process.env.ROCKETPRINT_KEY);

export async function printShipStationLabel(shipmentId, bench) {
  // ShipStation returns label data already base64-encoded.
  const label = await shipstation.createLabel({ shipmentId, labelFormat: "zpl" });

  const job = await rocketprint.printJobs.create({
    printerId: bench.printerId,
    title: `Label ${shipmentId}`,
    contentType: "raw_base64",
    content: label.labelData,          // pass base64 straight through
    source: "shipstation",
  }, {
    idempotencyKey: `shipstation-${shipmentId}-${bench.id}`,
  });

  return job.id;
}

Practical notes

What changes on the floor.

Nothing else to install at the bench

RocketPrint Station is the only software on that computer, and it does one thing: print the jobs you send it. No browser has to be open and nobody has to stay logged in.

Ask for ZPL, not PDF

ZPL reaches the printer untouched. A PDF goes through that computer's driver, which decides scaling — the usual cause of a label that scans badly. Format details →

Multi-warehouse routing is a lookup

Keep a map from warehouse to printer ID. A new warehouse is one app install and a new row, not an integration change.

Every label gets a job record

Status, timestamps, and a failure reason when something goes wrong — so "did that print?" stops being a question anyone walks across the warehouse to answer.

Questions

ShipStation-specific questions.

Does this replace ShipStation?

No. ShipStation stays your shipping platform. We replace the part where someone has to sit at a browser with the right printer selected for a label to come out.

What format does the label data come back in?

Base64-encoded, in whichever format you asked for. Ask for ZPL for thermal printers so the printer draws the barcode itself. It arrives base64-encoded already, so you can pass it straight through.

Can we still print manually from ShipStation when we want to?

Yes. Nothing about this recipe removes the manual path; it just means the common case does not need one.

How do we handle a bench that is offline?

You do not have to. The job waits and prints when that computer reconnects, in order.

One bench, one label

Print the next label without touching the browser.

Install the Station app, create a key, and forward the label you already receive.