zpl.tools
Compatibility LayersLabelary Compatibility

Labelary Compatibility API (Closed Beta)

HTTP API for rendering ZPL labels to PDF and PNG formats

This is a compatibility layer for the Labelary API, designed as a drop-in replacement for existing clients. To use this API instead of Labelary, simply change your base URL to our endpoint while keeping all other request parameters the same.

Already running on Labelary? The migration guide has the exact swap, side-by-side code samples, and a cutover checklist.

Notable Differences

AspectLabelaryZPL Tools
Base URLhttps://api.labelary.comhttps://api.zpl.tools/compatibility/labelary/
AuthenticationOptional via X-API-Key headerRequired via X-API-Key header
Header SettingsExtensive supportX-Rotation, X-Quality, X-Linter fully applied; PDF page-layout headers (X-Page-*, X-Label-Border) validated but not yet composed — see Behavioral notes
Format SupportPNG, PDF, IPL, EPL, DPL, SBPL, PCL 5, PCL 6, JSONPNG, PDF (other formats return 406, not a silent fallback)
Page Count Limit50Unlimited
Request Body Size1 MBUnlimited
Image File Size200 KBUnlimited

Behavioral notes

A few divergences are subtle enough to call out explicitly rather than leave to the API reference table:

  • X-Rotation is PNG-only today. The header is validated (0/90/180/270, else 400) and the rotation is applied to PNG output. PDF output does not yet rotate — tracked as a follow-up.
  • PDF page-layout headers are validated, not composed. X-Page-Size (Letter/Legal/A4/A5/A6), X-Page-Orientation, X-Page-Layout ({cols}x{rows}), X-Page-Align, X-Page-Vertical-Align, and X-Label-Border are checked for valid values and for whether the label physically fits the page (Labelary's "not enough room" behavior), and are silently ignored for PNG output (Labelary's PDF-only headers behave the same way there). What they don't yet do is actually arrange multiple labels in a grid, resize the PDF page, or draw alignment/border — the PDF is still sized to the label. If your integration depends on the rendered page layout (not just that the request succeeds), hold off until this lands.
  • Unsupported Accept values return 406, including formats Labelary itself supports but we don't (application/json label-data extraction, epl/ipl/dpl/sbpl/pcl5/pcl6). This is an honest rejection rather than a mismatched 200.
  • dpmm accepts both 8dpmm and bare 8. Any unrecognized value (with or without the suffix) gets a 400 Unknown print density, not a 404.
  • Label dimensions accept 0.00115 inches, with a distinct error message depending on which bound was hit.

Support

For issues, contact us at https://zpl.tools/contact