Etibas

Etibas API

Ürün · stok · fiyat · sipariş entegrasyonu — v2 (Bearer) ve v1 (eski adresler, değişmeden çalışır)

Hangi yolu kullanmalıyım?

DurumYolNe alırsınız
Alıcı da Etibas paneli kullanıyorEtibas Ağı (API kodu yazmadan)Stok/fiyat değişince saniyeler içinde alıcının ürününde; tedarikçi seçilen sipariş tedarikçinin paneline kendiliğinden düşer.
Kendi yazılımınız / e-ticaret siteniz / muhasebe programınızAPI v2 + isteğe bağlı webhookREST/JSON, Bearer token, artımlı sipariş çekimi, hafif stok ucu, anında bildirim.
Daha önce v1 ile bağlandınızv1 aynen çalışırAdresleriniz değişmedi; yeni geliştirmede v2'ye geçin.
Token nereden alınır? Tedarikçiniz (ya da siz, kendi panelinizde) Ayarlar › API Hesapları › Yeni ile bir hesap açar; her hesabın kendi token'ı, marka/ürün kapsamı ve isteğe bağlı size özel fiyat listesi vardır.

Etibas Ağı — iki Etibas hesabı arasında anlık bağlantı

Tedarikçi ve alıcı aynı platformdaysa veri HTTP üzerinden dolaşmaz; panel içinden doğrudan akar.

Kurulum (alıcı tarafında, 1 dakika)

  1. Tedarikçi size Hesap ID ve Token verir (API Hesapları ekranından).
  2. Panelinizde Eklentiler › Etibas Ağı'nı kurun; Firma (tedarikçinin firma kartı), Hesap ID, Token girin; teslimatı seçin: müşterime doğrudan (dropship) ya da bana.
  3. Kaydedince bağlantı iki tarafta da görünür. Ürünler ilk eşitlemede gelir (Firmalar ekranından eşleştirilir), sonrasında değişiklikler anında yansır.

Ne olur?

TedarikçideAlıcıda
Stok, liste fiyatı ya da alıcıya özel alış fiyatı değişirÜrün kartı, pazaryeri eşleşmeleri ve web sitesi saniyeler içinde güncellenir (saatlik tam karşılaştırma güvenlik ağı olarak sürer).
Siparişler ekranına Dış Satış (Alıcı Firma) kanalıyla, Onay Bekliyor durumunda sipariş düşer; fatura alıcı firmaya, teslimat alıcının müşterisine; alıcının pazaryeri kargo etiketi siparişle gelirSiparişte bu firmayı tedarikçi seçtiğiniz anda sipariş gider; kalemde "Etibas Ağı ile … paneline iletildi" izi ve tedarikçi sipariş no'su görünür.
Alıcı siparişi iptal ederse: kargolanmadıysa tedarikçideki sipariş pasife alınır, kargolandıysa uyarı notu düşer—
Alıcıya özel fiyat: tedarikçi API hesabında Alış fiyatını ben belirliyorum'u açar; genel iskonto → marka iskontosu → ürüne özel fiyat sırasıyla uygulanır. Alıcının ürüne elle yazdığı alış kilidi her zaman korunur.

API v2

https://api.etibas.com/v2/{uç}    Authorization: Bearer {token}
YöntemUçAçıklama
GET/benToken'ın hesabı, fiyat yönetimi, sipariş görünürlüğü
GET/urunlerÜrün listesi — size (≤1000), imlec, ids=a,b,c, sadece_stok=1
GET/urunler/{id}Tek ürün
GET/stoklarHafif liste: id, stok, psf, alis — sayfa başına 5000; sık eşitleme için
GET/markalar · /kategorilerReferans listeleri
GET/siparislerSipariş listesi — durum, platform, baslangic_tarihi, bitis_tarihi, guncellenme_gte (artımlı), ara, is_pasifler=true
POST/siparislerSipariş aç (Onay Bekliyor)
GET/siparisler/{id}Tek sipariş
POST/siparisler/{id}/iptalAPI ile açılmış, kargolanmamış siparişi iptal et
POST/siparisler/{id}/kargoKargo firması + takip no yaz (durum Kargoda)
GET PUT DEL/webhookAnında bildirim adresi
GET/olaylarSon webhook olayları ve gönderim sonuçları

Ortak kurallar

Liste yanıtı{"veri": [...], "sonraki_imlec": "…" | null, "toplam": n} — sonraki_imlec null olana dek ?imlec= ile devam edin.
Hata yanıtı{"hata": {"kod": "URUN_YOK", "mesaj": "…", "alanlar": {…}}} — 400 geçersiz gövde · 401 token · 403 IP/yetki · 404 yok · 409 çakışma · 422 alan hatası · 429 hız sınırı
Hız sınırıToken başına dakikada 600 istek; aşılırsa 429 ve Retry-After.
Fiyatlarpsf liste fiyatı; alis size özel alış fiyatı (yalnız tedarikçi tanımladıysa). İkisi de KDV dahil TL.
Sipariş görünürlüğüAPI hesabı ayarına göre yalnız bu hesabın açtığı siparişler (alıcı) ya da tüm siparişler (muhasebe programı).

Uç ayrıntıları (OpenAPI)

Tam şema: openapi.yaml — aşağıda etkileşimli belge.

Webhook

Olay olduğunda adresinize JSON POST edilir:

