Labels and barcodes over REST
Labels in, barcodes out. No printer required.
Render Zebra ZPL to PNG or PDF, or generate any of 38 barcode symbologies from a single URL. Two endpoints, one engine, no SDK to install.
Free to try, no sign-up. Both tools run in the browser.
Capabilities at a glance
- Symbologies supported
- 38
- Print densities
- 6–24 dpmm
- One request, either format
- PNG · PDF
- Physical printers required
- 0
Symbologies supported
Print densities
One request, either format
Physical printers required
Two ways in
Whole labels or single symbols, drawn by the same engine — so a barcode looks identical whether it arrives inside a label or on its own.
Label rendering
Post a ZPL stream, get the label back as PNG or PDF. Multi-label formats page through by index, stored formats recall with ^XF, and an unsupported command is reported rather than failing the render.
Open the playground Send dataBarcode generation
One symbology and a payload, no ZPL required. The response is cropped to the symbol, so it drops straight into a document, a portal or a label you are laying out yourself.
Open the generator38 symbologies
29 linear and 9 two-dimensional, each with its own input rules and check digits. Plus 14 content types that format the payload — contacts, Wi-Fi, calendar events, payment requests.
- Code 128
- Code 39
- Codabar
- Interleaved 2 of 5
- ITF-14
- SSCC-18 / NVE-18
- PZN8
- EAN-13
- EAN-8
- UPC-A
- Code 39 Extended
- Code 11
- MSI
- Pharmacode
- Pharmacode Two-Track
- Industrial 2 of 5
- IATA 2 of 5
- Matrix 2 of 5
- Code 93
- UPC-E
- ISBN-13
- ISBN-10
- ISSN
- JAN
- PZN7
- USPS PostNet
- USPS PLANET
- Royal Mail 4-State
- KIX (Netherlands)
- Data Matrix
- Aztec Code
- Aztec Compact
- PDF417
- Compact PDF417
- Micro QR Code
- Swiss QR Code
- UPN QR
- QR Code
Drawn by the API, on this page load
- Code 128
- QR Code
- EAN-13
- Data Matrix
- PDF417
- Aztec
Built for label work
Debug templates without a printer
See what a label actually looks like before it reaches a print server, including barcode geometry and field wrapping.
Linter warnings, not failures
An unsupported command is reported and skipped rather than failing the render, so one odd field never costs you the whole label.
Options that apply, and only those
A bar width ratio means nothing to Code 128, and guard bars exist only on retail codes. Ask for one anyway and it is ignored and reported, never refused — so a shared link survives a change of symbology.
Check digits computed, not assumed
EAN, UPC, ITF-14, SSCC and PZN all calculate their own check digit, and the printed line shows it. Over-long input is refused rather than quietly truncated into a different product code.
Content types, not forty barcode types
A vCard QR is a QR code; so is a Wi-Fi credential or a payment request. Pick a content type and the payload is built and escaped for you.
Stored formats
Download a format once with ^DF and recall it per parcel with ^XF and ^FN field data, exactly as a printer would.
Two calls
A whole label, from ZPL
curl -X POST --data-binary @label.zpl \
-H "Accept: image/png" \
https://api.arkalabel.io/v1/printers/8dpmm/labels/4x6/0/ \
-o label.pngOne barcode, from a URL
curl "https://api.arkalabel.io/v1/barcodes\
?type=code128&data=ARKA-123456789" \
-o barcode.pngReady to see it render?
No account needed to try either tool. Paste ZPL, or pick a symbology and type.