Przejdź do treści

Dokumentacja API

Jeden punkt końcowy przetwarza ZPL na PNG lub PDF. Jest zgodny z API v1 Labelary: te same ścieżki, nagłówki i błędy.

Renderuj etykietę

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}/
dpmmGęstość druku: 6dpmm, 8dpmm, 12dpmm, 24dpmm.
width, heightRozmiar etykiety w calach, na przykład 4x6 lub 2.25x1.25. Do 15 cali każda.
indexKtórą etykietę renderować, zaczynając od 0. Omiń to przy wyjściu PDF, aby uzyskać każdą etykietę, jedna na stronie.
zplDla GET, URL-kodowany ZPL. Zakoduj # jako %23. Użyj POST dla dużych danych.

W przypadku POST, wyślij ZPL jako surowe ciało żądania lub jako pole formularza multipart nazwane file.

Klucze API

Bez klucza otrzymujesz darmowe limity na adres IP. Z kluczem z Twojego panelu, wyślij go w nagłówku X-API-Key i zastosują się limity planu Twojego workspace'a.

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

Przykłady

# 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));

Nagłówki żądania

NagłówekWartościDomyślny
Acceptimage/png, application/pdfPNG
X-QualityGrayscale (8-bitowe, gładkie krawędzie) lub Bitonal (1-bitowe, mniejsze pliki)Grayscale
X-Rotation0, 90, 180, 270, zgodnie z ruchem wskazówek zegara0
X-API-KeyTwój klucz obszaru roboczego, opcjonalny—

Limity

  • 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).

Odpowiedzi i błędy

Pomyślne odpowiedzi zawierają X-Total-Count, liczbę etykiet, które generuje ZPL, w tym ^PQ kopii. Błędy są w postaci zwykłego tekstu, zaczynającego się od ERROR:.

StatusZnaczenie
400Parametr jest nieprawidłowy, etykieta jest za duża lub indeks jest poza zakresem.
401Klucz API jest nieznany lub został unieważniony.
406Nagłówek Accept żąda formatu wyjściowego, który jeszcze nie jest dostępny.
413Rozmiar przekracza 1 MB lub ZPL produkuje więcej niż 50 etykiet.
429Za dużo żądań lub etykiet dla Twojego planu. Poczekaj liczbę sekund w Retry-After.
503Wydruk etykiety trwał dłużej niż 10 sekund, lub usługa jest przeciążona. Spróbuj ponownie lub zmniejsz gęstość lub rozmiar.

OpenAPI i Markdown

Ta sama umowa jest publikowana jako OpenAPI 3.1 i jako Markdown, dla generatorów kodu i asystentów kodowania.

Poradniki krok po kroku: Python, Node.js, PHP, C#. Migracja z Labelary: migration guide.