{
  "olay_id": "a1b2…",
  "tur": "urun.degisti",
  "tarih": "2026-10-10T14:05:12+03:00",
  "api_hesabi": "…",
  "yuk": { "urun_idler": ["URN001", "URN002"] }
}
OlayNe zamanYük
urun.degistiStok ya da fiyat değiştiurun_idler[] — ayrıntı için GET /urunler?ids=… ya da /stoklar?ids=…
siparis.olustuHesabınız adına sipariş açıldısiparis_id, siparis_kodu, kalem
siparis.durumSiparişin durumu/kargosu değiştisiparis_id, durum, kargo, is_pasif

Başlıklar: X-Etibas-Olay, X-Etibas-Olay-Id, X-Etibas-Imza = HMAC-SHA256(gövde, gizli anahtar) hex. 2xx dışı yanıtta 1 sn, 5 sn, 30 sn, 2 dk, 10 dk sonra yeniden denenir; 5 denemeden sonra olay /olaylar'da "basarisiz" görünür. Webhook'u PUT /webhook ile ya da panelden (API Hesapları › Webhook) açabilirsiniz.

İmzayı doğrulayın: hash_hmac('sha256', $govde, $gizli) === $_SERVER['HTTP_X_ETIBAS_IMZA']. Aynı olay nadiren iki kez gelebilir; olay_id ile tekilleştirin.

Örnek kod (v2)

PHP — tüm ürünler

$token = 'TOKEN';
$imlec = null; $urunler = [];
do {
    $url = 'https://api.etibas.com/v2/urunler?size=1000' . ($imlec ? '&imlec=' . urlencode($imlec) : '');
    $ch = curl_init($url);
    curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token]]);
    $y = json_decode(curl_exec($ch), true);
    foreach ($y['veri'] ?? [] as $u) $urunler[] = $u;
    $imlec = $y['sonraki_imlec'] ?? null;
} while ($imlec);
echo count($urunler) . " ürün";

PHP — sipariş aç

$govde = json_encode([
  'siparis_kodu' => 'WEB-10234', 'isim' => 'Ayşe Yılmaz', 'mail' => 'ayse@ornek.com', 'telefon' => '5321112233',
  'bilgiler' => [
    'fatura_isim' => 'Ayşe Yılmaz', 'fatura_adres' => 'Örnek Mah. 1. Sk. No:3', 'fatura_il_isim' => 'İstanbul', 'fatura_ilce_isim' => 'Kadıköy',
    'teslimat_isim' => 'Ayşe Yılmaz', 'teslimat_adres' => 'Örnek Mah. 1. Sk. No:3', 'teslimat_il_isim' => 'İstanbul', 'teslimat_ilce_isim' => 'Kadıköy',
  ],
  'kargo' => ['_id' => 'yurtici', 'isim' => 'Yurtiçi Kargo', 'barkod' => ''],
  'urunler' => [['_id' => 'URUN_ID', 'fiyat' => 1049.93, 'adet' => 1]],
]);
$ch = curl_init('https://api.etibas.com/v2/siparisler');
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => $govde, CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, 'Content-Type: application/json']]);
$y = json_decode(curl_exec($ch), true);   // 201: $y['veri']['id'] · 409: aynı siparis_kodu · 422: $y['hata']['alanlar']

Python — stoklar

import requests
r = requests.get("https://api.etibas.com/v2/stoklar", headers={"Authorization": "Bearer TOKEN"})
for s in r.json()["veri"]:
    print(s["id"], s["stok"], s.get("alis", s["psf"]))

curl

curl -H "Authorization: Bearer TOKEN" "https://api.etibas.com/v2/ben"
curl -H "Authorization: Bearer TOKEN" "https://api.etibas.com/v2/siparisler?guncellenme_gte=2026-10-10%2000:00:00"

v1 (eski sürüm — değişmeden çalışır)

https://api.etibas.com/{hesapId}/{token}/{uç} (GET; XML için ?method=xml)
UçParametrelerYanıt
/urunlersize (≤1000), search_after, is_sadece_stoktakiler=1, ids=a,b{size, search_after, content:[{id, isim, barkod, kod, psf, alis?, kdv_deger, stok, resim, resimler[], ozellikler[{suzgec, filtre}], kategori, marka}]}
/siparislerplatform, durum, baslangic_tarihi, bitis_tarihi, ara, is_pasifler=true, sort, order, search_afterSipariş listesi (100/sayfa)
/markalar · /kategorilersearch_afterReferans listeleri
/siparisler POSTGövde v2 ile aynı (SiparisGirdi){status: "success"|"error", mesaj, id}

search_after: yanıttaki değeri bir sonraki istekte gönderin; null dönünce bitti. v1'de hata kodları artık doğru HTTP durumlarıyla döner (403 token/IP, 404 uç, 409/422 sipariş).

Demo hesabı

Denemek için tanıtım hesabı (veriler örnektir, her gece yenilenir):

API hesabıTokenv2 örnek
Bayi Sitesi — Tüm Ürünler3f253c990fdd2e333bf8ed462591c563 curl -H "Authorization: Bearer 3f253c990fdd2e333bf8ed462591c563" https://api.etibas.com/v2/urunler?size=5
Muhasebe Programı (IP Kısıtlı) (IP kısıtlı: 203.0.113.25)efed2bd7120056edd2893562e81bf30d yalnız o IP'den
Marka Bayisi — Yalnız 2 Marka (IP kısıtlı: 198.51.100.40)e1c94d7fe8781595d9855ef77044f817 yalnız o IP'den

v1: https://api.etibas.com/demo/3f253c990fdd2e333bf8ed462591c563/urunler?size=5