Saltar al contenido

documentación de API

Un endpoint convierte ZPL a PNG o PDF. Es compatible con la API v1 de Labelary: mismos caminos, encabezados y errores.

Generar una etiqueta

GET  https://api.openzpl.com/v1/printers/{dpmm}/labels/{width}x{height}/{index}/{zpl}
POST https://api.openzpl.com/v1/printers/{dpmm}/labels/{width}x{height}/{index}
POST https://api.openzpl.com/v1/printers/{dpmm}/labels/{width}x{height}/
dpmmDensidad de impresión: 6dpmm, 8dpmm, 12dpmm, 24dpmm.
width, heightTamaño de etiqueta en pulgadas, por ejemplo 4x6 o 2.25x1.25. Hasta 15 pulgadas cada una.
indexQué etiqueta renderizar, comenzando en 0. Déjelo fuera con salida PDF para obtener cada etiqueta, una por página.
zplPara GET, el ZPL codificado en URL. Codifique # como %23. Use POST para cualquier cosa larga.

Con POST, envíe el ZPL como el cuerpo de la solicitud en crudo, o como un campo de formulario multipart llamado file.

Claves de API

Sin una clave obtiene los límites gratuitos por dirección IP. Con una clave de su tablero, envíela en el encabezado X-API-Key y se aplican los límites del plan de su espacio de trabajo.

curl https://api.openzpl.com/v1/printers/8dpmm/labels/4x6/0/ \
  -H "X-API-Key: oz_live_…" --data-binary @label.zpl > label.png

Ejemplos

# PNG from a short ZPL string
curl --get https://api.openzpl.com/v1/printers/8dpmm/labels/4x6/0/ \
  --data-urlencode "^xa^cfa,50^fo100,100^fdHello World^fs^xz" > label.png

# PDF with every label in a file
curl https://api.openzpl.com/v1/printers/8dpmm/labels/4x6/ \
  -H "Accept: application/pdf" --form file=@labels.zpl > labels.pdf
import requests

zpl = "^xa^cfa,50^fo100,100^fdHello World^fs^xz"
res = requests.post("https://api.openzpl.com/v1/printers/8dpmm/labels/4x6/0/", data=zpl)
res.raise_for_status()
open("label.png", "wb").write(res.content)
const zpl = "^xa^cfa,50^fo100,100^fdHello World^fs^xz";
const res = await fetch("https://api.openzpl.com/v1/printers/8dpmm/labels/4x6/0/", {
  method: "POST",
  headers: { Accept: "application/pdf" },
  body: zpl,
});
await require("fs/promises").writeFile("label.pdf", Buffer.from(await res.arrayBuffer()));
$zpl = "^xa^cfa,50^fo100,100^fdHello World^fs^xz";
$ch = curl_init("https://api.openzpl.com/v1/printers/8dpmm/labels/4x6/0/");
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => $zpl, CURLOPT_RETURNTRANSFER => true]);
file_put_contents("label.png", curl_exec($ch));

Encabezados de solicitud

EncabezadoValoresPredeterminado
Acceptimage/png, application/pdfPNG
X-QualityGrayscale (8 bits, bordes suaves) o Bitonal (1 bit, archivos más pequeños)Grayscale
X-Rotation0, 90, 180, 270, en el sentido de las agujas del reloj0
X-API-KeySu clave de espacio de trabajo, opcional—

Límites

  • Free, no sign-up and no key: 3 requests per second and 5,000 labels per UTC day, per IP address.
  • Labels, not requests, count against the daily allowance: every label rendered, ^PQ copies and PDF pages included. A 10-label PDF is 1 request and 10 labels.
  • Every request: up to 50 labels, a 1 MB body, 15 inches per side, and 10 seconds of render time.
  • Paid plans (Starter $9/month: 10 requests/s and 25,000 labels/day, Pro $29/month: 10 requests/s and 100,000 labels/day, Business $99/month: 20 requests/s and 500,000 labels/day) are announced but billing isn't live yet. API keys work today; a workspace stays on the Free plan until billing opens.
  • Over a limit the API answers 429 with Retry-After (seconds) and a body that names the limit, e.g. ERROR: Daily limit reached: 5000 labels per UTC day on this plan (^PQ copies and PDF pages count).

Respuestas y errores

Las respuestas exitosas incluyen X-Total-Count, el número de etiquetas que produce el ZPL, ^PQ copias incluidas. Los errores son texto sin formato que comienza con ERROR:.

EstadoSignificado
400Un parámetro es inválido, la etiqueta es demasiado grande o el índice está fuera de rango.
401La clave de la API es desconocida o ha sido revocada.
406El encabezado Accept solicita un formato de salida que aún no está disponible.
413El cuerpo supera 1 MB, o el ZPL produce más de 50 etiquetas.
429Demasiadas solicitudes o etiquetas para su plan. Espere el número de segundos en Retry-After.
503La etiqueta tardó más de 10 segundos en renderizarse, o el servicio está a máxima capacidad. Inténtelo de nuevo o reduzca la densidad o el tamaño.

What the engine draws, ignores or doesn't support yet is on the compatibility page; how fast it renders, measured on the production server, on the benchmarks page.

OpenAPI y Markdown

El mismo contrato se publica como OpenAPI 3.1 y como Markdown, para generadores de código y asistentes de codificación.

Guías paso a paso: Python, Node.js, PHP, C#. Mudanza desde Labelary: migration guide.