Zum Inhalt springen

API-Dokumentation

Ein Endpunkt rendert ZPL zu PNG oder PDF. Er ist kompatibel mit Labelarys v1 API: gleiche Pfade, Header und Fehler.

Ein Etikett rendern

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}/
dpmmDruckdichte: 6dpmm, 8dpmm, 12dpmm, 24dpmm.
width, heightEtikettengröße in Zoll, zum Beispiel 4x6 oder 2.25x1.25. Bis zu 15 Zoll jeweils.
indexWelches Etikett gerendert werden soll, beginnend bei 0. Lassen Sie es bei der PDF-Ausgabe weg, um jedes Etikett einzeln pro Seite zu erhalten.
zplFor GET, the URL-encoded ZPL. Encode # as %23. Use POST for anything long.

Bei POST senden Sie das ZPL als Rohdaten im Anfragekörper oder als ein Multipart-Formularfeld mit dem Namen file.

API-Schlüssel

Ohne einen Schlüssel erhalten Sie die freien Limits pro IP-Adresse. Mit einem Schlüssel von Ihrem Dashboard senden Sie ihn im X-API-Key-Header und die Limits des Plans Ihres Arbeitsbereichs gelten.

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

Beispiele

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

Anfrage-Header

KopfzeileWerteStandard
Acceptimage/png, application/pdfPNG
X-QualityGrayscale (8-Bit, glatte Kanten) oder Bitonal (1-Bit, kleinere Dateien)Grayscale
X-Rotation0, 90, 180, 270, im Uhrzeigersinn0
X-API-KeyIhr Arbeitsbereichsschlüssel, optional—

Limits

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

Antworten und Fehler

Erfolgreiche Antworten enthalten X-Total-Count, die Anzahl der Etiketten, die das ZPL produziert, ^PQ Kopien inbegriffen. Fehler sind Klartext, der mit ERROR: beginnt.

StatusBedeutung
400Ein Parameter ist ungültig, das Etikett ist zu groß oder der Index liegt außerhalb des Bereichs.
401Der API-Schlüssel ist unbekannt oder wurde widerrufen.
406Der Accept Header fordert ein Ausgabeformat an, das noch nicht verfügbar ist.
413Der Body ist über 1 MB oder das ZPL erzeugt mehr als 50 Etiketten.
429Zu viele Anfragen oder Etiketten für Ihren Plan. Warten Sie die Anzahl der Sekunden in Retry-After.
503Das Etikett hat länger als 10 Sekunden zum Rendern benötigt, oder der Dienst ist überlastet. Versuchen Sie es erneut oder verringern Sie die Dichte oder die Größe.

OpenAPI and Markdown

The same contract is published as OpenAPI 3.1 and as Markdown, for code generators and coding assistants.

Step-by-step guides: Python, Node.js, PHP, C#. Moving from Labelary: migration guide.