Create the label
Ask ShipStation for the label, requesting ZPL when the destination is a thermal printer. It comes back base64-encoded.
createlabel → labelDataIntegration recipe
ShipStation returns label data when a label is created. 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
Trigger from your own workflow or from a ShipStation webhook — either way the print step is one request.
Ask ShipStation for the label, requesting ZPL when the destination is a thermal printer. It comes back base64-encoded.
createlabel → labelDataMap the warehouse or bench on the order to a printer ID you store. This is your data, not a network route.
bench → printerIdPOST the base64 label data as raw content with an idempotency key derived from the shipment ID.
POST /v1/print-jobsimport RocketPrint from "@rocketprint/node";
const rocketprint = new RocketPrint({ apiKey: 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
The RocketPrint agent is the only local software, and it does one thing: print jobs your organization sends it. It does not need the browser open or a session logged in.
Raw ZPL reaches the printer untouched. A PDF goes through the station's driver, which decides scaling — the usual cause of a label that scans badly. Format details →
Keep a map from warehouse to printer ID. A new warehouse is an agent install and a new row, not an integration change.
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
No. ShipStation stays your shipping platform. RocketPrint replaces the part where a person has to be at a browser with the right printer selected for a label to come out.
Base64-encoded, in whichever format you requested — request ZPL for thermal printers so the barcode is generated at native resolution. If it arrives as base64 already, you can pass it straight through.
Yes. Nothing about this recipe removes the manual path; it just means the common case does not need one.
You do not have to. The job queues and prints when the station reconnects, in order.
One bench, one label
Install the agent, create a key, forward the label data you already receive.