Giriş
Ürünler
ZPL ÖnizlemeBarkod OluşturucuGörsel → ZPLZPL hile sayfasıEtiket TasarımcısıŞablon Galerisi
Geliştiriciler
API Hızlı BaşlangıçAPI ReferansıMCP SunucusuToplu ÜretimWebhook'larSDK'lar ve ÖrneklerLimitlerOn-Premise
Çözümler
Lojistik ve KargoE-TicaretERP & WMSÜretimPerakendeSağlık ve LaboratuvarTüm çözümler
Araçlar
ZPL Teşhis MerkeziZPL Hata AyıklayıcıBoyut ve DPI AnaliziDPI DönüştürücüBarkod sığdırma hesaplayıcısıSevkiyat Etiketi AnaliziFont DenetimiYön DenetimiKalibrasyon AsistanıYazıcı Uyumluluk KontrolüBarkod Okunabilirlik KontrolüYazıcı Dili TespitiTermal Yazıcı Test PaketiZPL AraçlarıEPL AraçlarıTSPL AraçlarıCPCL AraçlarıTüm AraçlarRehberFiyatlandırma
Dil
EnglishTürkçeDeutsch
Ana SayfaGeliştiricilerAPI Referansı

API Referansı

Labelixa REST API referansı: render ve barkod uç noktaları, istek/yanıt header'ları, hata kodları ve API anahtarı ile kimlik doğrulama.

Kimlik doğrulama

Ücretsiz katman anahtarsız çalışır (IP bazlı sınır); hiçbir planda çıktıya filigran eklenmez. Anahtarı X-API-Key header'ında gönderin; limitleri yükseltir. ?key= query parametresi hâlâ çalışıyor ama kullanımdan kaldırılıyor (kapanma 2027-01-31): query string tarayıcı geçmişine, Referer başlığına, vekil loglarına ve paylaşılan bağlantılara sızar. Bu yolu kullanan isteklere yanıtta Deprecation ve Sunset başlıkları eklenir.

API kararlılığı

/v1 içinde yalnız EKLEME yapılır: yeni yanıt alanı, yeni opsiyonel parametre ve yeni uç her an çıkabilir — tanımadığınız alanı yok sayın. Kırıcı bir değişiklik (alan kaldırma/yeniden adlandırma, tip ya da anlam değiştirme, hata kodu semantiğini değiştirme) bunun YANINDA yaşayan yeni bir ana sürüm olarak çıkar. Bir uç ya da kimlik doğrulama yolu kaldırılırken en az altı ay önceden bildirim, Deprecation ve Sunset başlıkları ve kaldırma sonrası 410 Gone + halefin adresi verilir — sessiz bir 404 asla. Bu bir alışkanlık değil sözleşme taahhüdüdür: Kullanım Şartları §24.4.1.

Uç noktalar

