Documentação da API
Um endpoint gera ZPL para PNG ou PDF. É compatível com a API v1 do Labelary: mesmos caminhos, cabeçalhos e erros.
Renderizar uma 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 | Densidade de impressão: 6dpmm, 8dpmm, 12dpmm, 24dpmm. |
width, height | Tamanho da etiqueta em polegadas, por exemplo 4x6 ou 2.25x1.25. Até 15 polegadas cada. |
index | Qual rótulo renderizar, começando em 0. Deixe de fora na saída PDF para obter todos os rótulos, um por página. |
zpl | Para GET, o ZPL codificado em URL. Codifique # como %23. Use POST para qualquer coisa longa. |
Com POST, envie o ZPL como o corpo da solicitação bruta, ou como um campo de formulário multipart nomeado file.
Chaves da API
Sem uma chave, você tem os limites gratuitos por endereço IP. Com uma chave do seu painel, envie-a no cabeçalho X-API-Key e os limites do plano do seu espaço de trabalho se aplicam.
curl https://api.openzpl.com/v1/printers/8dpmm/labels/4x6/0/ \ -H "X-API-Key: oz_live_…" --data-binary @label.zpl > label.png
Exemplos
# 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));Cabeçalhos da solicitação
| Cabeçalho | Valores | Padrão |
|---|---|---|
Accept | image/png, application/pdf | PNG |
X-Quality | Grayscale (8-bit, bordas suaves) ou Bitonal (1-bit, arquivos menores) | Grayscale |
X-Rotation | 0, 90, 180, 270, no sentido horário | 0 |
X-API-Key | Sua chave de espaço de trabalho, opcional | — |
Limites
- 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).
Respostas e erros
Respostas bem-sucedidas incluem X-Total-Count, o número de etiquetas que o ZPL produz, incluindo ^PQ cópias. Erros são texto simples que começa com ERROR:.
| Status | Significado |
|---|---|
| 400 | Um parâmetro é inválido, o rótulo é muito grande ou o índice está fora do intervalo. |
| 401 | A chave da API é desconhecida ou foi revogada. |
| 406 | O cabeçalho Accept solicita um formato de saída que ainda não está disponível. |
| 413 | O corpo está acima de 1 MB, ou o ZPL produz mais de 50 etiquetas. |
| 429 | Muitas solicitações ou etiquetas para seu plano. Aguarde o número de segundos em Retry-After. |
| 503 | A etiqueta levou mais de 10 segundos para renderizar, ou o serviço está em capacidade máxima. Tente novamente, ou reduza a densidade ou o tamanho. |
OpenAPI e Markdown
O mesmo contrato é publicado como OpenAPI 3.1 e como Markdown, para geradores de código e assistentes de codificação.
Guias passo a passo: Python, Node.js, PHP, C#. Mudando do Labelary: migration guide.