Sürüm 1.0.0

DLAB E-com Açık API

Mağazanızı kendi sisteminize, ERP'nize ya da bir pazaryeri entegratörüne bağlayın. Ürün, stok, fiyat ve siparişler tek bir REST arayüzünden yönetilir; değişiklikler webhook ile anında size ulaşır.

Temel adreshttps://api.dlab-e.com/v1
01 · Hızlı başlangıç

Başlangıç

  1. Anahtar alın. Panel → Ayarlar → API ve Webhook → yeni anahtar.
  2. Bağlantıyı doğrulayın. GET /v1/me anahtarın hangi mağazaya ait olduğunu ve yetkilerini söyler.
  3. Eşleştirin. Ürünleri SKU ya da barkodla eşleştirin; eşleşmeyeni açmadan önce kullanıcıya önizleme gösterin.
  4. Dinleyin. Sipariş ve stok için webhook kurun; yedek olarak updatedAfter ile periyodik çekin.
Anahtar yalnız oluşturulduğu anda gösterilir; veritabanında sadece SHA-256 özeti saklanır. Kaybederseniz geri getirilemez, yenisini üretmeniz gerekir.
Bağlantı testi
curl "https://api.dlab-e.com/v1/me" -H "Authorization: Bearer $DLAB_API_KEY"
02 · Güvenlik

Kimlik doğrulama

Her istekte Authorization: Bearer dlk_live_<önek>_<sır> gönderin. Anahtar tek bir mağazaya bağlıdır: başka mağazanın kaydına eriştiğinizde 404 alırsınız — varlığı sızdırılmaz. İptal edilen anahtar anında 401 döner ve ona bağlı webhook uçları durur.

curl "https://api.dlab-e.com/v1/products?limit=20" \
  -H "Authorization: Bearer $DLAB_API_KEY"
03 · Güvenlik

Yetkiler

Anahtar oluştururken yalnız ihtiyacınız olan yetkileri verin. Yetkisi olmayan uç 403 döner.

YetkiNe açar
products:readÜrün ve kategori okuma
products:writeÜrün oluşturma, güncelleme, silme, toplu aktarım
stock:writeStok güncelleme
prices:writeFiyat güncelleme
orders:readSipariş okuma
orders:writeSipariş durumu ve kargo bilgisi yazma
categories:readKategori ağacı
customers:readMüşteri okuma
04 · Sınırlar

Hız sınırı ve hatalar

Anahtar başına dakikada 120 istek. Her yanıtta X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset döner; sınır aşılırsa 429 ve Retry-After gelir. Toplu uçları kullanarak istek sayısını düşürün: stok ve fiyat uçları tek çağrıda 500 satır kabul eder.

KodAnlamı
400Gövde ya da parametre geçersiz — mesaj alanın adını söyler
401Anahtar yok, hatalı ya da iptal edilmiş
403Anahtarın bu yetkisi yok
404Kayıt yok ya da başka mağazaya ait
409Çakışma (ör. aynı SKU)
422Aynı Idempotency-Key farklı gövdeyle kullanıldı
429Hız sınırı — Retry-After kadar bekleyin
5xxGeçici hata — üstel bekleyerek aynı Idempotency-Key ile yeniden deneyin
Hata gövdesi
{
  "statusCode": 403,
  "error": "Forbidden",
  "message": "Bu anahtarın 'stock:write' yetkisi yok"
}
05 · Güvenli yazma

Idempotency

Yazma isteklerinde (POST, PUT, PATCH) Idempotency-Key başlığı gönderin. Aynı anahtar ve aynı gövde 24 saat içinde tekrar gelirse istek yeniden çalıştırılmaz, ilk yanıt Idempotent-Replayed: true ile döner. Aynı anahtar farklı gövdeyle gelirse 422 alırsınız — sessizce yanlış işlem yapılmaz. Yalnız başarılı (2xx) yanıtlar saklanır, hatalı istek güvenle tekrarlanabilir.

Ağ hatası aldığınızda aynı Idempotency-Key ile tekrar gönderin: işlem iki kez uygulanmaz. Yalnız başarılı (2xx) yanıtlar saklandığı için hatalı istek güvenle tekrarlanabilir.
bash
curl -X PUT "https://api.dlab-e.com/v1/stock" \
  -H "Authorization: Bearer $DLAB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 8f1c2b90-5b2f-4c1e-9a3d-2f7c1b0a4e55" \
  -d '{"items":[{"sku":"TSH-001-M","stock":42}]}'
06 · Senkron

Sayfalama ve artımlı senkron

Liste uçları imleç (cursor) ile sayfalanır: { data, hasMore, nextCursor }. Sıralama (updatedAt, id) artan olduğu için sayfa arasında kayıt kaybolmaz ya da tekrar etmez. Artımlı senkronda son turun zamanını updatedAfter olarak gönderin.