YöntemYolAçıklama
POST/v1/printers/{dpmm}dpmm/labels/{w}x{h}/{index}ZPL'i tek etikete render eder (PNG veya PDF).
POST/v1/printers/{dpmm}dpmm/labels/{w}x{h}/Tüm etiketleri tek PDF'te döndürür (index'siz).
GET/v1/barcodesTek barkod üretir (PNG/SVG/PDF).
GET/v1/barcodes/catalogBarkod tip kataloğunu (JSON) döndürür.
POST/v1/graphicsGörseli ZPL grafik komutuna (^GF) çevirir. FİZİKSEL ölçüyü söyleyin, nokta hesabını biz yapalım: X-Label-MM: 100x150 ve X-Dpmm: 8 (203 dpi) tam o boyutta bastırır. Ölçü verilmezse bir kaynak pikseli bir yazıcı noktası olur; baskı boyutu piksel sayısının tesadüfüne kalır. X-Wrap: label basılmaya hazır iş döndürür (^XA/^PW/^LL/^XZ). Her yanıtta X-Print-Size-MM bulunur. Ön işleme: X-Resize-Width/Height, X-Crop, X-Img-Rotate, X-Contrast, X-Dither, X-Invert, X-Threshold. X-GF-Bytes yanıtta tahmini boyutu verir. PDF de gönderebilirsiniz: sayfa yazıcı çözünürlüğünde (X-Dpmm) raster'a çevrilir, buradan sonrası görselle aynı yoldan gider. Çok sayfalı PDF'te HER SAYFA BİR ETİKET olur (yanıtta X-Label-Count) ve her etiket kendi ^XA/^XZ'siyle çıkar; tek sayfa için X-PDF-Page: 3. Sınırlar: 5 MB, 20 sayfa, sayfa başına 12 MP.
POST/v1/graphics/preview.png^GF komutunu geri PNG'e çevirir (yazıcıya ne gideceğinin önizlemesi).
POST/v1/fontsTrueType fontu ZPL font komutuna (~DU) çevirir; ?chars= ile alt kümeleme.
POST/v1/fonts/libraryFontu hesabın font belleğine yükler (sanal yazıcı belleği); ^A@ kullanan render'ların önüne kendiliğinden eklenir. GET listeler, DELETE .../{ad} siler. Hesap gerektirir.
POST/v1/diagnosticsZPL'i render etmeden çözümler; bulgu listesi (JSON) döndürür. ?dpmm=&w=&h= ile etiket bağlamı verilebilir. ?model=GK420d gibi bir yazıcı modeli verirseniz o modelin çözünürlük ve genişlik sınırlarına göre uyumluluk bulguları da eklenir (ZPL7xxx). Yanıttaki alanlar dizisi her ^FD/^FV alanının satır/sütununu verir — önizlemeden koda atlamak için kullanılır.
POST/v1/fields/mapZPL'deki düzenlenebilir alanları (^FD/^FV) kaynak metindeki bas/son ofsetleriyle döndürür; her alan metin ya da barkod diye işaretlenir. Form tabanlı düzenleyicilerin veri kaynağıdır: aralığa yerine koyarak ZPL'in geri kalanına dokunmadan tek alanı değiştirirsiniz.
POST/v1/variables/schemaŞablondaki {{değişkenleri}} çıkarır (tip/zorunlu/varsayılan).
POST/v1/variables/bindJSON veriyi şablona güvenle bağlar; eksik/geçersiz veride 422.
POST/v1/variables/csvCSV veya XLSX yükler; biçim dosyanın ADINDAN değil İÇERİĞİNDEN tanınır. Başlık/kodlama/ayraç tespiti + ilk satır önizlemesi. Eski .xls ve parola korumalı çalışma kitapları 400 ile reddedilir — önce .xlsx ya da CSV olarak kaydedin.
POST/v1/bulk/jobsToplu üretim işi başlatır (satır başına 1 işlem; Pro, Business ve Enterprise planları). GET /v1/bulk/jobs kendi işlerini listeler; GET .../{id} durum, .../{id}/download ZIP, .../{id}/download?bicim=pdf tek birlesik cok sayfali PDF, .../{id}/cancel iptal. Parametre verilmezse yanit DEGISMEZ (ZIP). Is tek PDF icin cok buyukse 413 doner ve yaklasik kac etiket sigdigini soyler.
POST/v1/designs/zplTasarım JSON'unu ZPL'e çevirir. Durumsuz ve KAYITSIZ: tasarım diske yazılmaz, loglanmaz ve kota harcamaz (her düzenlemede önizleme istenebilmeli). Doğrulama sunucuda tekrar koşar; geçersiz tasarımda hataların TAMAMI tek yanıtta döner (400).
POST/v1/webhooksGiden webhook ucu kaydeder (Pro, Business ve Enterprise planları). İmza sırrı YALNIZ bu yanıtta döner. GET listeler, DELETE .../{id} siler.
GET/v1/plansPlan katmanlarını ve limitlerini listeler.
POST/v1/accountsHesap açar ve API anahtarı üretir.
GET/v1/usageAPI anahtarının son 7 günlük kullanımı. Anahtar ZORUNLU: anahtarsız çağrı 401 döner. Gönderdiğiniz anahtar tanınmıyorsa istek yine de anonim olarak işlenir ve yanıt X-API-Key-Warning başlığı taşır.
GET/v1/keysHesabın ek API anahtarlarını listeler (Business: 3 anahtar; hepsi aynı kotadan düşer). POST yeni anahtar üretir — tam değer YALNIZ o yanıtta döner; DELETE .../{id} iptal eder. Yönetim yalnız birincil anahtarla yapılır.

