SheetStamp

Send JSON, get print-ready barcode labels, thermal printer ZPL, invoices and packing slips. One API key, no rendering code to maintain.

Get a free API key

100 units a month free. No card needed. We email you a one-time link that shows your key.

Quick start

curl https://api.sheetstamp.com/v1/labels/render \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -o labels.pdf \
  -d '{
    "template": "avery-5160",
    "items": [
      { "barcode": "012345678905", "title": "Blue Mug 12oz", "price": "$14.00", "qty": 30 },
      { "barcode": "SKU-RED-01", "title": "Red Mug 12oz", "price": "$14.00", "qty": 30 }
    ]
  }'

Plans

PlanPriceUnits per monthLabels per request
Free$0100100
Starter$9 / month2,5001,000
Pro$29 / month25,0005,000
Scale$79 / month250,0005,000

One label is 1 unit. One barcode image is 1 unit. One invoice or packing slip is 5 units. Failed requests cost nothing.

Reference

Every request needs Authorization: Bearer YOUR_KEY and a JSON body. Errors come back as {"error":{"code","message","details"}}.

POST/v1/labels/render

FieldMeaning
templateA preset id from GET /v1/templates, or a custom object (below).
items[]Each has any of barcode, title, price, text, plus qty (default 1) and symbology (default auto).
formatpdf (default) or zpl for Zebra-compatible thermal printers.
options.start_positionFirst label slot to use on a part-used sheet, counted from 1.
options.show_textPrint the value under linear barcodes. Default true.
options.outlineDraw dashed label borders, for alignment tests.
options.dpiZPL only: 203 (default), 300 or 600.

Symbologies: auto, code128, ean13, ean8, upca, code39, itf14, qrcode, datamatrix. With auto, a value prints as UPC-A, EAN-13 or EAN-8 only when it is a valid GTIN with a correct check digit; everything else prints as Code 128.

Custom template:

"template": {
  "unit": "mm",
  "page":   { "width": 210, "height": 297 },
  "label":  { "width": 63.5, "height": 38.1 },
  "cols": 3, "rows": 7,
  "margin": { "left": 7.2, "top": 15.1 },
  "gap":    { "x": 2.5, "y": 0 }
}

Leave out page for a roll: each label becomes its own page. Units: mm, cm, in, pt.

Response headers: X-SheetStamp-Labels, X-SheetStamp-Pages, X-SheetStamp-Units-Used, X-SheetStamp-Units-Limit, and X-SheetStamp-Warnings (URL-encoded JSON) when a barcode is too dense for the label size.

Print PDFs at 100% scale ("Actual size"), not "Fit to page". Text uses DejaVu Sans, which covers Latin, Greek and Cyrillic; Chinese, Japanese and Korean text is not supported yet.

POST/v1/barcodes/render

{ "value": "SKU-123", "symbology": "auto", "format": "png", "scale": 3, "height_mm": 15, "show_text": true }

Returns a PNG or SVG image.

POST/v1/documents/render

{
  "type": "invoice",
  "page_size": "A4",
  "currency": "USD", "locale": "en-US",
  "seller":   { "name": "Acme Co", "address": ["1 Main St", "Raleigh, NC 27601"], "email": "hi@acme.test" },
  "customer": { "name": "Pat Lee", "billing_address": ["9 Elm Rd", "Austin, TX 78701"], "shipping_address": ["9 Elm Rd", "Austin, TX 78701"] },
  "order":    { "number": "1042", "date": "2026-11-11", "payment_method": "Card", "shipping_method": "Ground" },
  "lines":    [ { "name": "Blue Mug 12oz", "sku": "MUG-BLU", "qty": 2, "unit_price": 14 } ],
  "totals":   { "shipping": 5, "tax": 2.31 },
  "notes": "Thanks for your order.",
  "barcode": true
}

type is invoice or packing_slip. Missing subtotal and total are calculated. logo accepts a base64 PNG or JPEG under 400 KB. barcode: true prints the order number as Code 128.

GET/v1/account

Your plan and this month's usage.

GET/v1/templates GET/v1/plans

Public lists of label presets and plans. No key needed.

POST/v1/billing/checkout POST/v1/billing/portal

Send {"plan":"starter"} to checkout to get a payment link. The portal returns a link to change or cancel a plan.

Limits

120 requests a minute per key. 2 MB request body. Up to 5,000 distinct items per request.

Terms · Privacy