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}/
dpmm | Densité d'impression : 6dpmm, 8dpmm, 12dpmm, 24dpmm. |
width, height | Taille de l'étiquette en pouces, par exemple 4x6 ou 2.25x1.25. Jusqu'à 15 pouces chacune. |
index | Quelle étiquette rendre, en commençant à 0. Ne la laissez pas de côté avec la sortie PDF pour obtenir chaque étiquette, une par page. |
zpl | For 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ête | Valeurs | Par défaut |
|---|---|---|
Accept | image/png, application/pdf | PNG |
X-Quality | Grayscale (8 bits, bords lisses) ou Bitonal (1 bit, fichiers plus petits) | Grayscale |
X-Rotation | 0, 90, 180, 270, dans le sens des aiguilles d'une montre | 0 |
X-API-Key | Clé 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,
^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).
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:.
| Statut | Signification |
|---|---|
| 400 | Un paramètre est invalide, l'étiquette est trop grande ou l'index est hors limite. |
| 401 | La clé API est inconnue ou a été révoquée. |
| 406 | L'en-tête Accept demande un format de sortie qui n'est pas encore disponible. |
| 413 | Le corps fait plus de 1 Mo, ou le ZPL produit plus de 50 étiquettes. |
| 429 | Trop de demandes ou d'étiquettes pour votre plan. Attendez le nombre de secondes dans Retry-After. |
| 503 | L'é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.