API Referans

Eronta REST API'si, panel üzerindeki tüm operasyonlara programatik erişim sağlar. Tüm yanıtlar JSON formatındadır.

Temel URL

https://api.eronta.com

İstek Formatı

Tüm isteklerde Content-Type: application/json gereklidir. Kimlik doğrulaması için JWT Bearer token (Authorization: Bearer <token>) veya API anahtarı (X-API-Client + X-API-Key) başlıkları kullanılabilir.

Kimlik Doğrulama

Eronta API iki farklı kimlik doğrulama yöntemini destekler:

YöntemHeader(lar)Kullanım Amacı
JWT Bearer Token Authorization: Bearer <token> Panel kullanıcıları; /api/auth/login ile alınan token. 7 gün geçerlidir.
API Key X-API-Client: <clientId>
X-API-Key: <clientSecret>
Harici entegrasyonlar ve özel uygulamalar. Paneldeki Özel Uygulamalar sayfasından oluşturulur. Detaylar →
Her iki yöntem de paralel olarak desteklenir. Bir istekte yalnızca tek bir yöntem gönderilmelidir. JWT token mevcutsa API key başlıkları göz ardı edilir.

Hata Kodları

KodAçıklama
400Geçersiz istek (eksik veya hatalı parametre)
401Kimlik doğrulama gerekli veya token geçersiz
403Bu işlem için yetkiniz yok
404Kayıt bulunamadı
429Rate limit aşıldı
500Sunucu hatası

Giriş Yap

POST/api/auth/login Oturum aç, token al
AlanTipAçıklama
emailstringE-posta zorunlu
passwordstringŞifre zorunlu
İstek
POST /api/auth/login
{
  "email": "kullanici@firma.com",
  "password": "sifre123"
}
Yanıt 200 OK
{
  "ok": true,
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "user": {
    "id": 42,
    "email": "kullanici@firma.com",
    "fullName": "Ad Soyad",
    "role": "admin",
    "tenantId": 7,
    "tenantName": "Firma Adı"
  }
}

Oturum Bilgisi

GET/api/auth/me Mevcut kullanıcı bilgisi
Yanıt 200 OK
{ "ok": true, "user": { "id": 42, "email": "...", "role": "admin", "tenantId": 7 } }

Token Yenile

POST/api/auth/refresh Token yenile

Geçerli token ile yeni token alınır. Süresi dolmadan önce çağrılmalıdır.

Yanıt 200 OK
{ "ok": true, "token": "eyJhbGciOiJIUzI1NiIs..." }

API Key Kimlik Doğrulama

API anahtarı kimlik bilgileri panel → Özel Uygulamalar sayfasından oluşturulur. Kullanıcı adı veya şifre gerekmez.
KEYX-API-Client + X-API-Key Harici uygulama kimlik doğrulaması
HeaderAçıklama
X-API-ClientUygulamanın Client ID değeri (UUID formatı) zorunlu
X-API-KeyUygulamanın Client Secret değeri (64 hex karakter) zorunlu
Örnek istek
GET /api/products?limit=20
X-API-Client: 59cbbab1-867a-4020-be4a-da534a3c4aca
X-API-Key: 6f85f588f9...
curl
curl "https://api.eronta.com/api/products?limit=20" \
  -H "X-API-Client: <clientId>" \
  -H "X-API-Key: <clientSecret>"
Kimlik bilgilerini alma

Panel → Özel UygulamalarYeni Uygulama Ekle ile oluşturulan her uygulama için bir clientId ve clientSecret üretilir. clientSecret yalnızca bir kere gösterilir; kaybedilirse yeniden oluşturulmalıdır.

Yanıt (başarılı kimlik doğrulama)
{
  "ok": true,
  "products": [ ... ],
  "total": 9954
}
Yanıt (hatalı/eksik kimlik bilgisi)
{ "ok": false, "error": "Oturum gerekli" }

Ürün Listesi