Tüm katalogu artımlı çekme
let cursor, sonSenkron = store.get("lastSync");
do {
  const u = new URL("https://api.dlab-e.com/v1/products");
  u.searchParams.set("limit", "200");
  if (sonSenkron) u.searchParams.set("updatedAfter", sonSenkron);
  if (cursor) u.searchParams.set("cursor", cursor);
  const { data, hasMore, nextCursor } = await api(u.pathname + u.search);
  await isle(data);
  cursor = nextCursor;
} while (cursor);
store.set("lastSync", new Date().toISOString());
07 · Referans

Uç referansı

Bu liste OpenAPI şemasından üretilir — API değişirse doküman da değişir.

Bağlantı

2 uç

Anahtarın geçerliliğini ve yetkilerini doğrulayın.

Ürünler

7 uç

Katalog okuma, tekil ve toplu yazma.

Stok ve fiyat

2 uç

Mutlak stok ve fiyat güncelleme — entegrasyonun en sık çalışan iki ucu.

Siparişler

3 uç

Sipariş çekme ve durum geri yazma.

Kategori ve müşteri

2 uç

Yardımcı okuma uçları.

Toplu işler

1 uç

Toplu yazmaların satır satır sonucu.

Webhook uçları

3 uç

Anahtara bağlı webhook yönetimi (döngü önleme).

08 · Olaylar

Webhook

Olaylar: order.created, order.paid, order.status_changed, order.cancelled, product.created, product.updated, product.deleted, stock.changed, customer.created.

Gövde
{
  "id": "evt_01J8...",
  "event": "stock.changed",
  "createdAt": "2026-09-25T08:14:02.001Z",
  "siteId": "…",
  "source": "panel",
  "data": {
    "variantId": "…", "sku": "TSH-001-M",
    "stock": 42, "delta": -1, "reason": "ORDER", "ref": "#1042"
  }
}

Her istekte X-DLAB-Event, X-DLAB-Delivery ve X-DLAB-Signature: t=<unix>,v1=<hex> başlıkları gelir. İmzayı ham gövde üzerinden doğrulayın ve zaman damgasını ±5 dakika içinde kabul edin.

İmza doğrulama
import crypto from "node:crypto";

export function dogrula(rawBody, header, secret) {
  const p = Object.fromEntries(header.split(",").map((x) => x.split("=")));
  const beklenen = crypto.createHmac("sha256", secret).update(`${p.t}.${rawBody}`).digest("hex");
  const zamanOk = Math.abs(Date.now() / 1000 - Number(p.t)) < 300;
  return zamanOk && crypto.timingSafeEqual(Buffer.from(beklenen), Buffer.from(p.v1));
}

Teslim güvencesi: olay, işi yapan veritabanı işlemiyle birlikte yazılır (outbox) — işlem geri alınırsa olay da gitmez. 2xx dışı yanıt ya da 10 sn zaman aşımı başarısız sayılır; 1 dk, 5 dk, 30 dk, 2 sa, 6 sa sonra yeniden denenir. Art arda 10 başarısızlıkta uç otomatik kapatılır. Yönlendirmeler izlenmez; üretimde yalnız herkese açık https adresleri kabul edilir.

09 · İyi uygulama

Entegratör bağlantı kuralları

ERP, pazaryeri entegratörü ya da kendi yazılımınızı bağlıyorsanız bu dört kural veri bütünlüğünü korur.

Eşleştirme önizlemeli olur

POST /v1/products/match ile ne eşleşiyor ne yeni açılacak öğrenin — bu uç HİÇBİR ŞEY YAZMAZ. Sonucu kullanıcıya gösterip onay alın. Mükerrer ürün açmak geri alınması en zor hatadır.

Stok MUTLAK gönderilir

PUT /v1/stock her zaman "stok = 42" der, "−1" demez. Mağaza siparişte kendi düşümünü yapar, siz kendi havuzunuzun mutlak değerini yazarsınız; çift düşüm oluşmaz. Aynı değeri göndermek hareket yazmaz (unchanged).

Döngü kendiliğinden kırılır

Webhook ucunu anahtarınıza bağlarsanız, o anahtarın yaptığı stok/ürün değişiklikleri size geri gönderilmez. Her olayda source alanı değişikliğin kaynağını söyler: panel, storefront, api:<önek>, system.

Her alanın bir sahibi vardır

Firma, hangi alanı dış sistemin yöneteceğini panelden seçer (stok, fiyat, ad, açıklama, görsel, özellik). Kapalı alanı yazmaya çalışırsanız isteğiniz SESSİZCE YUTULMAZ: stok ve fiyat uçları 403 döner, ürün yazmada atlanan alanlar yanıtta skippedFields olarak listelenir. Hangi alanları yazabileceğinizi GET /v1/me söyler.

Yeniden deneme güvenlidir

Ağ hatasında aynı Idempotency-Key ile tekrar gönderin: işlem iki kez uygulanmaz. Toplu uçlar satır satır sonuç döndürür — hiçbir satır sessizce yutulmaz.