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.
Anonim (anahtarsız) istekler IP adresi başına sayılır (IPv6: /64 öneki başına) — o adresin arkasındaki herkes tek kovayı paylaşır: takvim ayı (UTC) başına 5.000 etiket ve 10.000 istek, günlük 5.000 etiket tavanı, saniyede 3 istek, istek başına en çok 50 etiket. Ücretsiz hesap (labelixa.com/panel) IP'den bağımsız kendi aylık kotasıyla bir API anahtarı alır ve etiket kaydedebilir; ücretli planlar sınırları yükseltir.
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.
Taahhüt bu sayfada BELGELENEN uçları kapsar. /v1 altında belgelenmemiş yollar da yanıt verebilir; onlar iç akışlar için vardır, kararlılık sözü taşımaz ve habersiz değişebilir. Entegrasyonunuzu yalnız belgelenen uçlara kurun.
Hızlı başlangıç
- Bir ZPL etiketini anonim uca gönderin — anahtar gerekmez, ücretsiz kota yeter:bash
curl -X POST "https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/0" \ -H "Content-Type: text/plain" \ --data-binary '^XA^FO50,50^A0N,40,40^FDHello^FS^XZ' \ -o label.png - Gelen PNG etiketin kendisidir. Aynı gövdeyi
Accept: application/pdfile PDF olarak da alabilirsiniz. - Hesap açıp
X-API-Keybaşlığı ekleyince kota ve hız sınırı planınıza göre yükselir; ayrıntı aşağıdaki başlıklarda.
Uç noktalar
| Yöntem | Yol | Açı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/barcodes | Tek barkod üretir (PNG/SVG/PDF). |
| GET | /v1/barcodes/catalog | Barkod tip kataloğunu (JSON) döndürür. |
| POST | /v1/graphics | Gö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-Output: tspl, ZPL yerine TSC yazıcıya hazır İKİLİ TSPL işi döndürür (SIZE/CLS/BITMAP/PRINT; BITMAP'te 0 bit siyah). X-Output: cpcl, Zebra mobil yazıcıya CPCL oturumu döndürür (! başlığı, PAGE-WIDTH, EG hex grafik, PRINT; EG'de 1 bit siyah). X-Snap-Grid: 1 en yakın komşuyla ölçekler (gri kenar yok, dither kapanır). Yanıtta X-Scale ölçeği, X-Scale-Integer: false ise tamsayı olmayan oranı bildirir (barkod modülleri eşit basılmayabilir). 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. Etiket Letter/A4 kargo sayfasının bir köşesindeyse X-Label-Crop: 4x6 etiket bölgesini bulur, PDF'ten yeniden çizer, dikleştirir ve tam 4x6 verir; kırpılan bölge yanıtta X-Crop-Box (inç x,y,en,boy). |
| POST | /v1/graphics/preview.png | ^GF komutunu geri PNG'e çevirir (yazıcıya ne gideceğinin önizlemesi). |
| POST | /v1/fonts | TrueType fontu ZPL font komutuna (~DU) çevirir; ?chars= ile alt kümeleme. |
| POST | /v1/fonts/library | Fontu 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/text/measure | Metnin nokta genişliğini ölçer (ortalama ve ^FB için): JSON {text, font (0-9/A-Z), height, width, dpmm, block_width, label_width}. Yanıt width_dots, height_dots, block_width verildiyse lines, label_width verildiyse ortalamak için center_x (^FO x). Ölçüm önizleme motorunun kendisinden gelir; yazıcının ROM fontu birkaç nokta farklı olabilir. Yalnız hız sınırı. |
| POST | /v1/diagnostics | ZPL'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. Her bulgu kural sayfasının adresini (url, /zpl/rules/ZPL####) taşır. |
| POST | /v1/fields/map | ZPL'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/bind | JSON veriyi şablona güvenle bağlar; eksik/geçersiz veride 422. |
| POST | /v1/variables/bind-rows | En fazla 20 satırı ({"zpl", "satirlar": [...]}) tek istekte bağlar ve tek ZPL akışı döndürür — hesap ve saklama yok, yalnız hız sınırı. Bağlanamayan satırda 422 + satır sırası; 20'nin üstü 422 satir_tavani. PDF için çıktıyı index'siz render ucuna verin (kotadan düşer). |
| POST | /v1/variables/csv | CSV 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; 20 satıra kadarki dosyada tüm satırlar da döner (satirlar). Toplu iş yetkisi varsa daha büyük dosyada da, planın iş başına satır tavanına kadar (satir_tavani) tüm satırlar döner. Eski .xls ve parola korumalı çalışma kitapları 400 ile reddedilir — önce .xlsx ya da CSV olarak kaydedin. |
| POST | /v1/bulk/jobs | Toplu ü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/zpl | Tasarı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/webhooks | Giden webhook ucu kaydeder (Pro, Business ve Enterprise planları). İmza sırrı YALNIZ bu yanıtta döner. GET listeler, DELETE .../{id} siler. |
| GET | /v1/plans | Plan katmanlarını ve limitlerini listeler. |
| POST | /v1/accounts | Hesap açar ve API anahtarı üretir. E-posta adresi burada doğrulanmaz: adresin sahibi panele ilk kez giriş yaptığında (sihirli bağlantı ya da Google) bu girişten önce üretilen anahtarlar iptal edilir; aynı anda o dönemde kurulan webhook uçları ve konnektörler devre dışı kalır, agent eşleşmeleri kaldırılır ve alana eklenen diğer üyeler çıkarılır (kapatılanlar gözden geçirme için saklanır; panel onları bir kez listeler). Yeni anahtar panelden alınır. |
| GET | /v1/usage | API anahtarının son 7 günlük kullanımı. Anahtar ZORUNLU: anahtarsız çağrı 401 döner. Tanınmayan bir anahtar HER uçta 401 ile reddedilir (gövde {"hata": ..., "kod": "gecersiz_anahtar"}); anahtarsız istek anonim çalışır. |
| GET | /v1/keys | Hesabı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. Birincil anahtar panelde yenilendiğinde tüm ek anahtarlar da iptal edilir. |
İstek header'ları
| Header | Amaç | Değerler |
|---|---|---|
X-API-Key | API anahtarı (query'de key= de olur — kullanımdan kaldırılıyor) | lbx_... |
Idempotency-Key | Tekrar 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çimi | image/png (varsayılan), application/pdf, application/json, application/zpl, application/epl |
X-Target-Dpmm | ZPL dönüşümünde hedef çözünürlük | 6, 8, 12, 24 |
X-Formatter | ZPL biçimlendirme (application/zpl) | On, Off |
X-Page-Size | PDF sayfa boyutu | A4, A5, A6, Letter, Legal |
X-Page-Layout | Sayfa başına ızgara | örn. 2x3 |
X-Quality | PNG kalitesi | Grayscale, Bitonal |
X-Rotation | Etiketi döndürür | 0, 90, 180, 270 |
Yanıt header'ları
| Header | Anlamı |
|---|---|
X-Total-Count | Üretilen toplam etiket sayısı. |
X-Warnings | Atlanan/desteklenmeyen komutların listesi. |
X-Plan | İsteğin tanındığı plan. |
X-RateLimit-Remaining | Bugünkü günlük etiket tavanından kalan etiket sayısı — istek değil, aylık kotanız da değil. Tavan etiket sayar (bir üretilen etiket = bir birim); 50 etiket üreten tek bir çağrı bu değeri 50 düşürür; 00:00 UTC'de sıfırlanır. Aylık etiket ve istek sayaçları 200 yanıtında bildirilmez: biri dolduğunda 429 X-Quota-Reason ve X-Quota-Reset taşır; anahtarlı hesap /v1/usage'dan okur. Saniyelik istek hız sınırı ayrı bir mekanizmadır ve burada bildirilmez. |
X-Quota-Hint | Yalnız anonim (anahtarsız) 200 yanıtlarında, bugünkü anonim günlük tavandan 150 etiket kullanılınca (5.000'de 150, X-RateLimit-Remaining ile bildirilen). Anonim kullanım IP başına sayılır ve bu günlük tavanın içinde takvim ayı (UTC) başına 5.000 etiket ve 10.000 istekle sınırlıdır; başlık ücretsiz API anahtarının verildiği adresi taşır (kendi aylık kotanız, kayıtlı etiketler). Anahtarlı istekte yoktur; yanıtın kendisi değişmez. |
Hata kodları
| Kod | Anlamı |
|---|---|
| 400 | Geçersiz parametre (dpmm, boyut vb.). |
| 413 | İstek gövdesi ucun sınırını (ZPL render 1 MB; EPL/TSPL/CPCL, DPI ve uyumluluk uçları 512 KB), etiket sayısı plan limitini veya tek etiket 20.000 komutu aştı. |
| 429 | Hız/kota sınırı aşıldı; Retry-After header'ı döner. |
Hata gövdesinin biçimi uca göre değişir; ayrıştırmadan önce Content-Type kontrol edin.
| Uç | Hata gövdesi |
|---|---|
| ZPL render, EPL/TSPL/CPCL render ve diagnostics, DPI, uyumluluk | düz metin — tek satır açıklama |
| Diğer JSON uçları (etiket, şablon, toplu, anahtar, hesap…) | JSON — {"hata": "…"} |
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.
Hatalar ve çözümleri
Her hata bir HTTP durum kodu ve bir gövdedir. Önce durumu, sonra gövdeyi okuyun: render uçları TEK SATIR DÜZ METİN, diğer uçlar mesajı hata alanında (İngilizce) taşıyan JSON döndürür. Bazı JSON gövdeler ayrıca kararlı bir makine-okur ad taşır — kod (snake_case) ya da hata_tipi (PascalCase) — ve bu adlar kablo değeridir: dallanmayı onlara göre yapın, cümleye göre değil. Anahtar adlarının neden Türkçe olduğunu Yanıt alan adları bölümü anlatır. Aşağıdaki tablo entegratörlerin gerçekten karşılaştığı hataları, ne zaman olduklarını ve nasıl çözüldüklerini listeler.
401 / 403 — anahtar, köken, plan, kapsam, Business Central
| HTTP | kod / hata_tipi | Ne zaman olur | Nasıl çözülür | Örnek |
|---|---|---|---|---|
| 401 | gecersiz_anahtar | Bir X-API-Key (ya da ?key=) gönderildi ve o anahtar hiçbir hesaba ait değil — yazım hatası, panelde iptal edilmiş anahtar ya da başka bir kurulumun (kendi sunucunuz / bulut) anahtarı. | Anahtarı panelden yeniden kopyalayın; iptal edildiyse yeniden üretin. Anahtarsız istek anonim çalışır; boş bir değişken bu hatayı hiç üretmez — yanlış olanı üretir. | başlıklar: WWW-Authenticate: ApiKey realm="labelixa" |
| 401 | — | Yalnız hesapla çalışan bir uç (GET /v1/usage, GET /v1/keys, POST /v1/webhooks) anahtarsız çağrıldı. | X-API-Key başlığını ekleyin. Ücretsiz hesap yeter. | |
| 403 | origin_kapisi | İstek uygulamaya herkese açık ön kapıdan geçmeden ulaştı — örneğin barındırma sağlayıcısının iç adını doğrudan çağırarak. | Temel adres olarak https://api.labelixa.com kullanın. Bunu düzelten bir başlık bilerek yoktur. | |
| 403 | — | Mesajda adı geçen özellik (webhook, toplu iş, baskı, ücretsiz tavanın üstünde kayıtlı etiket) anahtarın planında yok. X-Quota-Action da gönderilir. | X-Quota-Upgrade-Url adresinden yükseltin ya da hangi planın özelliği içerdiğine GET /v1/plans ile bakın. Yeniden denemeyin: cevap zamanla değişmez. | başlıklar: X-Quota-Action: upgrade |
| 403 | kapsam_yok | Anahtar kapsamlı (sınırlı kapsam kümesiyle üretilmiş) ve bu uç onda olmayan bir kapsam istiyor; gereken_kapsam eksik olanı söyler. | Panelde o kapsamla yeni anahtar üretin ya da birincil anahtarı kullanın. Kapsam adı sözleşmedir, sır değil. | |
| 403 | birincil_gerekli | Faturalama ya da anahtar yönetimi ek (ikincil) anahtarla çağrıldı. | Bunlar için hesabın birincil anahtarını ya da paneli kullanın; ek anahtarlar üretim trafiği içindir. | |
| 403 | rol_yetkisiz | Anahtar, rolü bu eylemi yapamayan bir çalışma alanı üyesine ait (gereken_kapsam eylemi söyler): izleyici etiket yazmaya çalıştı. | Çalışma alanı sahibinden daha yüksek rol isteyin ya da o role sahip üyenin anahtarını kullanın. | |
| 403 | hesap_gerekli | Kayıtlı etiket uçları anonim çağrıldı. Render uçları anahtarsız çalışır; kaydetme çalışmaz. X-Quota-Action: signup da gönderilir. | POST /v1/accounts ile ücretsiz hesap açın (kart yok) ve anahtarını gönderin. | başlıklar: X-Quota-Action: signup |
| 401 | EntraJetonuGecersiz | Business Central uzantısı doğrulaması geçmeyen (imza, hedef kitle, süre) bir Microsoft Entra jetonuyla kimlik sundu. | Business Central'a yeniden giriş yapın ki uzantı taze jeton alsın; uygulama kaydının Labelixa API hedef kitlesine işaret ettiğini kontrol edin. | |
| 404 | EntraEslemesiYok | Entra kiracısı geçerli ama ona bağlı Labelixa hesabı henüz yok. | Uzantıda bir kez API anahtarıyla Connect Account çalıştırın; sonrasında Entra girişi yeter. | |
| 409 | EntraBelirsiz | Aynı Entra kiracısını birden çok Labelixa hesabı sahipleniyor; sunucu seçemez. | Kiracının ait olması gereken hesabın API anahtarıyla bağlanın; diğer hesaptaki bayat eşlemeyi kaldırın. | |
| 409 | KiraciBaskasinin | Kiracı / ortam / şirket üçlüsü zaten başka bir Labelixa hesabına eşlenmiş. | Sahip hesapta eşlemeyi silin (DELETE /v1/bc/tenants/{id}) ya da başka bir ortamı eşleyin. Aynı hesabın aynı üçlüyü yeniden eşlemesi hata değil 200'dür. | |
400 / 404 / 413 / 422 — parametre, boyut, doğrulama
| HTTP | kod / hata_tipi | Ne zaman olur | Nasıl çözülür | Örnek |
|---|---|---|---|---|
| 400 | — | Yol ya da sorgu parametresi kabul edilen kümenin dışında: dpmm 6 | 8 | 12 | 24 olmalı, barkod türü bilinmiyor, sayfa boyutu listede yok. | 6 dpmm (152 dpi), 8 (203 dpi), 12 (300 dpi) ya da 24 (600 dpi) kullanın. Mesaj kabul edilen değerleri her zaman söyler. | |
| 400 | — | Yoldaki etiket eni ya da boyu sıfır, sayı değil ya da 15 inçten büyük. Yol İNÇTİR: /labels/4x6/0 4 x 6 inçtir; 100 x 150 mm etiket /labels/3.94x5.91/0 olur. | Yolu kurmadan önce milimetreyi inçe çevirin (25,4'e bölün); ondalık kabul edilir. | |
| 404 | — | Bilinmeyen yol, başka hesaba ait kaynak kimliği ya da bu kurulumda kapalı bir özellik (kapalı özellik 403 değil 404 döner). | Yolu yukarıdaki uç tablosuyla karşılaştırın; eksik kimlik yeniden denenmez. Belgelenmemiş yollar kararlılık sözü taşımaz. | |
| 413 | — | Gövde ucun sınırının üstünde: ZPL render ve tanılama 1 MB, EPL/TSPL/CPCL, DPI ve uyumluluk 512 KB, görsel ve PDF 5 MB. | Akışı birkaç etikete bölün, gömülü grafikleri (^GF) çıkarıp yazı tipi ya da grafik olarak yükleyin ya da görselleri dönüştürmeden önce sıkıştırın. | |
| 413 | — | Tek etikette 20.000'den fazla komut var — genellikle bir grafiği binlerce ^GB kutusu olarak yazan bir üretici. | Grafiği POST /v1/graphics ile tek ^GF komutuna çevirin ya da akışı birkaç etikete bölün. | |
| 413 | — | Akış, planın tek istekte izin verdiğinden fazla etiket içeriyor (Free ve Starter 50, Pro 100, Business 250). | Etiketleri birkaç istekte gönderin ya da Pro ve üstünde toplu iş kullanın; kota maliyeti aynıdır. | |
| 422 | — | JSON gövde ayrıştırılamadı ya da şemaya uymadı (yanlış tip, eksik zorunlu alan). Gövde çerçeveden gelir ve FARKLI biçimdedir: sorun başına loc ve msg taşıyan bir detail listesi. | loc içinde adı geçen alanı düzeltin. detail tek anahtar sayılır; hata yalnız bu durumda yoktur. | |
| 422 | satir_tavani | POST /v1/variables/bind-rows 20'den fazla satır aldı; gövde tavan ve satir_sayisi taşır. | İstek başına en çok 20 satır gönderin ya da Pro ve üstünde toplu iş (POST /v1/bulk/jobs) başlatın. | |
| 409 | eposta_kullanimda | POST /v1/accounts zaten hesabı olan bir e-postayla çağrıldı. | O adresle panele girip mevcut anahtarı okuyun; ikinci hesap açılmaz. | |
402 / 429 — hız sınırı ile günlük/aylık kota
| HTTP | kod / hata_tipi | Ne zaman olur | Nasıl çözülür | Örnek |
|---|---|---|---|---|
| 429 | — | Planın izin verdiğinden fazla saniyelik istek (Free 3/s, Starter 5/s, Pro 10/s, Business 20/s). Yalnız Retry-After: 1 gönderilir — X-Quota-Reason başlığı yok. | Saniyeyi bekleyip yeniden deneyin; istekleri aralayan bir istemci kuyruğu bunu tamamen önler. Free yanıtları sonraki planı X-Quota-Next-Plan içinde söyler. | başlıklar: Retry-After: 1X-Quota-Next-Plan: starterX-Quota-Upgrade-Url: https://labelixa.com/pricing?amac=kota |
| 429 | — | Bugünkü etiket kotası bu isteği karşılamıyor (X-Quota-Reason gunluk). Kota ETİKET sayar; 50 etiket üreten tek çağrı 50 düşürür. X-RateLimit-Remaining kalan etiketi taşır. | Yükseltin (X-Quota-Action yukselt; plan ve adres X-Quota-Next-Plan ile X-Quota-Upgrade-Url içinde) ya da X-Quota-Reset anını (00:00 UTC) bekleyin. Daha erken deneme aynı 429'u döndürür. | başlıklar: Retry-After: 3600X-Quota-Action: yukseltX-Quota-Reason: gunlukX-Quota-Reset: 2026-10-28T00:00:00ZX-RateLimit-Remaining: 3X-Quota-Next-Plan: starterX-Quota-Upgrade-Url: https://labelixa.com/pricing?amac=kota |
| 429 | — | Aylık etiket ya da istek penceresi doldu (X-Quota-Reason aylik_etiket ya da aylik_istek). Günlük pencereyle BİRLİKTE uygulanır, abonelik gününe çıpalıdır. | Yükseltin ya da X-Quota-Reset içindeki yenilenme anını bekleyin. X-RateLimit-Remaining burada GÖNDERİLMEZ çünkü o noktada günlük kalan bilinmez. | başlıklar: Retry-After: 3600X-Quota-Action: yukseltX-Quota-Reason: aylik_etiketX-Quota-Reset: 2026-11-17T00:00:00Z |
| 429 | hiz_siniri | Bir adresten pencere içinde çok sayıda POST /v1/accounts çağrısı. | Hesabı bir kez açıp anahtarını saklayın; yeniden denemeden önce Retry-After bekleyin. | başlıklar: Retry-After: 3600 |
| 403 | — | Hesap planın izin verdiği kadar kayıtlı etiket tutuyor (Free 5, Starter 50, Pro 500, Business 2.500). Günlük render kotasından bağımsızdır. | Gerekmeyen etiketleri silin ya da arşivleyin ya da yükseltin (X-Quota-Action upgrade). | başlıklar: X-Quota-Action: upgrade |
| 402 | DenemeDoldu | Ücretsiz DirectPrint denemesi (25 etiket) bitti ve plan baskı içermiyor. | Starter ya da üstüne yükseltin; iş kuyruğa alınmadı, sonrasında yeniden gönderilmeli. | başlıklar: X-Quota-Action: upgrade |
| 402 | TavanDoldu | Business Central kiracısı aylık baskı tavanına ulaştı. | Planı yükseltin ya da sonraki ayı bekleyin; sayaç yalnız 202'de büyür, reddedilen iş hiçbir şeye mal olmaz. | başlıklar: X-Quota-Action: upgrade |
İki farklı sınır aynı 429 durumunu paylaşır; onları başlıklar ayırır. Saniyelik hız sınırı Retry-After: 1 ile ve X-Quota-Reason başlığı OLMADAN döner: bir saniye bekleyip isteği yeniden gönderin. Günlük ya da aylık kota Retry-After: 3600, X-Quota-Action ve X-Quota-Reason (gunluk, aylik_etiket ya da aylik_istek) ile döner; X-Quota-Reset yenilenmenin tam UTC anını verir ve ondan önce denemek boşunadır — planı yükseltin (sonraki plan ve adresi X-Quota-Next-Plan ile X-Quota-Upgrade-Url başlıklarında makine-okur) ya da sıfırlanmayı bekleyin. Anonim 200 yanıtları, 5.000 ücretsiz etiketten 150 tanesi kullanılınca X-Quota-Hint ekler: ücretsiz anahtar size kendi kotanızı verir.
409 / 412 / 428 — eşzamanlılık ve yeniden deneme
| HTTP | kod / hata_tipi | Ne zaman olur | Nasıl çözülür | Örnek |
|---|---|---|---|---|
| 428 | — | Kayıtlı etiket If-Match başlığı olmadan yazıldı (PATCH /v1/labels/{id}). Gövde güncel sürümü ve ETag'i taşır. | Önce etiketi okuyup ETag değerini If-Match olarak gönderin; bilerek üzerine yazmak için If-Match: * gönderin. | |
| 412 | — | If-Match değeri saklanan sürümden eski: bu arada başkası kaydetti. | Etiketi yeniden okuyun, birleştirin ve yeni ETag ile tekrar yazın. Otomasyondan asla körlemesine If-Match: * ile yeniden denemeyin. | |
| 422 | — | Aynı Idempotency-Key FARKLI bir gövdeyle yeniden kullanıldı. | İdempotency anahtarı tek bir isteği tanımlar: yeni gövde için yeni anahtar üretin. | |
| 409 | — | Aynı Idempotency-Key ile ilk istek hâlâ sürerken yeniden deneme geldi. | Retry-After bekleyip aynı isteği yeniden gönderin; saklanan yanıt aynen oynatılır. | başlıklar: Retry-After: 2 |
5xx — render bütçesi ve servis
| HTTP | kod / hata_tipi | Ne zaman olur | Nasıl çözülür | Örnek |
|---|---|---|---|---|
| 503 | — | Etiket geçerli ama render bütçesi içinde çizilemeyecek kadar pahalı (dev bitmap'ler, binlerce alan). Üretilmeyen etiketin kotası geri verilir. | Etiketi sadeleştirin (daha küçük ^GF, daha az alan), dpmm düşürün ya da akışı bölün. Retry-After 1 sn'dir ama aynı girdi bütçeye yine çarpar. | başlıklar: Retry-After: 1 |
| 503 | — | Bir bağımlılık kullanılamıyor (veritabanı, anahtar özeti, e-posta). Render uçlarında düz metin, diğerlerinde hata JSON. | Üstel geri çekilmeyle yeniden deneyin (birkaç saniyeden başlayın). Dakikalarca sürüyorsa /status sayfasına bakın. | |
| 500 | — | Yakalanmamış istisna. Gövde asla ayrıntı taşımaz; X-Request-ID başlığı isteği loglarımızda tanımlar. | Bir kez yeniden deneyin; tekrarlarsa X-Request-ID değerini desteğe gönderin — nedene en hızlı yol budur. | başlıklar: X-Request-ID: 1da4dafa121247ab8dd6e413d2aeef33 |
Baskı işi hata tipleri
Düşen bir baskı işi HTTP isteğini düşürmez — POST /v1/print 202 döndü, sonuç iş durumundadır. Başarısız işin hata_tipi alanı şu sınıflardan biridir; asama işin düşmeden önce nereye kadar geldiğini söyler.
| kod / hata_tipi | Anlamı |
|---|---|
AdaptorYok | Bağlantı türü desteklenmiyor (hiçbir şey gönderilmedi) |
AgentHatasi | Ajan hatası |
CihazEslenmemis | Yazıcı ajanda eşlenmemiş (hiçbir şey gönderilmedi) |
GonderilmedenBirakildi | Agent göndermeden durdu (hiçbir şey gönderilmedi) |
KimlikAlinamadi | Yazıcı kimliği okunamadı (hiçbir şey gönderilmedi) |
KimlikUyusmazligi | Yazıcı kimliği uyuşmadı (hiçbir şey gönderilmedi) |
TeslimBelirsiz | Teslim belirsiz — yeniden basmadan önce yazıcıyı kontrol edin |
YaziciHatasi | Yazıcı hatası (kısmen basılmış olabilir) |
ZplBulunamadi | Etiket içeriği artık mevcut değildi (hiçbir şey gönderilmedi) |
Yanıt alan adları
JSON yanıtlarındaki anahtarlar sabit kablo adlarıdır. Çoğu Türkçe kelimedir (ör. ozet, mesaj, durum) ve olduğu gibi kalır: bir anahtarı yeniden adlandırmak geriye uyumsuz bir değişikliktir ve yukarıdaki API kararlılık taahhüdü bunu /v1 içinde dışarıda bırakır. Resmî entegrasyonlar — MCP sunucusu ve n8n düğümü — anahtarları çevirip İngilizce adlarıyla gösterir. Aşağıdaki tablo onların kullandığı eşlemeden üretilir; ham yanıtla entegrasyon çıktısını yan yana okuyabilirsiniz. Listede olmayan anahtar entegrasyonlarda da JSON adıyla görünür. Hata gövdeleri insan-okur mesajı İngilizce olarak hata alanında taşır. Her hatanın ne zaman olduğu ve nasıl çözüldüğü: Hatalar ve çözümleri.
| JSON anahtarı | İngilizce adı |
|---|---|
mesaj | message |
ozet | summary |
toplam | total |
alanlar | fields |
onizleme | preview |
baslik | title |
baslik_key | title_key |
yeni | replacement |
islem | operation |
bicim | format |
banka | bank |
veri | data |
komut | command |
oneri | suggestion |
parametre | parameter |
deger | value |
hane | digits |
verilen | given |
dogru | correct |
beklenen | expected |
gelen | actual |
uzunluk | length |
yol | path |
genislik | label_width |
yukseklik | label_height |
bitis | end |
gen | print_width |
azami | maximum |
desteklenen | supported_dpi |
tip | type |
dil | language |
guven | confidence |
karma | mixed |
puanlar | scores |
kanitlar | evidence |
kod | code |
satir | line |
uretici | manufacturer |
kategori | category |
dil_postur | language_support |
tur | type |
kaynak_url | source_url |
dogrulama | verification |
cihaz_seri | device_serial |
not | note |
seviye | level |
gerekceler | reasons |
boyut_kurali_var | has_size_rule |
boyut_bulgulari | size_findings |
onizleme_kapsami | preview_coverage |
destekli | supported |
kismi | partial |
desteksiz | unsupported |
yok_sayilan | ignored |
bilinmiyor | unknown |
sinir | limitation |
puan | score |
puan_formulu | score_formula |
degerlendirilen | assessed |
degerlendirilmeyen | not_assessed |
bolumler | sections |
notlar | notes |
durum | status |
bulgular | findings |
uyarilar | warnings |
sebep | reason |
sozdizimi | syntax |
boyut_dpi | size_dpi |
yon | orientation |
barkod | barcode |
gorsel_bellek | graphics_memory |
is_davranisi | job_behaviour |
model_uyum | model_compatibility |
komut_adedi | command_count |
etiket_adedi | label_count |
dondurulmus_alan | rotated_fields |
adet | count |
komutlar | commands |
indirilen_font_adedi | downloaded_font_count |
indirilen_font_bayt | downloaded_font_bytes |
ozel_font_cagrisi | custom_font_calls |
grafik_bayt | graphic_bytes |
grafik_adet | graphic_count |
font_bayt | font_bytes |
font_adet | font_count |
toplam_bayt | total_bytes |
tavan_bayt | limit_bytes |
en_dots | width_dots |
boy_dots | height_dots |
boyut_kaynagi | size_source |
adaylar | candidates |
en_inch | width_in |
boy_inch | height_in |
en_mm | width_mm |
boy_mm | height_mm |
standart | standard |
tahmini_dpi | estimated_dpi |
tahmin_sebebi | estimate_reason |
kopya | copies |
format_adedi | format_count |
sablon_adedi | template_count |
toplam_baski | total_prints |
tasma_olculen_format | overflow_measured_formats |
render_siniri | render_limit |
etiketler | labels |
sira | index |
alan_adedi | field_count |
barkod_adedi | barcode_count |
sablon | template |
tasan_alan | overflowing_fields |
modeller | models |
is_id | job_id |
satir_sayisi | row_count |
sonuc | result |
deneme | attempts |
uretilen | produced |
hatali_sayisi | failed_count |
hatali | failed |
sorunlar | problems |
ad | name |
cikti | output |
olcu | size |
genislik_in | width_in |
yukseklik_in | height_in |
kota_iade | quota_refunded |
islenen | processed |
isler | jobs |
hata_tipi | error_type |
baski | print |
gonderildi | sent |
ucretlendi | charged |
basim_onaylandi | print_confirmed |
etiket | label_count |
olculdu | measured |
okunan | decoded |
neden | reason |
Sabit değerler
Bazı alanlar sabit bir kümeden tek kelime taşır. JSON değeri değişmez; entegrasyonlar İngilizce kelimeyi gösterir. Yollar yukarıdaki tablodaki İngilizce alan adlarıyla yazılır; [] dizi öğesini, * herhangi bir anahtarı gösterir.
| Alan (İngilizce yol) | JSON değeri | İngilizce değeri |
|---|---|---|
risk.level | dusuk | low |
orta | medium | |
yuksek | high | |
risk.reasons[] | native | native |
emulasyon | emulation | |
dil_yok | no_zpl_support | |
boyut_bulgusu | size_finding | |
model.category | masaustu | desktop |
endustriyel | industrial | |
mobil | mobile | |
language_support.type | native | native |
emulasyon | emulation | |
limitation | risk_analizi | risk_analysis |
evidence[].code | zpl_xa | zpl_xa |
zpl_xz | zpl_xz | |
zpl_komut_yogunlugu | zpl_command_density | |
zpl_tilde | zpl_tilde | |
epl_metin_satiri | epl_text_line | |
epl_barkod_satiri | epl_barcode_line | |
epl_kontrol_satiri | epl_control_line | |
tspl_mm_boyut | tspl_mm_size | |
tspl_kelime | tspl_keyword | |
cpcl_baslik | cpcl_header | |
cpcl_kelime | cpcl_keyword | |
sections.*.status | temiz | clean |
bulgulu | findings | |
degerlendirilmedi | not_evaluated | |
assessed[] | sozdizimi | syntax |
boyut_dpi | size_dpi | |
yon | orientation | |
barkod | barcode | |
font | font | |
gorsel_bellek | graphics_memory | |
is_davranisi | job_behaviour | |
model_uyum | model_compatibility | |
not_assessed[] | sozdizimi | syntax |
boyut_dpi | size_dpi | |
yon | orientation | |
barkod | barcode | |
font | font | |
gorsel_bellek | graphics_memory | |
is_davranisi | job_behaviour | |
model_uyum | model_compatibility | |
sections.size_dpi.summary.size_source | komut | command |
alanlardan | from_fields | |
karma | mixed | |
onceki | previous | |
sections.job_behaviour.summary.labels[].size_source | komut | command |
alanlardan | from_fields | |
karma | mixed | |
onceki | previous | |
status | bekliyor | queued |
calisiyor | running | |
bitti | done | |
hata | failed | |
iptal | cancelled | |
jobs[].status | bekliyor | queued |
calisiyor | running | |
bitti | done | |
hata | failed | |
iptal | cancelled | |
jobs[].type | toplu_uretim | bulk_production |
result.failed[].problems[].code | eksik | missing |
sayi_degil | not_a_number | |
sozdizimi | syntax | |
temizlendi | sanitized | |
render | render |
Toplu iş durumları
Toplu işin durum alanı şunlardan biridir:
| JSON değeri | Anlamı |
|---|---|
bekliyor | Kuyrukta: bir işçiyi bekliyor. Yeniden denenecek başarısız bir deneme de buraya döner. |
calisiyor | Çalışıyor. |
bitti | Bitti: çıktı indirilebilir. Üretilemeyen satırlar sonuç nesnesinde bildirilir. |
hata | Başarısız: izin verilen son deneme düştü ya da hata yeniden denenemez. Başka deneme yapılmaz. |
iptal | İptal edildi. Yalnız henüz başlamamış iş iptal edilebilir. |
Uyumluluk kademeleri
Uyumluluk denetimi risk.seviye alanında bir risk kademesi döndürür, asla garanti vermez:
| JSON değeri | Anlamı |
|---|---|
dusuk | Düşük: model ZPL'i yerli (native) çalıştırır. |
orta | Orta: model ZPL'i üreticinin belgelediği bir emülasyon kipiyle çalıştırır. |
yuksek | Yüksek: model için kayıtlı ZPL desteği yok. |
onizleme_kapsami etiketteki komutları BİZİM önizlememizin onlarla ne yaptığına göre gruplar. Önizlemeyi anlatır, yazıcıyı değil:
| JSON anahtarı | Anlamı |
|---|---|
destekli | Destekli: çizilir, bilinen parametre kısıtı yok. |
kismi | Kısmi: çizilir, belgelenmiş bir kısıtla. |
yok_sayilan | Yok sayılan: tanınır ve bildirilir ama çizilmez (ör. RFID — onu yalnız yazıcı yazar). |
desteksiz | Desteksiz: bilinen komut, işlenmez; tanılama uyarır. |
bilinmiyor | Bilinmiyor: komut kataloğunda yok. |
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 -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 -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.zplEPL2 çı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 -X POST "https://api.labelixa.com/v1/printers/8dpmm/labels/4x6/" \
--data-binary @etiket.zpl -H "Accept: application/epl" \
-D basliklar.txt > etiket.eplGiden 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 -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.
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öntem | Yol | Açıklama |
|---|---|---|
| POST | /v1/labels | Etiketi kaydeder (201; gövde: ad, zpl, isteğe bağlı canvas/degisken_sema/assetler/dpmm/ölçüler). |
| GET | /v1/labels | Etiketlerinizi 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}/duplicate | Kopyalar (kopya taslak doğar, tarihçesizdir). |
| PUT/DELETE | /v1/labels/{id}/favorite | Favori işareti. |
| PUT/DELETE | /v1/labels/{id}/archive | Arşive alır/çıkarır. |
| POST | /v1/labels/{id}/publish | Yayınlar; ZPL'de hata varsa 409 + bulgu listesi. |
| POST | /v1/labels/{id}/unpublish | Taslağa geri alır. |
| GET | /v1/labels/{id}/versions | Sü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}/restore | Eski sürüme döner (ileri doğru: tarihçe silinmez). |
| GET | /v1/labels/{id}/events | Denetim kaydı (olay türü+zaman; içerik taşımaz). |
| POST | /v1/folders | Klasör açar (tek seviye). |
| GET | /v1/folders | Klasö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}/folder | Etiketi 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 -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.
Baskı
Render uçları size bir görüntü döndürür; bu uçlar işi kayıtlı bir yazıcıya gönderir. Ücretli plan gerektirir (Başlangıç ve üzeri). Ücretlendirme çift saymaz: daha önce render edilmiş bir işin kimliğini kaynak_is_id ile verirseniz baskı bedava; ham ZPL doğrudan gelirse etiket burada üretilmiş sayılır ve burada ücretlenir.
| Yöntem | Yol | Açıklama |
|---|---|---|
| POST | /v1/devices | Yazıcı profili kaydeder (201). Gövde: takma_ad, grup, dpmm, genislik_dots, varsayilan_mi, dil, adaptor. dil cihazın konuştuğu dildir (zpl, epl, tspl, cpcl ya da raw; öntanımlı zpl) ve test baskısının hangi dilde üretileceğini belirler. adaptor çıkış yoludur; bugün kullanılabilenler: raw_tcp, os_driver. Seri numarası ve ağ adresi alınmaz — cihazı ağda bulmak agent'ın işidir. |
| GET | /v1/devices | Kayıtlı yazıcılarınızı listeler. |
| DELETE | /v1/devices/{id} | Yazıcı profilini siler. |
| POST | /v1/devices/{id}/test-print | Test baskısı: cihaz profiline göre boyutlanan standart test etiketini kuyruğa alır — ZPL yazmadan kurulum doğrulaması. 202 basım onayı değildir. |
| GET | /v1/devices/{id}/status | Cihazın bulut tarafından görülen durumu: kuyruktaki iş sayıları, en eski bekleyenin yaşı, son iş ve agent canlılığı. Yazıcının fiziksel hâli (kâğıt, kafa, sıkışma) buradan okunamaz — ham 9100 soketi bildirmez; yanıt bunu yazici_durumu: "BILINMIYOR" diyerek açıkça söyler. kimlik, agent'ın sabitlenmiş cihaz için her işten önce yaptığı kimlik doğrulamasını bildirir: sabitlendi, son_dogrulama (en son doğrulama, epoch saniye), son_sonuc (verified, mismatch, unavailable ya da not_pinned) ve son_sonuc_zamani. verified, iş anında cevap veren cihazın sabitlenen cihaz olduğunu kanıtlar; etiketin çıktığını değil. Doğrulamayı bildiren bir agent cihaz için iş işleyene dek alanlar null'dur. |
| POST | /v1/print | Baskı işini kuyruğa alır (202). Gövde: device_id (ya da printer_group), yuk (yazıcıya giden baytlar; eski adı zpl), dil, kopya, etiket_sayisi, kaynak_is_id. |
| POST | /v1/bulk/jobs | Toplu üretim isteğine device_id eklenirse üretilen ZPL akışı tek bir baskı işi olarak kuyruğa girer — zincir artık ZIP'te bitmek zorunda değil. Yalnız cikti="zpl" ile geçerlidir. Etiket ikinci kez ücretlenmez (toplu işte zaten satır başına ücretlendi). Sonuç özeti baski alanını taşır; baskı kuyruklanamazsa toplu iş düşmez, sebep o alanda yazar. |
| GET | /v1/print/jobs/{id} | İşin durumu. Başkasının işi 404 döner. |
| POST | /v1/print/jobs/{id}/cancel | Hâlâ kuyrukta bekleyen işi iptal eder (200, durum cancelled; yükü silinir, agent onu hiç almaz). İptal edilmiş iş için tekrar çağrı aynı 200 gövdesini döner. dispatching, uncertain, dispatched ya da failed durumundaki iş güncel durumuyla 409 döner: agent'a ya da yazıcıya verilmiş iş geri çağrılamaz — yeniden basmadan önce yazıcıyı kontrol edin. Başkasının işi 404 döner. İptal webhook olayı üretmez. |
| POST | /v1/agents/pairing-codes | Yerel agent için tek kullanımlık eşleştirme kodu üretir (201). Kod yalnız bu yanıtta görünür ve kısa ömürlüdür. |
| POST | /v1/agents/pair | Agent kodu kimliğe çevirir. API anahtarı istemez — kodun kendisi kimliktir; agent makinesine elle sır taşınmaz. Jeton yalnız bu yanıtta döner. |
| GET | /v1/agents | Agent'lar + canlı durum. bagli diye bir alan yoktur; dönen şey son_gorulme zaman damgasıdır. |
| DELETE | /v1/agents/{id} | Agent kaydını siler. |
| POST | /v1/agents/heartbeat | Agent'ın “ayaktayım” bildirimi; kimlik imzalı istekle (HMAC + zaman damgası + tek kullanımlık değer — jeton ağa çıkmaz). |
İş durumları — ve printed neden yok
Sözlükte bilerek bir “basıldı” durumu yoktur. Ham 9100 üzerinden bir etiketin gerçekten basıldığı kanıtlanamaz: soketin baytları kabul etmesi yalnız yazıcının tamponuna girdiklerini gösterir; kâğıdın bitmesi, kafanın açık kalması veya sıkışma baytlar kabul edildikten sonra olur ve soket bunu size söylemez. En ileri durum dispatched = “teslim ettik”. Yanıt ayrıca her zaman basim_onaylandi: false taşır — alanı yok saymak “demek ki basıldı” anlamına gelmesin diye.
| Durum | Anlamı |
|---|---|
queued | İş kabul edildi, sırada. |
dispatching | Yazıcıya iletiliyor. |
dispatched | Baytlar yazıcıya teslim edildi. Bu, etiketin basıldığı anlamına gelmez. |
failed | İletim başarısız. |
cancelled | İş iptal edildi. |
uncertain | İş agent'a ulaştı ama sonucu gelmedi (örneğin agent gönderimin ortasında durdu); baytların yazıcıya gidip gitmediği bilinmiyor. Otomatik olarak asla yeniden denenmez: yazıcıyı kontrol edin, etiket eksikse yeni bir iş olarak yeniden basın. Durum yanıtı bu durumda uyari_kodu: delivery_uncertain ve bir uyari cümlesi taşır. Agent'tan geç gelen kesin bir sonuç işi yine dispatched ya da failed yapabilir; hiçbir şey onu queued'a geri almaz. Panelde (Kayıtlı İşler) etiket içeriği hâlâ saklanıyorsa (iş kuyruğa alındıktan en çok 24 saat sonrasına kadar) iş “Yeni iş olarak yeniden bas” eylemini sunar; yeni iş asıl işi kaynak_is_id alanında gösterir. |
Yani: baskıyı tetikleyen bir iş akışı kurabilirsiniz, ama basım onayı üzerine iş kuralı kurmayın. Onayı gerçekten gerektiren senaryolarda (ilaç, İTS) doğrulama etiketin kendisinden okunarak yapılmalıdır.
failed “hiçbir şey basılmadı” demek değildir
Bir iş beş ayrı noktada başarısız olabilir ve bunların dördünde yazıcıya tek bayt gitmez (cihaz eşlenmemiş, adaptör yok, kimlik doğrulanamadı). Beşincisinde — yazıcıyla bağlantı koptuğunda — baytlar gitmiş, hatta çok kopyalı bir işin bir kısmı basılmış olabilir. Durum yanıtı bu farkı ayrı alanlarda taşır:
| Alan | Anlamı |
|---|---|
asama | İşin ulaştığı en ileri nokta: queued → delivered_to_agent → submitted_to_printer. |
gonderilen_kopya | Yazıcıya gerçekten yazılan kopya sayısı. -1 “bilinmiyor” demektir ve sıfırdan farklıdır. |
yaziciya_giden_var_mi | true/false/null. null = eski bir agent sürümü bildirmedi; “gitmedi” demek değil. |
Yazıcıya bayt gitmiş bir iş otomatik olarak yeniden denenmez — denenseydi çıkmış etiket ikinci kez basılırdı. Böyle bir iş beklemeye alınır ve devam kararını siz verirsiniz. Yazıcıya hiç ulaşmamış hatalar eskisi gibi kendiliğinden yeniden denenir.
Bu işleri alıp yazıcıya ileten DirectPrint agent'ı buradan indirilir: /tr/download
Agent'ı kurmak (kurulum sihirbazı)
Yazıcıların bağlı olduğu bilgisayarda labelixa-agent setup çalıştırın (indirme sayfasındaki tek satırlık kurulum agent'ı kurar ve sizin için başlatır). Agent tarayıcıda Labelixa sayfasını açar; sayfada agent penceresindekiyle aynı kısa kodun yazdığını kontrol edip Bağla'ya basın. Tarayıcı yoksa panelin Yazıcılar sayfasında bir eşleştirme kodu oluşturup labelixa-agent setup KOD çalıştırın. Ücretsiz planda 1 bilgisayar, 1 yazıcı ve toplam 25 etiketlik bir deneme vardır (test etiketi sayılmaz); devamı ücretli plan ister. Agent'ı indirmek ücretsizdir.
Sihirbaz bilgisayarın yazdırma kuyruklarına bakar: tek bir etiket yazıcısı sorusuz seçilir, birden çoğu liste olarak sunulur, ofis yazıcısı ancak siz onaylarsanız kullanılır. Seçilen her yazıcı hesabınıza eklenir ve bu bilgisayarda eşlenir; sonunda bir test etiketi basılabilir. Kurulum sırasında yazıcıya hiçbir şey gönderilmez ve ağ taranmaz.
labelixa-agent discover -mdnskendini ağda duyuran yazıcıları (Bonjour/mDNS) onlara bir şey göndermeden listeler.labelixa-agent import DOSYAçok sayıda ağ yazıcısını bir CSV dosyasından tek seferde ekler; her yazıcı için birad,adres[,grup]satırı (-dry-runönce dosyayı denetler). Her satır raporlanır; hatalı bir satır dosyayı durdurmaz.- Bağlı bir bilgisayarda
setup'ı yeniden çalıştırmak bağlantıyı ve kurulu yazıcıları korur.
Agent buluta iş sorar ve bulut iş gelene kadar isteği açık tutar (uzun yoklama); etiket gönderildiği anda teslim edilir. Agent hiçbir port açmaz: her bağlantı bilgisayardan Labelixa'ya doğrudur.
Windows: BT ekipleri için sessiz kurulum
Intune, Grup İlkesi ya da SCCM ile dağıtım için Windows agent'ı MSI paketi olarak da yayımlanır. Tek satır agent'ı LabelixaAgent Windows hizmeti olarak kurar, panelin Yazıcılar sayfasından alınan tek kullanımlık kodla eşleştirir ve yazıcı listesini içe aktarır: msiexec /i labelixa-agent_0.6.1_windows_amd64.msi /qn PAIRCODE=KOD PRINTERSFILE=C:\yol\yazicilar.csv. PRINTERSFILE isteğe bağlıdır (her yazıcı için bir ad,adres[,grup] satırı); eşleştirme ya da içe aktarma başarısızsa kurulum geri alınır, kod kurulum günlüğüne yazılmaz. Paket ve sağlama toplamı yayın sayfasındadır.
Tekrarı önlemek: Idempotency-Key
Ağ zaman aşımı yaşadığınızda isteği yeniden göndermek doğru bir reflekstir — ama etiket çoktan çıkmış olabilir. Idempotency-Key başlığı gönderirseniz aynı anahtarla gelen ikinci istek yeni bir iş yaratmaz, ilk yanıtı aynen geri verir (Idempotency-Replayed: true). Aynı anahtarla FARKLI bir gövde göndermek 422 alır: anahtarı geri dönüştürmek sessizce yanlış etiketi bastırırdı.
Kuyruk dolduğunda dönen 429 anahtarı tüketmez — aynı anahtarla yeniden denemeniz beklenir.
Hazır şablondan baskı
yuk yerine sablon_id ve degiskenler gönderebilirsiniz; yük şablondan üretilir. İkisini birlikte göndermek reddedilir. Eksik ya da geçersiz bir değişken 400 döner — eksik değişkenli bir etiket basılsaydı kâğıt boşa giderdi ve bunu ancak yazıcının başındaki kişi fark ederdi.
Kayıtlı etiketten baskı: etiket_id
yuk yerine hesabınızda kayıtlı bir etiketin (/v1/labels) etiket_id'sini, değişkenleri için degiskenler ile birlikte gönderebilirsiniz; yük etiketten üretilir. Birden çok etiketi TEK iş olarak basmak için satirlar gönderin: etiket başına bir nesne, 1-1000 satır; satırın değerleri degiskenler'i ezer ve etiket_sayisi satır sayısı olur. Boş satirlar listesi reddedilir; tek etiket için alanı hiç göndermeyin. etiket_id; yuk, zpl ya da sablon_id ile birlikte gönderilemez (422). Eksik ya da geçersiz bir değişken 422 döner ve satırı söyler — iş kuyruğa alınmaz, hiçbir satır atlanmaz. Başka bir hesabın etiketi, olmayan etiketle aynı 404'ü alır; arşivlenmiş etiket basılmaz. Idempotency-Key, kopya, device_id / printer_group ve ücretlendirme ham yükle tamamen aynı çalışır; yanıt etiket_id taşır. Onay akışı açıkken yalnız yayınlanmış etiketler basılır (aksi hâlde 422); etiketi panelde Kayıtlı işler altında onaya gönderin ve onaylayın ya da POST /v1/labels/{id}/publish ve /approve uçlarını kullanın.
Yazıcı grupları: printer_group
Bir cihazı kaydederken grup verirseniz (DEPO, URETIM gibi) baskı isteğinde device_id yerine printer_group gönderebilirsiniz. Amaç, cihaz kimliklerini iş tarafından uzak tutmaktır: bir yazıcı değiştiğinde ERP tarafındaki koda dokunmak gerekmez, cihaz kaydındaki grup taşınır.
Çözüm kuralı belirlenimcidir ve bu bilinçli bir tercihtir — “boşta olanı seç” türü bir dağıtım için gereken veriye sahip değiliz (ham 9100 soketi yazıcının doluluğunu bildirmez). Grupta tek cihaz varsa o seçilir; birden çok cihaz varsa grubun varsayılan işaretlisi seçilir. Varsayılan yoksa ya da birden çoksa iş basılmaz ve hata hangi cihazların çakıştığını sayar. Rastgele bir yazıcı seçmek, geri alınamayan bir çıktı üretirdi.
device_id ile printer_group birlikte gönderilemez. Grup adları büyük harfe normalleştirilir (depo = DEPO) ve yalnız harf, rakam, -, _ içerebilir. Grup kullanmayan entegrasyonlar için hiçbir şey değişmez: grup alanı boş doğar ve device_id eskisi gibi çalışır. Yanıt her iki yolda da işin düştüğü device_id'yi geri verir.
Webhook ile bildirim
Durum sormak için sürekli yoklama yapmanız gerekmez: baski.teslim ve baski.basarisiz olaylarına abone olun. baski.basildi diye bir olay yoktur — yukarıdaki gerekçenin aynısı. Gövde ham etiket içeriği taşımaz; iş kimliği, aşama ve sayaçlar gider. Başarısızlık olayı yalnızca iş kalıcı olarak başarısızlığa düştüğünde yayımlanır — her yeniden denemede bildirim göndermek gerçek arızayı gürültüde kaybederdi. uncertain olan iş baski.belirsiz yayımlar — ayrı bir olaydır ki baski.basarisiz'a yeniden baskı bağlamış bir otomasyon onu ikinci kez basmasın; mevcut abonelikler onu ancak eklediğinizde alır. Her baski.* gövdesi veri.sira (iş başına 1, 2, …) ve veri.status (o olaydaki durum) taşır. Teslimat yeniden denendiği için eski bir olay yenisinden sonra gelebilir: sira'yı karşılaştırın ve o iş için son işlediğinizden küçük sira taşıyan olayı yok sayın.
USB yazıcı: işletim sisteminin yazdırma kuyruğu
USB ile bağlı masaüstü yazıcı 9100 portunu açmaz; işletim sisteminde bir yazdırma kuyruğu olarak görünür (Windows yazdırma biriktiricisi, macOS ve Linux'ta CUPS). Agent 0.2.0 ve sonrası baytları bu kuyruğa RAW olarak verir: sürücü hiçbir şey çizmez, etiket dili yazıcıya gönderdiğiniz gibi ulaşır.
- Cihazı
adaptor: "os_driver"ile kaydedin (POST /v1/devices). - Agent makinesinde kuyruk adını bulun:
labelixa-agent discover -queues. - Cihazı kuyruğa eşleyin:
labelixa-agent map-printer -device CIHAZ_ID -queue "KUYRUK_ADI". - İsterseniz agent'ı her oturum açılışında arka planda çalıştırın:
labelixa-agent install(macOS'ta LaunchAgent, Linux'ta systemd kullanıcı birimi; Windows'ta yönetici PowerShell'inde çalıştırılacak servis komutlarını basar).
Bu yolda en ileri aşama submitted_to_os'tur: biriktirici işi kabul etti. Bu, submitted_to_printer'ın bir adım gerisidir — kapalı ya da kâğıdı bitmiş yazıcı burada değil, işletim sisteminin kuyruğunda görünür ve kuyruk yazıcı durumu bildirmez (yazici_durumu: null). Yazıcı kapalıyken gönderilen iş o kuyrukta bekler, yazıcı açılınca basılır. Kuyruğa kısmen verilmiş çok kopyalı iş otomatik yeniden denenmez.
Bulut kaydı ile agent eşlemesi uyuşmalıdır: ağ adresine eşlenmiş bir os_driver cihazı ya da kuyruğa eşlenmiş bir raw_tcp cihazı basılmaz ve AdaptorYok hatasıyla düşer — yanlış yazıcıya basmaktansa durmak.
USB Zebra yazıcıya buluttan ZPL baskısı
PrintOps — metrikler, uyarılar, baskı denetimi
Baskı uçlarının işletim yüzü: ne basıldı, ne takıldı, kim bastı. Yalnız okur; mevcut baskı kayıtlarını hesabın sahibine özetler. Aynı veriler panelde PrintOps sekmesinde (yazıcılarla aynı plan kapısı).
| Yöntem | Yol | Açıklama |
|---|---|---|
| GET | /v1/printops/dashboard?gun=7 | Pencere içindeki (1–90 gün) yedi metrik: iş sayısı, teslim edilen etiket (Σ etiket × kopya, dispatched), başarı oranı, başarısız iş ve en sık 5 hata tipi, şu an kuyrukta bekleyen, ortalama teslim süresi (oluşturma → ajan sonucu), yazıcı başına iş/başarısız (ilk 10). Ek: ajan sayısı ve çevrimiçi olanlar (son 2 dk). printed diye bir sayı yoktur — teslim, baytların ajana ulaştığını söyler, kâğıda ulaştığını değil. |
| GET | /v1/printops/alerts | Beş uyarı türü: ajan_cevrimdisi (son görülme > 10 dk, kritik), kuyruk_birikmesi (5 dk'dan eski bekleyen iş; ≥ 20 kritik), tekrarli_hata (bir yazıcıda son 60 dk ≥ 3 başarısız), yazici_engel (yazıcının son durum yanıtı engel), eslenmemis_cihaz (hiçbir ajan eşlemiyor). Eşleme bilgisi yoksa 'eşlenmemiş' uydurulmaz. |
| GET | /v1/printops/audit | Baskı denetimi — her iş için kim (denetim izi aktörü), ne (içerik özeti + şablon), nerede (yazıcı), ne zaman, sonuç (durum + aşama + hata tipi), kaç kopya, hangi kaynaktan (kaynak_is_id). Süzgeçler: device_id, status, baslangic, bitis, limit. Denetim izi kapalıyken 'kim' boş döner. |
Business Central
Labelixa'nın Business Central uzantısı (Labelixa Core + DirectPrint) bu uçları kullanır; kendi entegrasyonunuz da kullanabilir. Kimlik API anahtarıdır; anonim istek eşleme kuramaz (403). Plan kapısı baskı uçlarıyla aynıdır.
| Yöntem | Yol | Açıklama |
|---|---|---|
| POST | /v1/bc/tenants | BC kiracı / ortam / şirket üçlüsünü bu hesaba eşler. Gövde {kiraci, ortam, sirket?}; şirket boşsa ortamın tüm şirketleri. Yeni eşleme 201, aynı hesaptan tekrar 200; başka hesaba eşli üçlü 409 KiraciBaskasinin. |
| GET | /v1/bc/tenants | Hesabın eşlemeleri ve her birinin bu ayki BC baskı sayacı. |
| DELETE | /v1/bc/tenants/{id} | Eşlemeyi ve sayaç satırlarını siler (204). Başka hesabın eşlemesi olmayan eşlemeyle aynı cevabı alır (404). |
| POST | /v1/bc/print | /v1/print gövdesi + kiraci, ortam, sirket?. Eşleme çözülür → aylık tavan → /v1/print ile aynı yol. 202 kuyruğa alındı demektir, basıldı değil. Kayıtlı etiketle basmak için etiket_id + degiskenler ya da çok satır için satirlar (1–1000 satır; boş liste 400, alanı hiç göndermemek tek etiket; kopya 1–100). Etiket koli sırasını (shipment_package_number) kullanıyor ve değerlerde shipment_package_count = N varsa o kayıt N etiket olur (1 / N … N / N); sayılan etiket sayısı budur, tavan yine 1000. Tavan dolunca 402 + X-Quota-Action: upgrade. Sayaç yalnız 202'de artar; web kotası düşmez. |
| GET | /v1/bc/dictionary | BC alan sözlüğü: kaynak türü → BC alanı → şablon değişkeni (item_number biçimi). |
| POST | /v1/labels/starter-set | Markasız gönderi etiketi setini (içerik İngilizce) hesaba taslak olarak ekler: 10x10 cm, 10x15 cm, 4x6 inç, 103x150 mm ve A6; nakledilmiş satış sevkiyatından dolar; her etikette koli sırası/sayısı (PACKAGE 1 / 3) ve sevkiyatın toplam brüt ağırlığı (TOTAL WEIGHT) vardır. Aynı adla (arşivdekiler dahil) zaten var olan etiket atlanır — iki kez çağırmak bir şey eklemez; kayıtlı etiket sınırı eksiklerin hepsine yetmezse hiçbiri eklenmez (403 + X-Quota-Action: upgrade). |
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_preview | ZPL'i PNG'e render eder (dpmm/boyut/indeks seçilebilir). |
zpl_validate | ZPL'i satır/kolon konumlu tanılamalarla denetler. |
barcode_png | Tek barkodu PNG olarak üretir. |
save_label | Etiketi hesaba kaydeder; anahtarsız çağrıda 24 saat bekletir ve tek kullanımlık hesap bağlantısı döndürür. |
printer_language_to_zpl | SATO SBPL, Datamax DPL ya da Intermec IPL akışını ZPL'e çevirir; kaynak dili siz seçersiniz. Uyarı varsa çeviri birebir değildir; fiziksel yazıcıda doğrulanmadı. |
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.
Kodlama asistanları için kural dosyaları
Tek bir kural dosyası Claude Code, Cursor, GitHub Copilot ya da Windsurf'e etiket kodunu metinden tahmin etmek yerine Labelixa ile doğrulatmayı ve render ettirmeyi öğretir. Asistanınıza uygun dosyayı Labelixa/agent-skills deposundan projenize kopyalayın: .claude/skills/labelixa/SKILL.md, .cursor/rules/labelixa.mdc, .github/instructions/labelixa.instructions.md, .windsurf/rules/labelixa.md. Kurallar MCP sunucusunu ya da CLI'ı çağırır; varsa API anahtarı yalnız ortamdan 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 -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.
<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öntem | Yol | Açıklama |
|---|---|---|
| POST | /v1/language-detect | ZPL / EPL / TSPL / CPCL tespiti |
| POST | /v1/epl/render | EPL → PNG |
| POST | /v1/epl/diagnostics | EPL tanılama (satır numaralı) |
| POST | /v1/tspl/render | TSPL → PNG |
| POST | /v1/tspl/diagnostics | TSPL tanılama (satır numaralı) |
| POST | /v1/cpcl/render | CPCL → PNG |
| POST | /v1/cpcl/diagnostics | CPCL tanılama (satır numaralı) |
| POST | /v1/compatibility | ZPL 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.
Yazıcı dili çevirisi (SBPL / DPL / IPL → ZPL)
Üç uç SATO SBPL, Honeywell (Datamax) DPL ve Honeywell (Intermec) IPL akışını ZPL'e çevirir; etiket böylece ZPL araçlarıyla önizlenir, denetlenir ve basılır. Gövde ham akıştır — gerçek kontrol karakterleri ile belgelerdeki okunabilir gösterim (<STX>, <ESC>) aynı sonucu verir. Kaynak dili siz seçersiniz: otomatik dil tespiti bu üç dili tanımaz.
| Yöntem | Yol | Açıklama |
|---|---|---|
| POST | /v1/convert/sbpl-to-zpl | SATO SBPL → ZPL |
| POST | /v1/convert/dpl-to-zpl | Datamax / Honeywell DPL → ZPL |
| POST | /v1/convert/ipl-to-zpl | Intermec / Honeywell IPL → ZPL |
Parametreler
| Parametre | Varsayılan | Anlamı |
|---|---|---|
dpmm | 8 | Hedef çözünürlük: mm başına 6, 8, 12 ya da 24 nokta (152 / 203 / 300 / 600 dpi). Başka değer 8'e düşer. |
etiket_boyu_mm | — | Yalnız DPL: etiket boyu (mm). DPL satırları etiketin ALT kenarından, ZPL üstten ölçer; bu değer (ya da akışta <STX>c / <STX>KcCL) yoksa 6 inç varsayılır ve uyarı eklenir. |
Yanıt
| Alan | Anlamı |
|---|---|
zpl | Çevrilen ZPL (etiket başına bir ^XA…^XZ bloğu). |
uyarilar | İngilizce uyarı listesi: taşınamayan her komut ya da barkod, belge sayfasıyla. |
kaynak_dil | sbpl, dpl ya da ipl — çağrılan uç. |
birebir | Yalnız uyarı listesi boşken true. |
X-Warnings-Count | Yanıt başlığı: uyarı sayısı. |
Uyarı varsa çeviri birebir değildir. Desteklenen alt kümenin dışındaki komutlar — yazıcı ayarları (hız, koyuluk, sensör), RFID, iş yönetimi ve bazı 2B barkod türleri — uyarıyla atlanır, asla sessizce yutulmaz. Uyarıları etiketi basacak kişiye gösterin.
curl -X POST "https://api.labelixa.com/v1/convert/sbpl-to-zpl?dpmm=8" \
--data-binary "<A><CS>6<V>100<H>200<L>0202<XM>ABCD<Q>1<Z>"{"zpl": "^XA\n^FO199,99^A0N,48,48^FDABCD^FS\n^PQ1\n^XZ",
"uyarilar": ["<CS> Print Speed not carried over to ZPL (manual p. 326; printer setting or outside the supported subset)"],
"kaynak_dil": "sbpl", "birebir": false}curl -X POST "https://api.labelixa.com/v1/convert/dpl-to-zpl?dpmm=8&etiket_boyu_mm=101.6" \
--data-binary @label.dplFiziksel yazıcıda doğrulanmadı. SATO, Datamax ya da Intermec yazıcı kullanılmadı: çıktı her üreticinin komut belgesine göre eşdeğer ZPL'dir. Döndürülmüş alanların konumu yaklaşıktır ve diğer yazı tipi aileleri ^A0'a taşınır; ikisi de uyarıyla söylenir. Üretimden önce önizlemeyi ve bir deneme baskısını kontrol edin.
Çeviri işlem kotasından düşmez; yalnız saniyelik hız sınırı uygulanır. Gövde en çok 512 KB (üstü 413), boş gövde 400. Uçlar durumsuzdur: kod saklanmaz, loglanmaz.
Aynısını tarayıcıda yapmak için: Yazıcı Dili Dönüştürücü.
Postman koleksiyonu
Bu referanstaki her uç, herkese açık Postman çalışma alanında hazır istek olarak duruyor: postman.com/labelixa-3901521. Koleksiyon OpenAPI şemasından (/openapi.json) üretilir; elle bakılan ikinci bir kopya değildir. Anahtar apiKey değişkeninde taşınır ve koleksiyona GÖMÜLMEZ — çalışma alanını çatalladıktan sonra kendi ortamınıza yazarsınız; boş bırakırsanız istekler anonim kotayla çalışır.
README'niz için rozet
Deponuzdaki ZPL dosyaları CI'da denetleniyorsa (POST /v1/diagnostics hatada sıfır dışı sonuç verir) bunu statik bir rozetle söyleyebilirsiniz — sayaç ve izleme yok, bir gün önbelleklenir:
[](https://labelixa.com/tools/zpl-preview)Yalnız iddia deponuz için doğruysa kullanın; önizleyiciyi kendi sayfanıza gömme ve altına atıf satırı için gömme rehberi.