GET/api/products Sayfalı ürün listesi
ParametreTipAçıklama
pagenumberSayfa no (varsayılan: 1) isteğe bağlı
limitnumberSayfa başına kayıt (maks: 200) isteğe bağlı
qstringAd / barkod araması isteğe bağlı
marketplacestringtrendyol | hepsiburada isteğe bağlı
Yanıt 200 OK
{
  "ok": true,
  "total": 1240,
  "products": [
    {
      "id": "MP-001",
      "barcode": "8691234567890",
      "title": "Ürün Başlığı",
      "marketplace": "trendyol",
      "price": 299.90,
      "stock": 42,
      "status": "active"
    }
  ]
}

Ürün Detayı

GET/api/products/:productId Tek ürün getir
Yanıt 200 OK
{
  "ok": true,
  "product": {
    "id": "MP-001",
    "barcode": "8691234567890",
    "title": "Ürün Başlığı",
    "marketplace": "trendyol",
    "price": 299.90,
    "listPrice": 349.90,
    "stock": 42,
    "brand": "Marka",
    "status": "active"
  }
}

Ürün Oluştur

POST/api/products Kataloğa yeni ürün ekle
AlanTipAçıklama
titlestringÜrün adı zorunlu
barcodestringBarkod — benzersiz olmalı isteğe bağlı
skustringStok kodu / SKU isteğe bağlı
sellPricenumberSatış fiyatı isteğe bağlı
listPricenumberListe fiyatı (KDV dahil) isteğe bağlı
discountPricenumberİndirimli fiyat isteğe bağlı
buyPricenumberAlış fiyatı isteğe bağlı
stockCountnumberStok adedi isteğe bağlı
descriptionstringÜrün açıklaması (HTML destekli) isteğe bağlı
brandstringMarka adı isteğe bağlı
categorystringKategori adı isteğe bağlı
imagesstring[]Görsel URL listesi isteğe bağlı
attributesKVobject[][{"key":"Renk","value":"Siyah"}] isteğe bağlı
sourcestringKaynak platform. Varsayılan: eronta isteğe bağlı
İstek
POST /api/products
Content-Type: application/json
Authorization: Bearer <token>

{
  "title": "Pamuklu T-Shirt Siyah L",
  "barcode": "8690000112233",
  "sku": "TSH-BLK-L",
  "sellPrice": 249.90,
  "listPrice": 299.90,
  "stockCount": 50,
  "brand": "MyBrand",
  "category": "Giyim > T-Shirt",
  "description": "<p>%100 pamuk, taşlama yıkama.</p>",
  "images": ["https://cdn.example.com/tshirt-black-l.jpg"],
  "attributesKV": [
    { "key": "Renk", "value": "Siyah" },
    { "key": "Beden", "value": "L" }
  ]
}
Yanıt 201 Created
{
  "ok": true,
  "product": {
    "id": "f9a3c1d2-...",
    "source": "eronta",
    "title": "Pamuklu T-Shirt Siyah L",
    "barcode": "8690000112233",
    "sku": "TSH-BLK-L",
    "sellPrice": 249.90,
    "listPrice": 299.90,
    "stockCount": 50,
    "createdAt": 1743000000000
  }
}

409 Conflict — Aynı barkodla ürün zaten varsa: {"ok":false,"error":"Bu barcode ile zaten bir ürün mevcut.","code":"BARCODE_CONFLICT"}

Ürün Güncelle

PUT/api/products/:productId Ürün bilgilerini güncelle (fiyat, stok, başlık, açıklama…)
AlanTipAçıklama
name / titlestringÜrün adı isteğe bağlı
barcodestringYeni barkod isteğe bağlı
skustringSKU / stok kodu isteğe bağlı
sellPricenumberSatış fiyatı isteğe bağlı
discountPricenumberİndirimli fiyat isteğe bağlı
buyPricenumberAlış fiyatı isteğe bağlı
stockCountnumberStok adedi isteğe bağlı
descriptionstringAçıklama isteğe bağlı
brandstringMarka isteğe bağlı
categorystringKategori isteğe bağlı
isActivebooleanAktif / pasif isteğe bağlı
attributesKVobject[]Özellikler [{key, value}] isteğe bağlı
priceListsobject[][{priceListId, salePrice, discountedPrice}] — fiyat listesi satırları isteğe bağlı