İstek header'ları

HeaderAmaçDeğerler
X-API-KeyAPI anahtarı (query'de key= de olur — kullanımdan kaldırılıyor)lbx_...
Idempotency-KeyTekrar denemede ikinci iş yaratılmaz; saklanan yanıt aynen döner (yalnız /v1/bulk/jobs)istemcinin seçtiği tekil değer
AcceptÇıktı biçimiimage/png (varsayılan), application/pdf, application/json, application/zpl, application/epl
X-Target-DpmmZPL dönüşümünde hedef çözünürlük6, 8, 12, 24
X-FormatterZPL biçimlendirme (application/zpl)On, Off
X-Page-SizePDF sayfa boyutuA4, A5, A6, Letter, Legal
X-Page-LayoutSayfa başına ızgaraörn. 2x3
X-QualityPNG kalitesiGrayscale, Bitonal
X-RotationEtiketi döndürür0, 90, 180, 270

Yanıt header'ları

HeaderAnlamı
X-Total-CountÜretilen toplam etiket sayısı.
X-WarningsAtlanan/desteklenmeyen komutların listesi.
X-Planİsteğin tanındığı plan.
X-RateLimit-RemainingBugün kalan istek kotası.

Hata kodları

KodAnlamı
400Geçersiz parametre (dpmm, boyut vb.).
413İstek gövdesi 1 MB'ı, etiket sayısı plan limitini veya tek etiket 20.000 komutu aştı.
429Hız/kota sınırı aşıldı; Retry-After header'ı döner.

Barkod API'sinde geçersiz veri, HTTP 200 ile birlikte hatayı bir görsel olarak döndürür (no-code araç uyumu) ve ayrıntı X-Warnings header'ında verilir.

Veri çıkarımı (JSON)

Render uç noktasına Accept: application/json gönderirseniz, etiketteki görünür metin ve barkod alanları koordinatlarıyla birlikte JSON olarak döner (barkodlar tur: barkod ile ayrılır):

cURL — alan çıkarımı
curl -X POST "https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0" \
     --data "^XA^FO50,60^FDMerhaba^FS^XZ" -H "Accept: application/json"

ZPL dönüştürme (application/zpl)

Accept: application/zpl ile ZPL'iniz yeniden biçimlendirilir (her komut ayrı satır; X-Formatter: Off ile kapatılır) ve X-Target-Dpmm verilirse koordinat/boyut parametreleri kaynak çözünürlükten hedefe ölçeklenir. Veri alanları (^FD) değişmez.

cURL — 8→12 dpmm dönüşümü
curl -X POST "https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0" \
     --data-binary @etiket.zpl -H "Accept: application/zpl" \
     -H "X-Target-Dpmm: 12" > etiket-12dpmm.zpl

EPL2 çıktısı (application/epl)

Accept: application/epl ile etiketiniz EPL2'ye çevrilir — Zebra'nın eski nesil yazıcılarında kullanılan dil. Metin, barkod, kutu ve çizgi alanları EPL2 komutlarına dönüşür; ölçüler yazıcının nokta yoğunluğuna göre hesaplanır (8dpmm = 203 dpi, 12dpmm = 300 dpi — EPL2'nin font ölçüleri bu ikisinde FARKLIDIR ve doğru tablo otomatik seçilir).

EPL2'nin komut kümesi ZPL'den dardır, bu yüzden her etiket birebir çevrilemez. Çevrilemeyen alan sessizce düşmez: X-Warnings başlığında adıyla bildirilir. Bugün çevrilmeyenler: QR kodu (^BQ), DataMatrix (^BX), gömülü grafik (^GF) ve metin bloğu (^FB). Ayrıca EPL2'de metin ölçüsü süreklidir DEĞİL — sabit font × tam sayı çarpan — ve dar çubuk genişliği sembolojiye göre sınırlıdır (Code 128'de 1-10, EAN/UPC'de 2-4); istediğiniz değer aralık dışındaysa kırpılır ve bu da uyarıya yazılır.

Desteklenen barkodlar: ^BC Code 128, ^B3 Code 39, ^BE EAN-13, ^B8 EAN-8, ^BU UPC-A, ^B2 Interleaved 2/5, ^BK Codabar.

cURL — EPL2'ye çevir
curl -X POST "https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/" \
     --data-binary @etiket.zpl -H "Accept: application/epl" \
     -D basliklar.txt > etiket.epl

Giden webhook

Toplu iş bittiğinde durumu yoklamak yerine size haber verebiliriz. POST /v1/webhooks ile bir uç kaydedersiniz; olaylar toplu.tamamlandi ve toplu.basarisiz.

cURL — uç kaydı
curl -X POST "https://api.labelixa.com/v1/webhooks" \
     -H "X-API-Key: $LABELIXA_KEY" -H "Content-Type: application/json" \
     -d '{"url": "https://erp.sirketiniz.com/labelixa"}'

İmza sırrı yalnız bu yanıtta döner ve listelemede bir daha gösterilmez; kaybederseniz ucu silip yeniden oluşturursunuz. Sır hesap API anahtarınızdan ayrıdır: anahtarınızı döndürmek webhook doğrulamasını bozmaz.

Her istek Labelixa-Signature: t=<unix>,v1=<hmac> taşır. HMAC-SHA256, "<t>.<gövde>" üzerinden hesaplanır — zaman damgası imzanın içindedir, yani tazeliğine bakarak tekrar (replay) saldırısını eleyebilirsiniz. Biçim Stripe'ınkiyle aynıdır; Stripe webhook'u doğrulayan kodunuzu uyarlayabilirsiniz.

Python — doğrulama
import hmac, hashlib, time

def dogrula(sir, govde, baslik, tolerans=300):
    p = dict(x.split("=", 1) for x in baslik.split(","))
    t = int(p["t"])
    if abs(time.time() - t) > tolerans:
        return False
    beklenen = hmac.new(sir.encode(), f"{t}.".encode() + govde,
                        hashlib.sha256).hexdigest()
    return hmac.compare_digest(p["v1"], beklenen)

Her istek ayrıca Labelixa-Delivery-Id taşır ve bu kimlik yeniden denemelerde değişmez. Aynı kimliği ikinci kez görürseniz işlemi tekrarlamayın — teslimat en az bir kez (at-least-once) garantisiyle çalışır.

Sır rotasyonu

POST /v1/webhooks/{id}/rotate yeni bir sır üretir. Eski sır bir geçiş penceresi boyunca (varsayılan 24 saat) geçerli kalır ve o süre boyunca her istek iki imza taşır (v1=… ,v1=…). Doğrulamanız hangisini biliyorsa onunla eşleşir; yani sırrı kesintisiz döndürebilirsiniz. Kalan süreyi GET /v1/webhooks yanıtındaki rotasyon_bitis alanından görürsünüz.

Doğrulama kodunuz birden çok v1 değerini desteklemeli — başlığı sözlüğe çevirip tek değer okursanız yalnızca sonuncusunu görür ve rotasyonun ilk yarısında imzayı reddedersiniz.

2xx dışındaki her yanıt başarısızlıktır ve yeniden denenir; yönlendirme (3xx) takip edilmez. Üst üste başarısız olan uç kendiliğinden pasifleşir — listelemede aktif: false ve son durum kodu görünür. Gövdede satır içeriği yoktur: yalnız iş kimliği ve sayaçlar gönderilir, sonucu iş kimliğiyle çekersiniz.

Kaydedilmiş etiketler

Render uçları durumsuzdur ve hiçbir şey kaydetmez; kaydetme yalnız bu uçlarla, açık istekle olur. Ücretli plan gerektirir (Başlangıç 50, Profesyonel 500 kayıtlı etiket; Enterprise sınırsız — bu sınır aylık işlem kotasından bağımsızdır: biri kaç etiket bastığınız, öbürü kaç tasarım tuttuğunuz).

YöntemYolAçıklama
POST/v1/labelsEtiketi kaydeder (201; gövde: ad, zpl, isteğe bağlı canvas/degisken_sema/assetler/dpmm/ölçüler).
GET/v1/labelsEtiketlerinizi listeler (gövdesiz; arama, durum, klasor_id, kok, favori, sirala, limit, offset).
GET/v1/labels/{id}Tek etiketin tam içeriği + ETag.
PATCH/v1/labels/{id}Kısmi güncelleme; If-Match zorunlu.
DELETE/v1/labels/{id}Çöp kutusuna taşır; ?kalici=true kalıcı siler.
POST/v1/labels/{id}/restoreÇöpten geri getirir.
POST/v1/labels/{id}/duplicateKopyalar (kopya taslak doğar, tarihçesizdir).
PUT/DELETE/v1/labels/{id}/favoriteFavori işareti.
PUT/DELETE/v1/labels/{id}/archiveArşive alır/çıkarır.
POST/v1/labels/{id}/publishYayınlar; ZPL'de hata varsa 409 + bulgu listesi.
POST/v1/labels/{id}/unpublishTaslağa geri alır.
GET/v1/labels/{id}/versionsSürüm tarihçesi (gövdesiz).
GET/v1/labels/{id}/versions/{n}Tek sürümün tam içeriği.
POST/v1/labels/{id}/versions/{n}/restoreEski sürüme döner (ileri doğru: tarihçe silinmez).
GET/v1/labels/{id}/eventsDenetim kaydı (olay türü+zaman; içerik taşımaz).
POST/v1/foldersKlasör açar (tek seviye).
GET/v1/foldersKlasörler + etiket sayıları.
PATCH/DELETE/v1/folders/{id}Yeniden adlandırır / siler (içindekiler köke taşınır, silinmez).
PUT/v1/labels/{id}/folderEtiketi klasöre taşır (klasor_id: null → kök).

Eşzamanlılık (If-Match)

Her okuma yanıtı bir ETag taşır ve her yazma isteği If-Match başlığını zorunlu ister: başlıksız yazma 428, eski sürümle yazma 412 alır (gövdede güncel sürüm döner). Bu, iki sekmede açık bir etikette ikincinin birincinin yazdığını sessizce ezmesini önler. Bilerek üzerine yazmak için If-Match: * gönderin.

cURL — kaydet, güncelle
curl -X POST "https://api.labelixa.com/v1/labels" \
     -H "X-API-Key: $LABELIXA_KEY" -H "Content-Type: application/json" \
     -d '{"ad": "Kargo", "zpl": "^XA...^XZ"}'
# yanıt: 201 + ETag: "1"

curl -X PATCH "https://api.labelixa.com/v1/labels/ETIKET_ID" \
     -H "X-API-Key: $LABELIXA_KEY" -H 'If-Match: "1"' \
     -H "Content-Type: application/json" -d '{"ad": "Kargo v2"}'

Sürümler ve çöp kutusu

Her güncelleme eski hâli tarihçeye yazar (etiket başına son 50 sürüm saklanır). Eski sürüme dönmek yeni bir sürüm olarak yazılır — tarihçe silinmez, geri dönmek de geri alınabilir. Silinen etiket 30 gün çöp kutusunda bekler ve /restore ile geri gelir; aktif etiketleriniz süresiz saklanır.

Idempotency-Key başlığı POST /v1/labels için de geçerlidir: ağ zaman aşımından sonra aynı anahtarla tekrar denerseniz ikinci bir etiket oluşmaz, saklanan yanıt oynatılır.

AI asistanları için MCP sunucusu

Claude, ChatGPT ve MCP destekleyen diğer AI istemcileri Labelixa'yı doğrudan araç olarak kullanabilir: uzak MCP sunucusu https://api.labelixa.com/mcp adresindedir (streamable HTTP, JSON-RPC; kurulum gerekmez, istemcinize tek URL yapıştırırsınız). Anahtar zorunlu değildir — anonim kullanım ücretsiz katman limitlerine tabidir; Authorization: Bearer lbx_... başlığıyla bağlanırsanız kendi hesap kotanız kullanılır.

AraçNe yapar
zpl_previewZPL'i PNG'e render eder (dpmm/boyut/indeks seçilebilir).
zpl_validateZPL'i satır/kolon konumlu tanılamalarla denetler.
barcode_pngTek barkodu PNG olarak üretir.

MCP çağrıları REST ile aynı kota ve hız sınırlarından düşer — MCP ayrı bir katman değil, aynı API'nin araç yüzüdür. Yukarıdaki tablo öne çıkanlardır; tam ve güncel araç listesi canlı sunucudan (tools/list) ve /mcp sayfasından gelir.

Basılmış etiketi geri okuma

POST /v1/verify yüklediğiniz fotoğraf veya taramadaki barkodları okur — "bastım, ama el terminali okuyacak mı?" sorusunun cevabı. Gövde multipart/form-data olarak file alanında gönderilir; PNG, JPEG, BMP ve GIF kabul edilir, sınır 5 MB ve 6000×6000 pikseldir. Yanıtta olculdu (çözücü çalıştı mı), okunan listesi (her biri format + veri) ve bir not alanı bulunur.

Bunu POST /v1/barcode-check ile karıştırmayın: orada girdi ZPL'dir, etiketi biz çizip kendi çizdiğimizi okuruz. Burada girdi gerçek dünyadan gelen görseldir.

Sonucun sınırı yanıtta yazılıdır ve ciddiye alınmalıdır: "okundu" her el terminalinin okuyacağını GARANTİ ETMEZ, "okunamadı" da etiketin bozuk olduğunu KANITLAMAZ — fotoğrafın açısı, odağı veya aydınlatması yetersiz olabilir. Bu uç bir ISO/IEC 15416 barkod kalite derecelendirmesi (A–F) DEĞİLDİR; onun için doğrulayıcı bir cihaz gerekir.

cURL
curl -X POST "https://api.labelixa.com/v1/verify" \
     -F "file=@etiket-fotografi.jpg"

Aynı işi tarayıcıdan yapmak için: Barkod Doğrulayıcı.

Önizleyiciyi kendi sayfanıza gömme

/embed/viewer site iskeleti olmayan minimal bir önizleme bileşenidir; kendi uygulamanıza <iframe> ile gömersiniz. ZPL sorgu dizesinde değil URL parçasında (#) taşınır — parça sunucuya hiç gönderilmez, yani etiket içeriğiniz bizim ya da aradaki vekillerin loglarına düşmez. Biçim önizleyicinin "bağlantıyı kopyala" çıktısıyla AYNIDIR (base64 JSON), o bağlantıyı olduğu gibi yapıştırabilirsiniz.

HTML
<iframe src="https://labelixa.com/embed/viewer#eyJ6IjoiXlhBLi4uIiwiZCI6IjgiLCJ3IjoiNCIsImgiOiI2In0"
        width="420" height="620" style="border:0"></iframe>

Yükseklik sizin verdiğiniz ölçüdür; bileşen görseli çerçeveye sığdırır. Sayfa noindex'tir ve sitemap'te yoktur — bir içerik sayfası değil, bileşendir.

ZPL dışındaki yazıcı dilleri

Aşağıdaki uçlar ZPL karşılıklarını aynalar: render etiketin PNG'sini, diagnostics satır numaralı tanılamayı döndürür. Kapsam her dilde bilinçli olarak bir MVP alt kümesidir ve her yanıt kendi sınırını yazar — çizemediğimiz komut bildirilir, sessizce atlanmaz.

YöntemYolAçıklama
POST/v1/language-detectZPL / EPL / TSPL / CPCL tespiti
POST/v1/epl/renderEPL → PNG
POST/v1/epl/diagnosticsEPL tanılama (satır numaralı)
POST/v1/tspl/renderTSPL → PNG
POST/v1/tspl/diagnosticsTSPL tanılama (satır numaralı)
POST/v1/cpcl/renderCPCL → PNG
POST/v1/cpcl/diagnosticsCPCL tanılama (satır numaralı)
POST/v1/compatibilityZPL uyumluluk risk analizi

POST /v1/language-detect başka bir soruyu yanıtlar: sizin yazmadığınız bir kod hangi dilde? Cevap sezgisel ve deterministiktir (LLM yok); güven uydurma bir yüzde değil High/Medium/Low olarak bildirilir.

POST /v1/compatibility ZPL ve bir yazıcı modeli alır, uyumluluk risk analizi döndürür: dil postürü, boyut kuralı bulguları ve önizleme kapsamı. Emülatör DEĞİLDİR ve asla uyumluluk garantisi vermez — kırk modelin yalnız birini fiziksel olarak test ettik ve belgelenmiş bir emülasyon kipi yerli destek değildir.