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}/
dpmm | Gęstość druku: 6dpmm, 8dpmm, 12dpmm, 24dpmm. |
width, height | Rozmiar etykiety w calach, na przykład 4x6 lub 2.25x1.25. Do 15 cali każda. |
index | Którą etykietę renderować, zaczynając od 0. Omiń to przy wyjściu PDF, aby uzyskać każdą etykietę, jedna na stronie. |
zpl | Dla 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łówek | Wartości | Domyślny |
|---|---|---|
Accept | image/png, application/pdf | PNG |
X-Quality | Grayscale (8-bitowe, gładkie krawędzie) lub Bitonal (1-bitowe, mniejsze pliki) | Grayscale |
X-Rotation | 0, 90, 180, 270, zgodnie z ruchem wskazówek zegara | 0 |
X-API-Key | Twó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,
^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).
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:.
| Status | Znaczenie |
|---|---|
| 400 | Parametr jest nieprawidłowy, etykieta jest za duża lub indeks jest poza zakresem. |
| 401 | Klucz API jest nieznany lub został unieważniony. |
| 406 | Nagłówek Accept żąda formatu wyjściowego, który jeszcze nie jest dostępny. |
| 413 | Rozmiar przekracza 1 MB lub ZPL produkuje więcej niż 50 etykiet. |
| 429 | Za dużo żądań lub etykiet dla Twojego planu. Poczekaj liczbę sekund w Retry-After. |
| 503 | Wydruk 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.