Yalnızca gönderilen alanlar güncellenir. Stok veya fiyat değiştiğinde Trendyol / Hepsiburada'ya otomatik push tetiklenir (barkod eşleşmesi varsa).

İstek
PUT /api/products/f9a3c1d2-...
Content-Type: application/json

{
  "sellPrice": 279.90,
  "discountPrice": 259.90,
  "stockCount": 42,
  "isActive": true
}
Yanıt 200 OK
{ "ok": true, "product": { "id": "f9a3c1d2-...", "sellPrice": 279.90, "stockCount": 42, ... } }

Stok Güncelle

PUT/api/products/:productId Yalnızca stok sayısını güncelle — pazaryerlerine push tetiklenir

PUT /api/products/:id endpoint'inin stok odaklı kullanımı. Yalnızca stockCount gönderildiğinde Trendyol / Hepsiburada stok push'u otomatik tetiklenir.

İstek — Sadece stok
PUT /api/products/f9a3c1d2-...
Content-Type: application/json

{ "stockCount": 100 }
Yanıt 200 OK
{ "ok": true, "product": { "id": "f9a3c1d2-...", "stockCount": 100, "updatedAt": 1743120000000 } }

Toplu stok için: Birden fazla ürün güncellemek istiyorsanız POST /api/products/import (Excel/CSV) veya fiyat listeleri üzerinden toplu güncelleme yapabilirsiniz.

Fiyat Güncelle

PUT/api/products/:productId Yalnızca fiyat güncelle — pazaryerlerine push tetiklenir

PUT /api/products/:id endpoint'inin fiyat odaklı kullanımı. Stok değişmeden sadece fiyat güncellemek için:

İstek — Sadece fiyat
PUT /api/products/f9a3c1d2-...
Content-Type: application/json

{ "sellPrice": 349.90, "discountPrice": 299.90 }
Fiyat listesiyle birlikte güncelleme
PUT /api/products/f9a3c1d2-...

{
  "sellPrice": 349.90,
  "priceLists": [
    { "priceListId": "pl-001", "salePrice": 349.90, "discountedPrice": 299.90 }
  ]
}
Yanıt 200 OK
{ "ok": true, "product": { "id": "f9a3c1d2-...", "sellPrice": 349.90, ... } }

Görsel Yükle

POST/api/products/:productId/images Ürüne görsel ekle (multipart/form-data)

En fazla 20 görsel, toplam 20 MB yüklenebilir. Desteklenen formatlar: jpg, png, webp.

İstek — curl örneği
curl -X POST https://api.eronta.com/api/products/f9a3c1d2-.../images \
  -H "Authorization: Bearer <token>" \
  -F "images=@/path/to/photo1.jpg" \
  -F "images=@/path/to/photo2.jpg"
Yanıt 200 OK
{
  "ok": true,
  "added": 2,
  "images": [
    "https://api.eronta.com/api/uploads/abc123.jpg",
    "https://api.eronta.com/api/uploads/def456.jpg"
  ]
}

Ürün Sil

DELETE/api/products/:productId Ürünü katalogdan kaldır
Yanıt 200 OK
{ "ok": true, "deleted": "f9a3c1d2-..." }
Yanıt 404 Not Found
{ "ok": false, "error": "Product not found" }

Toplu İçe Aktar

POST/api/products/import Excel / CSV ile toplu ürün veya stok/fiyat güncelleme

multipart/form-data ile .xlsx veya .csv dosyası gönderin. Dosya şablonunu Ürünler → Dışa Aktar menüsünden indirebilirsiniz.

