Passer au contenu

docs de l'API

Un point de terminaison rend ZPL en PNG ou PDF. Il est compatible avec l'API v1 de Labelary : mêmes chemins, en-têtes et erreurs.

Rendre une étiquette

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}/
dpmmDensité d'impression : 6dpmm, 8dpmm, 12dpmm, 24dpmm.
width, heightTaille de l'étiquette en pouces, par exemple 4x6 ou 2.25x1.25. Jusqu'à 15 pouces chacune.
indexQuelle étiquette rendre, en commençant à 0. Ne la laissez pas de côté avec la sortie PDF pour obtenir chaque étiquette, une par page.
zplFor GET, the URL-encoded ZPL. Encode # as %23. Use POST for anything long.

Avec POST, envoyez le ZPL comme corps de la requête brute, ou comme champ de formulaire multipart nommé file.

Clés API

Sans clé, vous obtenez les limites gratuites par adresse IP. Avec une clé de votre tableau de bord, envoyez-la dans l'en-tête X-API-Key et les limites du plan de votre espace de travail s'appliquent.

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

Exemples

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

En-têtes de demande

En-têteValeursPar défaut
Acceptimage/png, application/pdfPNG
X-QualityGrayscale (8 bits, bords lisses) ou Bitonal (1 bit, fichiers plus petits)Grayscale
X-Rotation0, 90, 180, 270, dans le sens des aiguilles d'une montre0
X-API-KeyClé de votre espace de travail, optionnelle—

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

Réponses et erreurs

Les réponses réussies portent X-Total-Count, le nombre d'étiquettes que le ZPL produit, ^PQ copies comprises. Les erreurs sont du texte brut commençant par ERROR:.

StatutSignification
400Un paramètre est invalide, l'étiquette est trop grande ou l'index est hors limite.
401La clé API est inconnue ou a été révoquée.
406L'en-tête Accept demande un format de sortie qui n'est pas encore disponible.
413Le corps fait plus de 1 Mo, ou le ZPL produit plus de 50 étiquettes.
429Trop de demandes ou d'étiquettes pour votre plan. Attendez le nombre de secondes dans Retry-After.
503L'étiquette a pris plus de 10 secondes à rendre, ou le service est à capacité. Réessayez, ou réduisez la densité ou la taille.

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.