Print from your app to any printer.

Send a print job from your app to your customer's printers with a simple HTTP POST call. Read from their shipping scales over HTTP in real-time. Works with all thermal shipping label and receipt printers.

Start free Read the docs

Free plan, no card required. The virtual test printer is unlimited, forever.

The PrintSocket dashboard's job list: shipping labels, a receipt, and a packing slip across three printers, with one job printing, four succeeded, and one failed.

Thirty seconds to a printed label

curl https://api.printsocket.com/v1/jobs \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "printer_id": "prn_8f2k1",
    "title": "Order #12345 label",
    "content": { "format": "pdf", "base64": "JVBERi0xLjcKJcfsj6IKNSAwIG9iago8..." },
    "copies": 2,
    "options": { "paper": "A4", "color": false }
  }'

base64 is the file's bytes, standard encoding. If the file already lives somewhere we can reach, send url instead, or upload it once and reuse it by document_id.

You get back a job with an id and a status. Watch it move with GET /v1/jobs/{id}/events, or let a signed webhook tell you when it finishes.

A job's detail page in the dashboard: its id, printer, options and timestamps, and a timeline of events from created through queued, sent, and printing to succeeded.
The same job in the dashboard: every state transition, timestamped, from created to succeeded.

How it works

  1. Install the agent

    One installer for Windows, macOS, or Linux, on the machine that already talks to your printers. It enrolls with a single-use token and connects outbound over a WebSocket.

  2. Your printers appear

    The agent reports every queue it can see, with capabilities: paper sizes, duplex, color, DPI, trays. Attached scales report their readings too.

  3. Send jobs over the API

    POST /v1/jobs with a PDF or raw ZPL/ESC-POS payload. The agent prints it and reports every state transition back.

The dashboard's printer list: a Zebra label printer, an Epson receipt printer, and an HP laser on three devices, all online, each with a test print button.
Printers appear on their own: each row is a queue an agent reported, already online and ready for jobs.

Built the way you would build it

Test mode from day one

An sk_test_ key gets a virtual device and printer that simulates the whole job lifecycle. Build and run your integration tests without touching hardware, free and unlimited on every plan.

Webhooks, not polling

Signed, retried, and testable from the dashboard. Fire a test delivery at your endpoint before you write a line of handler code.

Idempotent by design

Send Idempotency-Key on any POST. A replay within 24 hours returns the stored original response instead of a conflict you have to write recovery code for.

One shape for everything

Flat resources, cursor pagination, prefixed opaque ids, one error object, RFC 3339 timestamps, and metadata on every mutable resource.

Honest failure modes

A job that cannot print says so, with a code you can branch on. Offline printers queue or reject: your choice, per job.

Upload once, print many

Store a document and reference it by id from as many jobs and printers as you like, instead of re-sending or re-hosting the same bytes.

The rest of the shipping station comes along

Shipping desks and checkout counters are more than document printers. The same agent and the same API handle the other hardware on the bench.

Shipping scales

Plug in a USB shipping scale and the agent finds it, no setup. It works with any scale that speaks the standard USB HID scale protocol, which covers DYMO M and S series, Stamps.com, and Fairbanks models. Read the weight at the moment you buy the label: GET /v1/scales/{id} returns the latest reading with a stable flag, so you know the scale had settled, and a timestamp, so you know how fresh it is.

POS receipt printers

Send a job with "format": "raw" and the bytes go to the queue untouched, so the ESC/POS commands your receipt template produces reach the printer exactly as written, with no driver reformatting them along the way. Label printers use the same path for ZPL.

The dashboard's scales page: two DYMO USB scales on different devices, both online, showing readings of 1.25 kg and 340 g captured seconds ago.
Scales share the printers' dashboard: the latest reading, whether the scale had settled, and how fresh it is.

Start printing today

Create an account, enroll a machine, and send your first job in a few minutes.

Start free See pricing

Common setups

Four things people arrive here trying to do, and what the API gives each of them.

Print from a web app

Why a browser cannot reach a printer, and what an outbound agent does instead.