AlanTipAçıklama
filefilexlsx veya csv dosyası zorunlu
modestringupsert (varsayılan) | stock_only | price_only isteğe bağlı
curl örneği
curl -X POST https://api.eronta.com/api/products/import \
  -H "Authorization: Bearer <token>" \
  -F "file=@products.xlsx" \
  -F "mode=upsert"
Yanıt 200 OK
{
  "ok": true,
  "imported": 145,
  "updated": 32,
  "skipped": 3,
  "errors": []
}

Sipariş Listesi

POST/api/orders/list Filtreli sipariş listesi
AlanTipAçıklama
sourcestringtrendyol | hepsiburada | all isteğe bağlı
statusstringSipariş durumu isteğe bağlı
startDatestringISO 8601 tarih isteğe bağlı
endDatestringISO 8601 tarih isteğe bağlı
qstringSipariş no / müşteri adı isteğe bağlı
pagenumberSayfa no isteğe bağlı
limitnumberSayfa başına kayıt isteğe bağlı
İstek
{
  "source": "trendyol",
  "startDate": "2026-03-01T00:00:00Z",
  "endDate": "2026-03-28T23:59:59Z",
  "page": 1,
  "limit": 25
}
Yanıt 200 OK
{
  "ok": true,
  "total": 318,
  "orders": [
    {
      "id": "12345678",
      "source": "trendyol",
      "status": "Delivered",
      "customerName": "Ahmet Y.",
      "totalPrice": 459.90,
      "currency": "TRY",
      "createdAt": "2026-03-20T14:32:00Z"
    }
  ]
}

Sipariş Detayı

GET/api/orders/:source/:id Sipariş ve satır detayları, kargo durumu, müşteri adresi

source: trendyol | hepsiburada | ikas  |  id: Sipariş numarası

İstek
GET /api/orders/trendyol/12345678
Authorization: Bearer <token>
Yanıt 200 OK
{
  "ok": true,
  "order": {
    "id": "12345678",
    "source": "trendyol",
    "status": "Delivered",
    "statusLabel": "Teslim Edildi",
    "createdAt": "2026-03-20T14:32:00Z",
    "customerName": "Ahmet Yılmaz",
    "customerEmail": "ahmet@example.com",
    "shippingAddress": {
      "fullName": "Ahmet Yılmaz",
      "address": "Atatürk Cad. No:5",
      "city": "İstanbul",
      "district": "Kadıköy",
      "zipCode": "34710"
    },
    "lines": [
      {
        "barcode": "8690000112233",
        "productName": "Pamuklu T-Shirt Siyah L",
        "quantity": 2,
        "amount": 249.90,
        "totalAmount": 499.80
      }
    ],
    "totalPrice": 499.80,
    "currency": "TRY",
    "cargoTrackingNumber": "TR123456789",
    "cargoCompany": "Yurtiçi Kargo"
  }
}

Sipariş İstatistikleri

GET/api/orders/dashboard-stats Dashboard istatistikleri
Yanıt 200 OK
{
  "ok": true,
  "today": { "orderCount": 24, "revenue": 8740.50 },
  "last7days": { "orderCount": 187, "revenue": 68450.75 },
  "last30days": { "orderCount": 823, "revenue": 298120.40 },
  "bySource": {
    "trendyol": { "count": 512, "revenue": 183000 },
    "hepsiburada": { "count": 311, "revenue": 115120 }
  }
}

Fatura Kes

POST/api/orders/:source/:id/invoice Sipariş için fatura kes

source: trendyol veya hepsiburada  |  id: Sipariş numarası

Yanıt 200 OK
{ "ok": true, "invoiceNo": "EAR-2026-00124", "invoiceUrl": "https://..." }

Siparişleri Dışa Aktar

POST/api/orders/export CSV / Excel olarak dışa aktar
AlanTipAçıklama
formatstringcsv | xlsx zorunlu
startDatestringBaşlangıç tarihi isteğe bağlı
endDatestringBitiş tarihi isteğe bağlı

