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}/
dpmm | Densidad de impresión: 6dpmm, 8dpmm, 12dpmm, 24dpmm. |
width, height | Tamaño de etiqueta en pulgadas, por ejemplo 4x6 o 2.25x1.25. Hasta 15 pulgadas cada una. |
index | Qué etiqueta renderizar, comenzando en 0. Déjelo fuera con salida PDF para obtener cada etiqueta, una por página. |
zpl | Para 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
| Encabezado | Valores | Predeterminado |
|---|---|---|
Accept | image/png, application/pdf | PNG |
X-Quality | Grayscale (8 bits, bordes suaves) o Bitonal (1 bit, archivos más pequeños) | Grayscale |
X-Rotation | 0, 90, 180, 270, en el sentido de las agujas del reloj | 0 |
X-API-Key | Su 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,
^PQcopies 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
429withRetry-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:.
| Estado | Significado |
|---|---|
| 400 | Un parámetro es inválido, la etiqueta es demasiado grande o el índice está fuera de rango. |
| 401 | La clave de la API es desconocida o ha sido revocada. |
| 406 | El encabezado Accept solicita un formato de salida que aún no está disponible. |
| 413 | El cuerpo supera 1 MB, o el ZPL produce más de 50 etiquetas. |
| 429 | Demasiadas solicitudes o etiquetas para su plan. Espere el número de segundos en Retry-After. |
| 503 | La 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.