Yanıt olarak dosya stream döner (application/octet-stream).

Müşteri Sorularını Listele

GET/api/questions/list Trendyol pazaryeri müşteri sorularını getir
AlanTipAçıklama
statusstringWAITING_FOR_ANSWER (varsayılan) | ANSWERED isteğe bağlı
pagenumberSayfa (0'dan başlar) isteğe bağlı
sizenumberSayfa başına kayıt, maks 200 isteğe bağlı
İstek
GET /api/questions/list?status=WAITING_FOR_ANSWER&page=0&size=20
Authorization: Bearer <token>
Yanıt 200 OK
{
  "ok": true,
  "totalElements": 14,
  "questions": [
    {
      "id": "q-98765",
      "text": "Bu ürün L beden büyük mü kesiliyor?",
      "status": "WAITING_FOR_ANSWER",
      "createdDate": "2026-03-26T10:15:00Z",
      "barcode": "8690000112233",
      "productName": "Pamuklu T-Shirt Siyah L",
      "platform": "trendyol",
      "answer": null,
      "aiAnswer": null
    }
  ]
}

AI Cevap Üret

POST/api/questions/generate Soruya ürün bağlamıyla AI cevap taslağı oluştur

Eronta AI, ürün açıklaması, özellikleri ve mağaza notlarını göz önünde bulundurarak doğal dilde cevap taslağı üretir. Cevabı göndermek için POST /api/questions/:id/answer kullanın.

AlanTipAçıklama
questionstringMüşteri soru metni zorunlu
barcodestringÜrün barkodu — katalogdan bağlam çekilir isteğe bağlı
productDataobjectManuel ürün bağlamı (barkod yerine) isteğe bağlı
İstek
POST /api/questions/generate
Content-Type: application/json
Authorization: Bearer <token>

{
  "question": "Bu ürün L beden büyük mü kesiliyor?",
  "barcode": "8690000112233"
}
Yanıt 200 OK
{
  "ok": true,
  "answer": "Merhaba! Ürünümüz standart kesimde olmakla birlikte rahat bir kullanım için bir beden büyük almanızı öneririz. İyi alışverişler!"
}

Not: Bu endpoint AI paketi gerektiren bir özelliktir. Paketsiz hesaplarda 403 FEATURE_DISABLED döner.

Cevap Gönder

POST/api/questions/:id/answer Soruyu Trendyol'da yanıtla
AlanTipAçıklama
textstringCevap metni (10–2000 karakter) zorunlu
İstek
POST /api/questions/q-98765/answer
Content-Type: application/json

{ "text": "Merhaba! Ürünümüz standart kesimde olmakla birlikte ..." }
Yanıt 200 OK
{ "ok": true, "message": "Cevap gönderildi." }

Cevap Trendyol API'sine anında iletilir ve panel tarihçesine kaydedilir.

Oto-Cevap Ayarları

GET/api/questions/settings Otomatik cevaplama modunu ve mağaza notlarını getir / güncelle
GET yanıtı
{
  "ok": true,
  "storePrompt": "Mağazamız hafta içi 09:00-18:00 açıktır. Kargo 1-3 iş günü.",
  "autoMode": "generate",
  "lastAutoRunAt": 1743100000000
}

autoMode değerleri: off — devre dışı | generate — AI taslak oluşturur, onay bekler | auto — bekleyen tüm soruları otomatik yanıtlar

POST ile güncelleme
POST /api/questions/settings
Content-Type: application/json

{
  "storePrompt": "Kargo 1-3 iş günü. İadeler 14 gün içinde kabul edilir.",
  "autoMode": "generate"
}
Yanıt
{ "ok": true, "message": "Ayarlar kaydedildi.", "autoMode": "generate" }

Fiyat Listeleri — Listele

GET/api/price-lists Tüm fiyat listeleri
Yanıt 200 OK
{
  "ok": true,
  "priceLists": [
    { "id": 3, "name": "Trendyol Yazlık", "currency": "TRY", "itemCount": 248, "createdAt": "2026-01-15T08:00:00Z" }
  ]
}

Fiyat Listesi — Oluştur

POST/api/price-lists Yeni liste oluştur
AlanTipAçıklama
namestringListe adı zorunlu
descriptionstringAçıklama isteğe bağlı
currencystringPara birimi (varsayılan: TRY) isteğe bağlı
Yanıt 201 Created
{ "ok": true, "id": 5, "name": "Yaz Kampanyası" }

Fiyat Listesi — Ürün Ekle

POST/api/price-lists/:id/items Listeye ürün ekle / güncelle
AlanTipAçıklama
barcodestringÜrün barkodu zorunlu
pricenumberSatış fiyatı zorunlu
salePricenumberİndirimli fiyat isteğe bağlı
İstek
{ "barcode": "8691234567890", "price": 249.90, "salePrice": 199.90 }
Yanıt 200 OK
{ "ok": true }

Fiyat Listesi — İçe / Dışa Aktar

POST/api/price-lists/:id/export XLS olarak dışa aktar

Excel dosyası (application/octet-stream) döner.

POST/api/price-lists/:id/import XLS'den toplu içe aktar

multipart/form-data ile file alanında XLS gönderilir.

Yanıt 200 OK
{ "ok": true, "imported": 248, "skipped": 2 }

Buybox Ürünleri

GET/api/buybox/products Buybox durum listesi
Yanıt 200 OK
{
  "ok": true,
  "products": [
    {
      "barcode": "8691234567890",
      "title": "Ürün Başlığı",
      "marketplace": "trendyol",
      "myPrice": 299.90,
      "buyboxPrice": 279.90,
      "hasBuybox": false
    }
  ]
}

Fiyat Öner (Reprice)

POST/api/buybox/reprice/suggest Rekabetçi fiyat önerisi al
AlanTipAçıklama
barcodestringÜrün barkodu zorunlu
marketplacestringtrendyol | hepsiburada zorunlu
Yanıt 200 OK
{ "ok": true, "suggestedPrice": 274.90, "minAllowedPrice": 267.50, "profitMargin": 0.14 }

Buybox Ayarları

GET/api/buybox/settings Buybox ayarlarını getir
Yanıt 200 OK
{ "ok": true, "settings": { "autoSync": true, "autoSyncInterval": 30, "minMarginPercent": 10 } }

AI Sohbet

POST/api/ai/chat AI asistana mesaj gönder
AlanTipAçıklama
messagestringKullanıcı sorusu zorunlu
conversationIdstringDevam eden sohbet ID'si isteğe bağlı
Yanıt 200 OK
{ "ok": true, "conversationId": "conv_xkq82", "reply": "Bu hafta en çok satan 5 ürününüz..." }

AI İçgörüler

GET/api/ai/insights Aktif içgörüler
Yanıt 200 OK
{
  "ok": true,
  "insights": [
    { "id": "ins_m9k3", "type": "low_stock", "severity": "warning", "title": "8 ürününüzde stok kritik", "isRead": false }
  ]
}

AI Öneriler

GET/api/ai/recommendations/list Öneri listesi
Yanıt 200 OK
{
  "ok": true,
  "recommendations": [
    { "id": "rec_p2a1", "type": "price_adjustment", "title": "Buybox kazanmak için fiyat düşürün", "impact": "high" }
  ]
}

Ayarları Getir

GET/api/settings Tüm mağaza ayarları
Yanıt 200 OK
{ "ok": true, "settings": { "stockBuffer": 2, "currency": "TRY", "timezone": "Europe/Istanbul" } }

Kullanıcılar

GET/api/settings/users Mağaza kullanıcıları
Yanıt 200 OK
{
  "ok": true,
  "users": [
    { "id": 42, "email": "kullanici@firma.com", "fullName": "Ad Soyad", "role": "admin", "isActive": true }
  ]
}