API Dokümanı
v1.2.0
Koleksiyonu İndir

REST API · v1.2.0

Entegra E-Ticaret API

Son güncelleme 14.10.2026·82 uç nokta·16 bölüm

Current Version: v1.2.0
Last Updated: 14.10.2026

Entegra E-Ticaret API'yi kullanmak veya görüşlerinizi bizimle paylaşmak isterseniz [email protected] adresi üzerinden iletişime geçebilirsiniz.
API'yi kullanarak eticaret verilerine ulaşabilir ve kendi uygulamalarınız ile entegre edebilirsiniz.

Genel Bilgiler

  • API için BASE_URL "https://www.example.com/api/ecommerce/v1"
  • Entegranın REST API'sine yapılan tüm isteklerin kimliğinin doğrulanması gerekmektedir.
  • API endpointlerine ulaşmak için ilk olarak size verilen 'email' , 'password' ve 'api_key' bilgileriyle sisteme login olup access token ve refresh token almalısınız.
  • Bu alınan access token'ı sorgulara Authorization header'ı olarak Bearer <access_token> şeklinde eklenmelidir.
  • Request limiti dakika/120 olarak ayarlanmıştır. Limit aşımında 1 saat ip engeli tanımlanmıştır. Limit, uç nokta ve IP adresi başına sayılır. Login ve refresh-auth uçları için dakika/10, Raporlar ve Toplu Ürün Güncelle uçları için dakika/60 ile sınırlıdır
  • Access token süresi 1 saat.
  • Refresh token süresi 1 aydır.
  • Not: Her Request için token isteği yapılmamalıdır. Aksi durumda otomatik olarak engellenirsiniz.

Error Codes & Descriptions

HTTP KoduError KeyAçıklama
415invalid_content_typeContent-Type header değeri tam olarak application/json olmalıdır (application/json; charset=utf-8 kabul edilmez).
400invalid_jsonGövde geçerli bir JSON değil.
400end_point_errorSorgu parametreleri doğrulanamadı ya da işlem tamamlanamadı.
403ip_blockedİp Engellenmiş
401user_not_foundApi Kullanıcısı bulunamadı ya da pasif
403permission_deniedİşlem için yetkiniz yok
401authorization_header_missingAuthorization header eksik
401invalid_authorization_formatHeader “Bearer” ile başlamıyor
401missing_bearer_token“Bearer” sonrası token yok
401invalid_tokenToken geçersiz veya bozuk
401expired_or_invalid_tokenToken expired veya yanlış
401unauthorizedLogin / Refresh Token: bilgiler hatalı ya da refresh token geçersiz
404invalid_requestGeçersiz Endpoint
404not_foundKayıt bulunamadı
422validation_errorGövde doğrulanamadı; message alan bazında hataları içerir
422no_dataGüncellenecek alan gönderilmedi
429too_many_requestsİstek limiti aşıldı; IP adresi engellenir
503api_disabledAPI panelden kapatılmış

Sample Error Response

{
    "status": false,
    "error": "ip_blocked",
    "message": "This IP address has been blocked"
}

Bölümler

Auth

2 uç nokta

Oturum Açma ve Token Yenileme İşlemler

POSTLogin

{{base_url}}/login
Yetkilendirme gerekmezContent-Type: application/jsonAccept: application/json

Kullanıcı e-posta, şifre ve API anahtarı ile giriş yapar. password en az 24 karakterdir; api_key panelde 128 karakter olarak üretilir. Başarılı giriş önceki refresh_token'ı geçersiz kılar.

Response (200 OK)

{
    "status": true,
    "data": {
        "access_token": "...",
        "refresh_token": "..."
    }
}

Rate limit: 10 istek/dakika

İstek gövdesi

{
  "email": "[email protected]",
  "password": "Panelde-Belirlenen-En-Az-24-Karakterlik-Sifre",
  "api_key": "<panelde-verilen-128-karakterlik-api-anahtari>"
}
İstek örneği
curl --request POST 'https://www.example.com/api/ecommerce/v1/login' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --data '{
  "email": "[email protected]",
  "password": "Panelde-Belirlenen-En-Az-24-Karakterlik-Sifre",
  "api_key": "<panelde-verilen-128-karakterlik-api-anahtari>"
}'

POSTRefresh Token

{{base_url}}/refresh-auth
Yetkilendirme gerekmezContent-Type: application/json

Kullanıcı, süresi geçerli bir refresh_token kullanarak API’ye istek gönderdiğinde:

  1. Sistem, kullanıcının doğrulamasını yapar ve geçerli refresh_token kontrolünü sağlar.
  2. Yeni bir access_token ve refresh_token oluşturur ve kullanıcıya döner.
  3. Önceki refresh_token artık geçersiz hale gelir; önceki access_token süresi dolana kadar geçerli kalır.

Response (200 OK)

{
    "status": true,
    "data": {
        "access_token": "....",
        "refresh_token": "..."
    }
}

Rate limit: 10 istek/dakika

İstek gövdesi

{
  "refresh_token": "{{refresh_token}}"
}
İstek örneği
curl --request POST 'https://www.example.com/api/ecommerce/v1/refresh-auth' \
  --header 'Content-Type: application/json' \
  --data '{
  "refresh_token": "<REFRESH_TOKEN>"
}'

Müşteriler

8 uç nokta

Müşterilere ait işlemler

Müşteri seçen uçlarda phone değerindeki + işareti %2B olarak kodlanmalıdır (ör. %2B905551234567); kodlanmazsa boşluk olarak okunur ve müşteri bulunamaz.

GETMüşteriler Listesi

{{base_url}}/customers
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringArama;
Ad, Soyad, E-posta, Telefon, Müşteri/Cari Kod; Max: 100
statusstringDurum;
Values : active / inactive
current_accountstringCari Hesap Durumu;
Values : active / inactive
dealerintegerBayi Grubu;
Bayi Grubu ID
sortstringSıralanacak Sutun:
Values : id / name
orderstringSıralama Tipi:
Values : asc / desc
pageintegerSayfa Numarası
Min : 1
limitintegerLimit
Min : 1 - Max : 500

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/customers' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETMüşteri Detayı

{{base_url}}/customers/detail
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Aşağıdaki parametrelerden en az birini kullanarak müşteri bilgilerini sorgulayabilir ve ilgili kayda erişebilirsiniz.

Query Parameters

FieldTypeDescripton
idintegerMüşteri ID
customer_codestringMüşteri/Cari Kodu
emailstringE-Posta
phonestringTelefon

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/customers/detail' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTMüşteri Ekle

{{base_url}}/customers
Bearer token gerekirContent-Type: application/json

Yeni müşteri kayıt işlemi

Body (JSON)

FieldTypeRules
statusstring - requiredDurum; Values: active / inactive
namestring - requiredAd; Sadece harf (TR dahil); Max: 100
surnamestring - requiredSoyad; Sadece harf (TR dahil); Max: 100
emailemail - requiredE-Posta; benzersiz olmalı
telephone_codestring - requiredTelefon ülke kodu; Values: tr / de / ru ... (ISO 2)
telephonestring - requiredTelefon; TR Format: +90 5xxxxxxxxx
passwordstring - requiredMin 12 karakter, harf ve rakam içermeli
communication_consentbooleanElektronik İleti Onayı; Values: true / false
sms_communication_consentbooleanSMS İleti Onayı; Values: true / false
tel_communication_consentbooleanTelefon İleti Onayı; Values: true / false
current_account_statusstring - requiredCari hesap durumu; Values: active / inactive
current_account_min_limitdecimalCari hesap borç limiti (varsayılan: 0)
customer_codestringMüşteri/Cari kodu; isteğe bağlı. Doluysa benzersiz olmalı; baştaki ve sondaki boşluklar silinir
dealer_idintegerBayi Grubu ID
dealer_min_order_statusstringBayi min. sipariş durumu; Values: active / inactive
dealer_min_order_typestringBayi min. sipariş tipi; Values: total_quantity / same_product_quantity
dealer_min_order_countintegerBayi min. sipariş adedi
addressesarrayAdres listesi; en fazla 20 adres gönderilebilir
addresses.*.titlestringAdres başlığı; addresses varsa zorunlu
addresses.*.is_defaultbooleanVarsayılan adres; addresses varsa zorunlu; sadece 1 adres true olabilir
addresses.*.countrystringÜlke adı; ny_country tablosunda kayıtlı olmalı
addresses.*.citystringŞehir adı; ny_citys tablosunda kayıtlı olmalı
addresses.*.districtstringİlçe adı; ny_citys_detail tablosunda kayıtlı olmalı
addresses.*.addressstringAçık adres; addresses varsa zorunlu
addresses.*.post_codeintegerPosta kodu; addresses varsa zorunlu
addresses.*.invoice_typestringFatura tipi; addresses varsa zorunlu; Values: individual / institutional
addresses.*.company_namestringŞirket ünvanı (kurumsal fatura için)
addresses.*.tax_officestringVergi dairesi (kurumsal fatura için)
addresses.*.tax_numberstringVergi numarası (kurumsal fatura için)
addresses.*.tcintegerTC kimlik numarası (bireysel fatura için)

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Customer created successfully.",
        "customer_id": 3
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

PATCHMüşteri Düzenle

{{base_url}}/customers
Bearer token gerekirContent-Type: application/json

addresses gönderilirse müşteriye ait tüm mevcut adresler silinir ve yerine gönderilen liste yazılır. Adres listesini korumak istiyorsanız bu alanı body'e dahil etmeyin. Düzenleme işlemi için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur

Aşağıdaki parametrelerden en az birini kullanarak müşteri düzenlemesini gerçekleştirebilirsiniz

Query Parameters

FieldTypeDescripton
idintegerMüşteri ID
customer_codestringMüşteri/Cari Kodu
emailstringE-Posta
phonestringTelefon

Body (JSON)

FieldTypeRules
statusstringDurum
Values : active/inactive
namestringAd
surnamestringSoyad
emailemailE-Posta
customer_codestringMüşteri/Cari Kodu; başka bir müşteride kullanılmıyor olmalı; boş gönderilirse kod kaldırılır
telephone_codestringTelefon Numarası ülke kodu.
Values : tr/de/ru....
telephonestringTR Format : +90 54xxxxxxxx
DE Format : +49 54xxxxxxxx
passwordstringMin 12 karakter harf ve rakam.
communication_consentbooleanElektronik İleti Onayı.
Values : true/false
sms_communication_consentbooleanSMS İleti Onayı.
Values : true/false
tel_communication_consentbooleanTelefon İleti Onayı.
Values : true/false
current_account_statusstringCari hesap durumu.
Values : active/inactive.
current_account_min_limitdecimalCari hesap borç limiti
dealer_idintegerBayi Grup ID
dealer_min_order_statusstringBayi Min. Sipariş Durumu
Values: active/inactive.
dealer_min_order_typestringBayi Min. Sipariş Tipi
values: total_quantity / same_product_quantity
total_quantity : Toplam ürün adeti üzerinden.
same_product_quantity : Aynı ürün adeti üzerinden
dealer_min_order_countintegerBayi Min. Sipariş Adeti
addressesarrayAdres Bilgileri; en fazla 20 adres gönderilebilir; gönderilirse mevcut adresler tümüyle silinir ve yenileri yazılır
addresses.\*.titlestringAdres Başlığı
addresses mevcut ise zorunlu
addresses.\*.is_defaultbooleanVarsayılan Adres.
addresses mevcut ise zorunlu
Sadece 1 adres true olabilir.
Values : true/false
addresses.\*.countrystringÜlke
addresses mevcut ise zorunlu.
addresses.\*.citystringŞehir
addresses mevcut ise zorunlu.
addresses.\*.districtstringİlçe
addresses mevcut ise zorunlu.
addresses.\*.addressstringAdres
addresses mevcut ise zorunlu.
addresses.\*.post_codeintegerPosta Kodu
addresses mevcut ise zorunlu.
addresses.\*.invoice_typestringFatura Tipi
addresses mevcut ise zorunlu.
Values : individual/institutional
individual : Bireysel Fatura
institutional : Kurumsal Fatura
addresses.\*.company_namestringŞirket Ünvanı
addresses.\*.tax_officestringVergi Dairesi
addresses.\*.tax_numberstringVergi Numarası
addresses.\*.tcintegerTc Kimlik

Example Request (JSON)

{
    "status": "inactive",
    "name": "Yeni Ad"
}

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Customer updated successfully.",
        "customer_id": 49
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "status": "active"
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/customers' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "status": "active"
}'

DELETEMüşteri Sil

{{base_url}}/customers?id=51
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem, bir müşteriye ait tüm bilgilerin, adreslerin ve yorumların silinmesini sağlar.

Aşağıdaki parametrelerden en az birini kullanarak müşteri silme işlemini gerçekleştirebilirsiniz.

Query Parameters

FieldTypeDescripton
idintegerMüşteri ID
customer_codestringMüşteri/Cari Kodu
emailstringE-Posta
phonestringTelefon

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Customer deleted successfully.",
        "deleted_ids": [41]
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/customers?id=51' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETCari Hareketler

{{base_url}}/customers/transactions?id=51
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Müşteriye ait bakiye ve hesap haraketlerini döndürür. Sorgu parametlerinden id,customer_code,email,phone alanlarından en az 1 tanesi zorunludur.

Query Parameters

FieldTypeDescripton
idintegerMüşteri ID
customer_codestringMüşteri/Cari Kodu
emailstringE-Posta
phonestringTelefon
typestringHesap hareket tipi
Values: entry/output
entry: tahsilat
output: borç
pageintegerSayfa Numarası
limitintegerLimit
Min: 1 Max: 500 arası değerler alır
sortstringSıralanacak Alan
Values: id/amount/ process_time
orderstringSıralama Tipi
Values : asc/desc

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/customers/transactions?id=51' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTCari Hareket Ekle

{{base_url}}/customers/transactions
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem, müşterinin cari hesabına borç (output) veya tahsilat (entry) yönünde bir hareket eklemek için kullanılır.

Her hareket; işlem tipi, tutar, açıklama içerir. Doğru veri formatı ile gönderildiğinde sistem ilgili müşterinin cari bakiyesini otomatik olarak günceller.

Sorgu parametlerinden id, customer_code, email, phone alanlarından en az 1 tanesi zorunludur.

Query Parameters

FieldTypeDescripton
idintegerMüşteri ID
customer_codestringMüşteri/Cari Kodu
emailstringE-Posta
phonestringTelefon

Body (JSON)

FieldTypeRules
typestringRequired; entry (tahsilat) veya output (borç)
amountdecimalRequired; 0'dan büyük ondalıklı sayı
descriptionstringRequired; Max 500 karakter

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Account transaction has been added successfully.",
        "transaction_id": 14,
        "customer_id": 39,
        "amount": "150020",
        "type": "output",
        "process_time": 1763042530,
            "process_time_local": "13.01.2026 12:42:10"
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "type": "entry",
  "amount": 3300,
  "description": "Sipariş Tutarı"
}
İstek örneği
curl --request POST 'https://www.example.com/api/ecommerce/v1/customers/transactions' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "type": "entry",
  "amount": 3300,
  "description": "Sipariş Tutarı"
}'

DELETECari Hareket Sil

{{base_url}}/customers/transactions/:action_id?id=51
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem, bir müşteriye ait hatalı veya iptal edilmesi gereken bir cari hareket kaydını sistemden kaldırmak için kullanılır.

Hareket silindiğinde müşterinin cari bakiyesi otomatik olarak yeniden hesaplanır.

Sorgu parametlerinden id, customer_code, email, phone alanlarından en az 1 tanesi zorunludur.

Kayıt bulunamazsa 404 not_found döner.

Query Parameters

FieldTypeDescripton
idintegerMüşteri ID
customer_codestringMüşteri/Cari Kodu
emailstringE-Posta
phonestringTelefon

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Account transaction has been successfully deleted."
    }
}

Rate limit: 120 istek/dakika

Yol değişkenleri

ParametreÖrnek değerAçıklama
action_id4Silinecek cari hareket kaydı ID'si
İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/customers/transactions/4?id=51' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Bayi Grupları

5 uç nokta

Dealer gruplarını (bayi gruplarını) listeler, detaylarını döndürür; ekleme, güncelleme ve silme işlemlerini yapar.

GETBayi Grupları Listesi

{{base_url}}/dealers
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringGrup adında arama; Max 100 karakter
statusstringDurum filtresi; Values: active / inactive
sortstringSıralanacak alan; Values: id / name
orderstringSıralama yönü; Values: asc / desc
pageintegerSayfa numarası; Min: 1
limitintegerSayfa limiti; Min: 1 Max: 500

Response (200 OK)

discount_scenario.discount_rate okunurken ana ve ek indirimin bileşik toplam oranıdır (ör. %15 + %5 → 19.25).

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/dealers' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETBayi Grubu Detayı

{{base_url}}/dealers/detail?id=2
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id query parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredBayi Grubu ID

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/dealers/detail?id=2' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTBayi Grubu Ekle

{{base_url}}/dealers
Bearer token gerekirContent-Type: application/json

name ve discount_scenario alanları zorunludur. discount_scenario.type zorunludur.

type değeri fixed_rate_on_all_products ise discount_rate zorunludur; extra_discount_rate opsiyoneldir (bileşik indirim).

type değeri dealer_special_price ise price_type_id kullanılır.

Body (JSON)

FieldTypeRules
namestring - requiredGrup adı; Max 255 karakter
statusstringDurum; Values: active / inactive (varsayılan: active)
is_defaultbooleanVarsayılan bayi grubu; true / false (varsayılan: false)
minimum_order_amountdecimalMinimum sipariş tutarı; Min 0
installment_limitintegerTaksit limiti; Min 0
payment_type_restrictionsarrayKısıtlanacak ödeme tipi ID listesi
discount_scenarioobject - requiredİndirim senaryosu
discount_scenario.typestring - requiredİndirim tipi; Values: fixed_rate_on_all_products / dealer_special_price
discount_scenario.discount_ratedecimalAna indirim oranı (%); Min 0 Max 100 — type=fixed_rate_on_all_products ise zorunlu
discount_scenario.extra_discount_ratedecimalEk indirim oranı (%); Min 0 Max 100 — opsiyonel; bileşik hesap: 1-(1-r1/100)*(1-r2/100)
discount_scenario.price_type_idintegerFiyat tipi ID; ny_product_price_types.id — type=dealer_special_price ise kullanılır

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Dealer group created successfully.",
        "id": 5
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "name": "Altın Bayi",
  "status": "active",
  "is_default": false,
  "minimum_order_amount": 500,
  "installment_limit": 6,
  "payment_type_restrictions": [
    2,
    3
  ],
  "discount_scenario": {
    "type": "fixed_rate_on_all_products",
    "discount_rate": 15,
    "extra_discount_rate": 5
  }
}
İstek örneği
curl --request POST 'https://www.example.com/api/ecommerce/v1/dealers' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "name": "Altın Bayi",
  "status": "active",
  "is_default": false,
  "minimum_order_amount": 500,
  "installment_limit": 6,
  "payment_type_restrictions": [
    2,
    3
  ],
  "discount_scenario": {
    "type": "fixed_rate_on_all_products",
    "discount_rate": 15,
    "extra_discount_rate": 5
  }
}'

PATCHBayi Grubu Düzenle

{{base_url}}/dealers?id=5
Bearer token gerekirContent-Type: application/json

id query parametresi zorunludur. Body'de yalnızca güncellenmek istenen alanlar gönderilir.

discount_scenario gönderilirse discount_scenario.type zorunludur. type değeri fixed_rate_on_all_products ise discount_rate de zorunludur. Yalnız discount_rate gönderilirse ek indirim 0 sayılır; ek indirimi korumak için extra_discount_rate'i de birlikte gönderin.

Query Parameters

FieldTypeDescription
idinteger - requiredBayi Grubu ID

Body (JSON)

FieldTypeRules
namestringGrup adı; Max 255 karakter
statusstringDurum; Values: active / inactive
is_defaultbooleanVarsayılan bayi grubu; true / false
minimum_order_amountdecimalMinimum sipariş tutarı; Min 0
installment_limitintegerTaksit limiti; Min 0
payment_type_restrictionsarrayKısıtlanacak ödeme tipi ID listesi
discount_scenarioobjectİndirim senaryosu
discount_scenario.typestringİndirim tipi; Values: fixed_rate_on_all_products / dealer_special_price
discount_scenario.discount_ratedecimalAna indirim oranı (%); Min 0 Max 100 — type=fixed_rate_on_all_products ise zorunlu
discount_scenario.extra_discount_ratedecimalEk indirim oranı (%); Min 0 Max 100 — opsiyonel
discount_scenario.price_type_idintegerFiyat tipi ID; ny_product_price_types.id

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Dealer group updated successfully.",
        "id": 5
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "name": "Platin Bayi",
  "status": "active",
  "discount_scenario": {
    "type": "fixed_rate_on_all_products",
    "discount_rate": 20,
    "extra_discount_rate": 3
  }
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/dealers?id=5' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "name": "Platin Bayi",
  "status": "active",
  "discount_scenario": {
    "type": "fixed_rate_on_all_products",
    "discount_rate": 20,
    "extra_discount_rate": 3
  }
}'

DELETEBayi Grubu Sil

{{base_url}}/dealers?id=5
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id query parametresi zorunludur.

Gruba bağlı müşteri varsa silme işlemi engellenir; müşteriler önce farklı bir gruba atanmalıdır.

Query Parameters

FieldTypeDescription
idinteger - requiredBayi Grubu ID

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Dealer group deleted successfully.",
        "id": 5
    }
}

Error — Bağlı Müşteri Var (422)

{
    "status": false,
    "error": "has_customers",
    "message": "This dealer group has 3 assigned customer(s). Reassign them before deleting."
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/dealers?id=5' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Ürünler

6 uç nokta

Ürün listeleme, detay, oluşturma, güncelleme, toplu güncelleme ve silme işlemleri. Çoklu dil desteği languages[] dizisi ile sağlanır. Görsel yükleme URL tabanlıdır (ImageManager). showcase, cargo, visibility alanları nesne olarak gruplandırılmıştır.

GETÜrünleri Listele

{{base_url}}/products?page=1&limit=20&lang_id=1&status=active&category_id=&brand_id=&search=
Bearer token gerekir

Ürünleri sayfalı olarak listeler. Belirtilen dil için ad ve URL bilgisi döner.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
page1Sayfa numarası (varsayılan: 1)
limit20Sayfa başına kayıt sayısı (varsayılan: 100, en fazla 500)
lang_id1Dil ID (varsayılan: 1 = TR)
statusactiveDurum filtresi: active | inactive
category_id—Kategori ID'sine göre filtrele
brand_id—Marka ID'sine göre filtrele
search—Ürün adı, kodu veya barkoduna göre arama; Max 100
in_stock—Stok filtresi: yes (stokta olanlar) | no (stokta olmayanlar)
sortidSıralama alanı: id | name | price | stock | created_at (varsayılan: id)
orderdescSıralama yönü: asc | desc (varsayılan: desc)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/products?page=1&limit=20&lang_id=1&status=active&category_id=&brand_id=&search=' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt

GETÜrün Detayı

{{base_url}}/products/detail?id=1&lang_id=1
Bearer token gerekir

Belirtilen ürünün tüm alanlarını, dil çevirilerini, görselleri, varyantları, özellikleri ve ilişkili ürünleri döner.

  • Lansman tarihi üst düzeydeki delivery_date alanında döner (yazarken cargo.delivery_date kullanılır).
  • customizations: ürüne atanmış özelleştirme alanları; yazarken grup ID dizisi gönderilir.
  • store_code mağaza (model) kodudur; yazarken model_code alanı kullanılır.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
id1Ürün ID — id veya code parametrelerinden en az biri zorunludur
code—Ürün kodu (alternatif olarak id yerine kullanılabilir)
lang_id1Dil ID (varsayılan: 1 = TR)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/products/detail?id=1&lang_id=1' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt

POSTÜrün Oluştur

{{base_url}}/products
Bearer token gerekirContent-Type: application/json

Yeni ürün oluşturur.

Zorunlu alanlar:

  • languages[] — tüm aktif diller için gönderilmeli (allActiveLangs); her dilde name zorunlu
  • code — benzersiz ürün kodu
  • price — ürün fiyatı
  • status — ürün durumu (active / inactive)
  • stock — stok adedi

Önemli notlar:

  • languages[] dizisi aktif tüm dilleri içermeli; eksik dil varsa validasyon hatası döner
  • old_price: indirimli fiyat gösterimi için eski/önceki fiyat (yoksa 0 gönderin)
  • tax: KDV oranı (gönderilmezse 0)
  • installment: taksit sayısı; 1–12 arası
  • model_code: mağaza (model) kodu; ean, barcode: barkod bilgileri. store_code ve mpn bu uçtan yazılamaz
  • brand_ids[]: birden fazla marka atanabilir
  • image: kapak görselinin URL'i; images[].image: ek görsellerin URL'leri. Sistem görselleri bu adreslerden indirir
  • permalink boş gönderilirse name alanından otomatik oluşturulur
  • cargo, showcase, visibility nesne olarak gönderilmeli
  • customizations[]: özelleştirme grubu ID dizisi
  • cargo.delivery_date: lansman tarihi (YYYY-AA-GG)
  • variants.values[]: her kombinasyon specs[] ile option_ids sırasıyla eşleşen option_id + option_value_id çiftlerini, stok adedini quantity ile taşır; model varyant kodudur ve mağaza genelinde benzersiz olmalıdır. Varyantlı ürünün stoğu varyant adetlerinin toplamı olur

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği
Örnek yanıtlar
201 CreatedBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Product created successfully.",
    "product_id": 42
  }
}
422 Unprocessable EntityValidasyon Hatası
{
  "status": false,
  "error": "validation_error",
  "message": {
    "code": "Bu ürün kodu zaten kullanılıyor.",
    "languages.0.name": "Ürün adı zorunludur."
  }
}

PATCHÜrün Güncelle

{{base_url}}/products?id=42
Bearer token gerekirContent-Type: application/json

Mevcut ürünü günceller. Sadece gönderilen alanlar güncellenir.

  • Gövdede languages dizisi bulunmalıdır; ürün metinlerini değiştirmeyecekseniz [{"lang_id": 1}] gönderin.
  • permalink gönderilirse ürünün adresi değişir; adresi değiştirmeyecekseniz permalink göndermeyin.

TAM DEĞIŞTIRME (full replacement) davranışı — dikkat:

  • brand_ids[] gönderilirse tüm marka ilişkileri silinip yeniden yazılır
  • category_ids[] gönderilirse tüm kategori ilişkileri silinip yeniden yazılır
  • catalog_ids[] gönderilirse tüm katalog ilişkileri silinip yeniden yazılır
  • related_ids[] gönderilirse tüm ilişkili ürünler silinip yeniden yazılır
  • compatible_ids[] gönderilirse tüm uyumlu ürünler silinip yeniden yazılır
  • images[] gönderilirse eski görseller diskten silinir ve yenileri indirilir
  • variants{} gönderilirse (option_ids dolu iken) tüm varyantlar silinip gönderilen kombinasyonlar yeniden yazılır; values[] ürünün bütün kombinasyonlarını Ürün Oluştur'daki specs yapısıyla içermelidir
  • attributes[] gönderilirse tüm özellik değerleri silinip yeniden yazılır
  • customizations[] gönderilirse tüm özelleştirme atamaları silinip yeniden yazılır

Boş dizi göndermek ([]) ilgili tüm ilişkileri siler (varyantlar hariç).

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
id42Güncellenecek ürün ID — id veya code parametrelerinden en az biri zorunludur
code—Ürün kodu (alternatif olarak id yerine kullanılabilir)

İstek gövdesi

İstek örneği
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Product updated successfully.",
    "product_id": 42
  }
}

PATCHToplu Ürün Güncelle

{{base_url}}/products/bulk
Bearer token gerekirContent-Type: application/json

Birden fazla ürünü tek istekle günceller.

  • Tek istekte en fazla 50 ürün gönderilebilir
  • id veya code ile ürün belirlenir (ikisi de verilirse id önceliklidir)
  • Yalnızca skaler ve nesne alanlar güncellenebilir
  • languages[], images[], variants{}, attributes[], *_ids[] ilişki dizileri desteklenmez — bunlar için tekil PATCH /products?id= kullanın

Yanıtta:

  • updated_ids[]: başarıyla güncellenen ürün ID'leri
  • skipped[]: bulunamayan veya güncellenecek alanı olmayan ürünlerin id ya da code değerleri

Rate limit: 60 istek/dakika

İstek gövdesi

{
  "products": [
    {
      "id": 42,
      "price": 199.9,
      "stock": 50,
      "status": "active"
    },
    {
      "code": "PRD-002",
      "price": 249.9,
      "stock": 30,
      "status": "inactive"
    },
    {
      "id": 45,
      "old_price": 300,
      "showcase": {
        "is_featured": true,
        "has_discount": true,
        "new_ticket": false
      }
    }
  ]
}
İstek örneği
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Bulk update completed.",
    "updated_ids": [
      42,
      45
    ],
    "updated_count": 2,
    "skipped": [
      "PRD-002"
    ]
  }
}

DELETEÜrün Sil

{{base_url}}/products?ids=42,43,44&codes=
Bearer token gerekir

Belirtilen ürünleri siler.

  • ids: ürün ID'leri, virgülle ayrılmış (örn: 42,43)
  • codes: ürün kodları, virgülle ayrılmış (örn: PRD-001,PRD-002)
  • ids ve codes birlikte kullanılabilir
  • Silme işlemi ürünün adres kayıtlarını, görsel dosyalarını, varyantları ve ilişkili kayıtları da temizler; aynı adrese tanımlı yönlendirmeler korunur

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
ids42,43,44Silinecek ürün ID'leri (virgülle ayrılmış, max 50)
codes—Silinecek ürün kodları (virgülle ayrılmış)
İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/products?ids=42,43,44&codes=' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Products deleted successfully.",
    "deleted_ids": [
      42,
      43,
      44
    ],
    "count": 3
  }
}

Varyantlar

5 uç nokta

Varyant tipleri (Renk, Beden vb.) ve değerlerini yönetir. filter_status / image_status alanları her zaman "active" veya "inactive" string olarak gönderilir ve döner. values[] PATCH'te tam değiştirme değildir — option_value_id verilirse güncelleme, verilmezse yeni değer eklenir.

GETVaryantlar Listesi

{{base_url}}/variants?search=&lang_id=1&sort=id&order=asc&page=1&limit=100
Bearer token gerekir

Varyant tiplerini sayfalı olarak listeler. Her kayıtta o varyanta ait değer sayısı (value_count) döner.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
search—Varyant adına göre arama (LIKE)
lang_id1Dil ID (varsayılan: 1 = TR)
sortidSıralama alanı: id | name | sort
orderascSıralama yönü: asc | desc
page1Sayfa numarası (varsayılan: 1)
limit100Sayfa başına kayıt (1–500, varsayılan: 100)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/variants?search=&lang_id=1&sort=id&order=asc&page=1&limit=100' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "total": 5,
    "page": 1,
    "limit": 100,
    "items": [
      {
        "option_id": "1",
        "name": "Renk",
        "type": "select",
        "sort_order": "0",
        "filter_status": "active",
        "image_status": "active",
        "value_count": "8"
      }
    ]
  }
}

GETVaryant Detayı

{{base_url}}/variants/detail?id=1&lang_id=1
Bearer token gerekir

Belirtilen varyant tipinin bilgilerini ve tüm değerlerini döner. values[].image tam URL olarak döner.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
id1Varyant ID (zorunlu)
lang_id1Dil ID (varsayılan: 1 = TR)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/variants/detail?id=1&lang_id=1' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıtlar
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "option_id": "1",
    "name": "Renk",
    "type": "select",
    "sort_order": "0",
    "filter_status": "active",
    "image_status": "active",
    "values": [
      {
        "option_value_id": "5",
        "name": "Kırmızı",
        "image": "https://example.com/uploads/options/kirmizi.png",
        "sort_order": "0"
      },
      {
        "option_value_id": "6",
        "name": "Mavi",
        "image": "",
        "sort_order": "1"
      }
    ]
  }
}
404 Not FoundHata — Bulunamadı
{
  "status": false,
  "error": "not_found",
  "message": "Variant not found."
}

POSTVaryant Ekle

{{base_url}}/variants
Bearer token gerekirContent-Type: application/json

Yeni varyant tipi ve isteğe bağlı başlangıç değerleri oluşturur.

  • languages[] tüm aktif diller için zorunludur (allActiveLangs)
  • filter_status / image_status: "active" veya "inactive" (varsayılan: "inactive")
  • values[].image: https veya http URL olmalıdır (max 2048 karakter); sistem görseli indirir (ImageManager). Görsel gönderilmeyecekse alanı boş bırakın
  • Tüm DB yazımları (varyant + dil tanımları + değerler) tek transaction içinde gerçekleşir; görsel indirme işlemi transaction başlamadan önce yapılır, herhangi bir hata durumunda indirilen dosyalar otomatik olarak silinir

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Variant created successfully.",
    "option_id": 12
  }
}

PATCHVaryant Güncelle

{{base_url}}/variants?id=1
Bearer token gerekirContent-Type: application/json

Mevcut varyant tipini günceller. Sadece gönderilen alanlar işlenir. Gövdede languages dizisi bulunmalıdır; gönderilen dil öğelerinde mevcut adları da gönderin.

values[] davranışı (tam değiştirme DEĞİL):

  • option_value_id verilirse: o değer güncellenir (sort, image, languages — sadece gönderilenler)
  • option_value_id verilmezse: yeni değer eklenir
  • Değer silmek için bu endpoint kullanılmaz; silinecek değerler bu diziden çıkarılsa bile silinmez

values[].image: https veya http URL olmalıdır (max 2048 karakter). URL gönderilirse yeni görsel indirilir; eski görsel silinir

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
id1Güncellenecek varyant ID (zorunlu)

İstek gövdesi

İstek örneği
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Variant updated successfully.",
    "option_id": 1
  }
}

DELETEVaryant Sil

{{base_url}}/variants?ids=1,2
Bearer token gerekir

Belirtilen varyant tiplerini ve bağlı tüm değerlerini siler.

  • ids: silinecek varyant ID'leri, virgülle ayrılmış (örn: 1,2,3)
  • Tek istekte en fazla 50 ID gönderilebilir
  • Bulunamayan ID'ler sessizce atlanır; en az bir geçerli ID olmalıdır

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
ids1,2Silinecek varyant ID'leri, virgülle ayrılmış (zorunlu)
İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/variants?ids=1,2' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Variants deleted successfully.",
    "deleted_ids": [
      1,
      2
    ],
    "count": 2
  }
}

Özellik Grupları

5 uç nokta

Ürün özellik gruplarına (Renk, Materyal vb.) ve özellik değerlerine ait işlemler. Her grup; özellikler (attributes) ve değerlerden (values) oluşur.

GETÖzellik Grubu Listesi

{{base_url}}/attributes
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringGrup adında arama; Max 100 karakter
statusstringDurum filtresi; Values: active / inactive
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)
sortstringSıralanacak Alan; Values: id / name / sort / status
orderstringSıralama Yönü; Values: asc / desc
pageintegerSayfa Numarası; Min: 1
limitintegerLimit; Min: 1 Max: 500

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/attributes' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETÖzellik Grubu Detayı

{{base_url}}/attributes/detail?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredÖzellik Grubu ID
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/attributes/detail?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTÖzellik Grubu Ekle

{{base_url}}/attributes
Bearer token gerekirContent-Type: application/json

languages alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.

Body (JSON)

FieldTypeRules
languagesarray - requiredGrup adları; tüm aktif diller için gönderilmeli (allActiveLangs)
languages.*.lang_idinteger - requiredDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ
languages.*.namestring - requiredGrup adı; Max 255 karakter
statusstringDurum; Values: active / inactive (varsayılan: active)
filter_statusstringFiltre durumu; Values: active / inactive (varsayılan: inactive)
sortintegerSıralama; Min: 0 (varsayılan: 0)
attributesarrayÖzellikler listesi; Max: 50 özellik
attributes.*.sortintegerÖzellik sıralaması; Min: 0 (varsayılan: 0)
attributes.*.statusstringÖzellik durumu; Values: active / inactive (varsayılan: inactive)
attributes.*.show_typeintegerGösterim tipi; Values: 0 (Görsel) / 1 (Metin) / 2 (Görsel ve Metin) (varsayılan: 0)
attributes.*.languagesarrayÖzelliğe ait dil verileri; tüm aktif diller gönderilmeli
attributes..languages..lang_idintegerDil ID
attributes..languages..namestringÖzellik adı; Max 255 karakter
attributes.*.valuesarrayÖzelliğe ait değerler; Max: 200 değer
attributes..values..sortintegerDeğer sıralaması; Min: 0
attributes..values..statusstringDeğer durumu; Values: active / inactive
attributes..values..languagesarrayDeğere ait dil verileri; tüm aktif diller gönderilmeli
attributes..values..languages.*.lang_idintegerDil ID
attributes..values..languages.*.namestringDeğer adı; Max 255 karakter
attributes..values..languages.*.imagestringDile özgü görsel URL'i (opsiyonel); indirilip kaydedilir

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Attribute group created successfully.",
        "group_id": 3
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

PATCHÖzellik Grubu Düzenle

{{base_url}}/attributes?id=1
Bearer token gerekirContent-Type: application/json

Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.

Bir özelliği ya da değeri eklerken veya güncellerken languages dizisini tüm aktif dillerle gönderin; gönderilmeyen dillerin adları silinir. Özellik ve değerlerin sort, status, show_type alanları da yalnız aynı öğede languages gönderildiğinde işlenir.

attributes: [] (boş dizi) gönderilirse gruba ait tüm özellikler silinir. attributes alanı gönderilmezse mevcut özellikler korunur.

attributes içinde attribute_id varsa mevcut özellik güncellenir; yoksa yeni özellik eklenir. attribute_id gönderilmeyen mevcut özellikler silinmez.

values key gönderilmezse o özelliğin değerleri korunur. values: [] gönderilirse o özelliğin tüm değerleri silinir.

values içinde attribute_value_id varsa mevcut değer güncellenir; yoksa yeni değer eklenir.

id query parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredÖzellik Grubu ID

Body (JSON)

FieldTypeRules
languagesarrayGrup adları; gönderilen diller upsert edilir
languages.*.lang_idintegerDil ID
languages.*.namestringGrup adı; Max 255 karakter
statusstringDurum; Values: active / inactive
filter_statusstringFiltre durumu; Values: active / inactive
sortintegerSıralama; Min: 0
attributesarrayÖzellikler; boş dizi → tümünü sil; Max: 50 özellik
attributes.*.attribute_idintegerMevcut özellik ID; varsa günceller, yoksa yeni ekler
attributes.*.sortintegerÖzellik sıralaması; Min: 0
attributes.*.statusstringÖzellik durumu; Values: active / inactive
attributes.*.show_typeintegerGösterim tipi; Values: 0 (Görsel) / 1 (Metin) / 2 (Görsel ve Metin)
attributes.*.languagesarrayÖzelliğe ait dil verileri
attributes..languages..lang_idintegerDil ID
attributes..languages..namestringÖzellik adı; Max 255 karakter
attributes.*.valuesarrayDeğerler; key yoksa dokunulmaz, boş dizi → tümünü sil; Max: 200 değer
attributes..values..attribute_value_idintegerMevcut değer ID; varsa günceller, yoksa yeni ekler
attributes..values..sortintegerDeğer sıralaması; Min: 0
attributes..values..statusstringDeğer durumu; Values: active / inactive
attributes..values..languagesarrayDeğere ait dil verileri
attributes..values..languages.*.lang_idintegerDil ID
attributes..values..languages.*.namestringDeğer adı; Max 255 karakter
attributes..values..languages.*.imagestringDile özgü görsel URL'i (opsiyonel); yeni URL gelirse indirilip güncellenir, gelmezse mevcut korunur

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Attribute group updated successfully.",
        "group_id": 1
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

DELETEÖzellik Grubu Sil

{{base_url}}/attributes?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem; grubu, tüm özelliklerini, tüm değerlerini ve dil kayıtlarını kalıcı olarak siler. Geri alınamaz.

Birden fazla grup aynı anda silinebilir.

Query Parameters

FieldTypeDescription
idstring - requiredSilinecek özellik grubu ID'leri; virgülle ayrılmış. Örn: 1,2,3

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Attribute group deleted successfully.",
        "deleted_ids": [1]
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/attributes?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Markalar

5 uç nokta

Ürün markalarına ait işlemler. Her marka; çok dilli ad, açıklama, SEO ve yetkili satıcı belgesi (auth_doc) bilgilerini içerir.

GETMarka Listesi

{{base_url}}/brands
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringMarka adı veya URL'de arama; Max 100 karakter
statusstringDurum filtresi; Values: active / inactive
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)
sortstringSıralanacak Alan; Values: id / name / order / status
orderstringSıralama Yönü; Values: asc / desc
pageintegerSayfa Numarası; Min: 1
limitintegerLimit; Min: 1 Max: 500

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/brands' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETMarka Detayı

{{base_url}}/brands/detail?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredMarka ID
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/brands/detail?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTMarka Ekle

{{base_url}}/brands
Bearer token gerekirContent-Type: application/json

languages alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.

permalink gönderilmezse name alanından otomatik oluşturulur. Aynı permalink sistemde varsa otomatik suffix eklenir (örn. nike-1).

image olarak geçerli bir URL gönderilirse görsel indirilip sunucuya kaydedilir.

Body (JSON)

FieldTypeRules
languagesarray - requiredDil verileri; tüm aktif diller için gönderilmeli (allActiveLangs)
languages.*.lang_idinteger - requiredDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ
languages.*.namestring - requiredMarka adı; Min 1 Max 255 karakter
languages.*.descriptionstringMarka açıklaması; HTML içerik kabul edilir; Max 100000 karakter
languages.*.permalinkstringSEO URL; Max 255 karakter; boş bırakılırsa name'den otomatik üretilir
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
languages.*.auth_doc_substringYetkili satıcı belgesi alt başlık; Max 255 karakter
languages.*.auth_doc_mainstringYetkili satıcı belgesi ana başlık; Max 255 karakter
languages.*.auth_doc_descstringYetkili satıcı belgesi açıklaması; HTML içerik kabul edilir; Max 100000 karakter
statusstringDurum; Values: active / inactive (varsayılan: active)
filter_statusstringFiltre durumu; Values: active / inactive (varsayılan: inactive)
auth_doc_statusstringYetkili satıcı belgesi durumu; Values: active / inactive (varsayılan: inactive)
image_statusstringGörsel durumu; Values: active / inactive (varsayılan: inactive)
orderintegerSıralama; Min 0 Max 99999 (varsayılan: 0)
imagestringMarka görseli URL'i; geçerli URL olmalı; indirilip kaydedilir

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Brand created successfully.",
        "brand_id": 3
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

PATCHMarka Düzenle

{{base_url}}/brands?id=1
Bearer token gerekirContent-Type: application/json

Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.

languages içinde yalnızca gönderilen diller güncellenir (upsert). Gönderilmeyen dil kayıtları silinmez.

permalink bu endpoint üzerinden güncellenebilir; eski adres kaldırılır. Adresi değiştirmeyecekseniz permalink göndermeyin.

id query parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredMarka ID

Body (JSON)

FieldTypeRules
languagesarrayDil verileri; gönderilen diller upsert edilir; Max 20 giriş
languages.*.lang_idinteger - requiredDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ
languages.*.namestringMarka adı; Min 1 Max 255 karakter
languages.*.descriptionstringMarka açıklaması; HTML içerik kabul edilir; Max 100000 karakter
languages.*.permalinkstringSEO URL; Max 255 karakter; adresi değiştirmeyecekseniz göndermeyin
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
languages.*.doc_substringYetkili satıcı belgesi alt başlık; Max 255 karakter
languages.*.doc_mainstringYetkili satıcı belgesi ana başlık; Max 255 karakter
languages.*.doc_descstringYetkili satıcı belgesi açıklaması; HTML içerik kabul edilir; Max 100000 karakter
statusstringDurum; Values: active / inactive
filter_statusstringFiltre durumu; Values: active / inactive
doc_statusstringYetkili satıcı belgesi durumu; Values: active / inactive
image_statusstringGörsel durumu; Values: active / inactive
orderintegerSıralama; Min 0 Max 99999
imagestringMarka görseli URL'i; yeni URL gelirse indirilip güncellenir

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Brand updated successfully.",
        "brand_id": 1
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "languages": [
    {
      "lang_id": 1,
      "name": "Nike (Güncel)",
      "meta_title": "Nike - Yeni Sezon"
    },
    {
      "lang_id": 2,
      "name": "Nike (Updated)",
      "meta_title": "Nike - New Season"
    }
  ],
  "status": "active",
  "filter_status": "active",
  "order": 1,
  "image": "https://example.com/nike-logo-new.png"
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/brands?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "languages": [
    {
      "lang_id": 1,
      "name": "Nike (Güncel)",
      "meta_title": "Nike - Yeni Sezon"
    },
    {
      "lang_id": 2,
      "name": "Nike (Updated)",
      "meta_title": "Nike - New Season"
    }
  ],
  "status": "active",
  "filter_status": "active",
  "order": 1,
  "image": "https://example.com/nike-logo-new.png"
}'

DELETEMarka Sil

{{base_url}}/brands?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem; markayı, tüm dil kayıtlarını, görselini ve route (SEO URL) kayıtlarını kalıcı olarak siler. Geri alınamaz.

Birden fazla marka aynı anda silinebilir.

Query Parameters

FieldTypeDescription
idstring - requiredSilinecek marka ID'leri; virgülle ayrılmış. Örn: 1,2,3

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Brand deleted successfully.",
        "deleted_ids": [1]
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/brands?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Kataloglar

5 uç nokta

Ürün kataloglarına ait işlemler. Her katalog; çok dilli ad, açıklama, SEO bilgileri ve kataloğa bağlı ürün listesini içerir.

GETKatalog Listesi

{{base_url}}/catalogs
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringKatalog adı veya URL'de arama; Max 200 karakter
statusstringDurum filtresi; Values: active / inactive
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1); yalnızca aktif diller kabul edilir
sortstringSıralanacak Alan; Values: id / name / sort / status
orderstringSıralama Yönü; Values: asc / desc
pageintegerSayfa Numarası; Min: 1
limitintegerLimit; Min: 1 Max: 500

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/catalogs' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETKatalog Detayı

{{base_url}}/catalogs/detail?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredKatalog ID
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/catalogs/detail?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTKatalog Ekle

{{base_url}}/catalogs
Bearer token gerekirContent-Type: application/json

languages alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.

permalink gönderilmezse name alanından otomatik oluşturulur. Aynı permalink sistemde varsa otomatik suffix eklenir (örn. yaz-koleksiyonu-1).

image olarak geçerli bir URL gönderilirse görsel indirilip sunucuya kaydedilir.

Body (JSON)

FieldTypeRules
languagesarray - requiredDil verileri; tüm aktif diller için gönderilmeli (allActiveLangs)
languages.*.lang_idinteger - requiredDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir
languages.*.namestring - requiredKatalog adı; Min 1 Max 255 karakter
languages.*.descriptionstringKatalog açıklaması; HTML içerik kabul edilir; Max 100000 karakter
languages.*.permalinkstringSEO URL; Max 255 karakter; boş bırakılırsa name'den otomatik üretilir
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
statusstringDurum; Values: active / inactive (varsayılan: active)
sortintegerSıralama; Min: 0 Max: 99999 (varsayılan: 0)
imagestringKatalog görseli URL'i; geçerli URL olmalı; indirilip kaydedilir
productsarrayKataloğa eklenecek ürünler; Max 500 ürün
products.*.product_idintegerÜrün ID; Min: 1
products.*.sort_orderintegerKatalog içi sıralama; Min: 0

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Catalog created successfully.",
        "catalog_id": 3
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

PATCHKatalog Düzenle

{{base_url}}/catalogs?id=1
Bearer token gerekirContent-Type: application/json

Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.

languages içinde yalnızca gönderilen diller güncellenir (upsert). Gönderilmeyen dil kayıtları silinmez.

products gönderilirse katalogdaki tüm mevcut ürünler silinir ve yerine gönderilen liste yazılır. Ürün listesini korumak istiyorsanız bu alanı body'e dahil etmeyin.

id query parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredKatalog ID

Body (JSON)

FieldTypeRules
languagesarrayDil verileri; gönderilen diller upsert edilir; Max 20 dil
languages.*.lang_idinteger - requiredDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir
languages.*.namestringKatalog adı; Min 1 Max 255 karakter
languages.*.descriptionstringKatalog açıklaması; HTML içerik kabul edilir; Max 100000 karakter
languages.*.permalinkstringSEO URL; Max 255 karakter; adresi değiştirmeyecekseniz göndermeyin
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
statusstringDurum; Values: active / inactive
sortintegerSıralama; Min: 0 Max: 99999
imagestringKatalog görseli URL'i; yeni URL gelirse indirilip güncellenir; eski görsel commit sonrası silinir
productsarrayKatalog ürün listesi; gönderilirse mevcut liste tamamen değiştirilir; Max 500 ürün
products.*.product_idintegerÜrün ID; Min: 1
products.*.sort_orderintegerKatalog içi sıralama; Min: 0

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Catalog updated successfully.",
        "catalog_id": 1
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

DELETEKatalog Sil

{{base_url}}/catalogs?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem; kataloğu, tüm dil kayıtlarını, görselini, route (SEO URL) kayıtlarını ve ürün bağlantılarını kalıcı olarak siler. Geri alınamaz.

Birden fazla katalog aynı anda silinebilir. Tek seferde maksimum 50 ID.

Query Parameters

FieldTypeDescription
idstring - requiredSilinecek katalog ID'leri; virgülle ayrılmış. Örn: 1,2,3

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Catalog deleted successfully.",
        "deleted_ids": [1]
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/catalogs?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Kategoriler

5 uç nokta

Ürün kategorilerine ait işlemler. Kategoriler hiyerarşik yapıdadır; parent_id ile üst kategori atanır. Her kategori; çok dilli ad, açıklama, SEO bilgileri, fırsat ürünleri ve Google kategori eşlemesi içerebilir.

GETKategori Listesi

{{base_url}}/categories
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringKategori adı veya URL'de arama; Max 200 karakter
statusstringDurum filtresi; Values: active / inactive
parent_idintegerÜst kategori ID filtresi; 0 göndererek sadece ana kategoriler listelenebilir
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1); yalnızca aktif diller kabul edilir
sortstringSıralanacak Alan; Values: id / name / order
orderstringSıralama Yönü; Values: asc / desc
pageintegerSayfa Numarası; Min: 1
limitintegerLimit; Min: 1 Max: 500

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/categories' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETKategori Detayı

{{base_url}}/categories/detail?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredKategori ID
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/categories/detail?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTKategori Ekle

{{base_url}}/categories
Bearer token gerekirContent-Type: application/json

languages alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.

permalink gönderilmezse name alanından otomatik oluşturulur. Aynı permalink sistemde varsa otomatik suffix eklenir.

parent_id gönderilmezse ana kategori olarak oluşturulur; ana kategori için alanı göndermeyin.

image olarak geçerli bir URL gönderilirse görsel indirilip sunucuya kaydedilir.

Body (JSON)

FieldTypeRules
languagesarray - requiredDil verileri; tüm aktif diller için gönderilmeli (allActiveLangs)
languages.*.lang_idinteger - requiredDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir
languages.*.namestring - requiredKategori adı; Min 1 Max 255 karakter
languages.*.descriptionstringKategori açıklaması; HTML içerik kabul edilir; Max 100000 karakter
languages.*.permalinkstringSEO URL; Max 255 karakter; boş bırakılırsa name'den otomatik üretilir
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
parent_idintegerÜst kategori ID; kayıtlı bir kategori olmalı. Gönderilmezse ana kategori olur
statusstringDurum; Values: active / inactive (varsayılan: active)
orderintegerSıralama; Min: 0 Max: 99999 (varsayılan: 0)
filter_statusstringFiltre durumu; Values: active / inactive (varsayılan: inactive)
installmentintegerTaksit sayısı; Values: 1–12 (varsayılan: 1; aralık dışı değer 1'e düşer)
google_categorystringGoogle kategori ID; Max 100 karakter
imagestringKategori görseli URL'i; geçerli URL olmalı; indirilip kaydedilir
opportunity_productsstringFırsat ürün ID'leri; virgülle ayrılmış tam sayılar; Max 1000 karakter. Örn: "42,57,88"

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Category created successfully.",
        "category_id": 3
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

PATCHKategori Düzenle

{{base_url}}/categories?id=2
Bearer token gerekirContent-Type: application/json

Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.

languages içinde yalnızca gönderilen diller güncellenir (upsert). Gönderilmeyen dil kayıtları silinmez.

opportunity_products boş string ("") gönderilirse fırsat ürünleri temizlenir. Alan hiç gönderilmezse mevcut liste korunur.

id query parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredKategori ID

Body (JSON)

FieldTypeRules
languagesarrayDil verileri; gönderilen diller upsert edilir; Max 20 dil
languages.*.lang_idinteger - requiredDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir
languages.*.namestringKategori adı; Min 1 Max 255 karakter
languages.*.descriptionstringKategori açıklaması; HTML içerik kabul edilir; Max 100000 karakter
languages.*.permalinkstringSEO URL; Max 255 karakter; adresi değiştirmeyecekseniz göndermeyin
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
parent_idintegerÜst kategori ID
statusstringDurum; Values: active / inactive
orderintegerSıralama; Min: 0 Max: 99999
filter_statusstringFiltre durumu; Values: active / inactive
installmentintegerTaksit sayısı; Values: 1–12 (aralık dışı değer 1'e düşer)
google_categorystringGoogle kategori ID; Max 100 karakter
imagestringKategori görseli URL'i; yeni URL gelirse indirilip güncellenir; eski görsel commit sonrası silinir
opportunity_productsstringFırsat ürün ID'leri; virgülle ayrılmış. Boş string göndererek temizlenebilir

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Category updated successfully.",
        "category_id": 2
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "languages": [
    {
      "lang_id": 1,
      "name": "Erkek Giyim (Güncel)",
      "meta_title": "Erkek Giyim - Yeni Sezon"
    },
    {
      "lang_id": 2,
      "name": "Men's Clothing (Updated)",
      "meta_title": "Men's Clothing - New Season"
    }
  ],
  "status": "active",
  "order": 1,
  "filter_status": "active",
  "installment": 3,
  "opportunity_products": "42,57"
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/categories?id=2' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "languages": [
    {
      "lang_id": 1,
      "name": "Erkek Giyim (Güncel)",
      "meta_title": "Erkek Giyim - Yeni Sezon"
    },
    {
      "lang_id": 2,
      "name": "Men'\''s Clothing (Updated)",
      "meta_title": "Men'\''s Clothing - New Season"
    }
  ],
  "status": "active",
  "order": 1,
  "filter_status": "active",
  "installment": 3,
  "opportunity_products": "42,57"
}'

DELETEKategori Sil

{{base_url}}/categories?id=2
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem; kategoriyi, tüm dil kayıtlarını, görselini, route (SEO URL) kayıtlarını ve kategori path verilerini kalıcı olarak siler. Geri alınamaz.

Birden fazla kategori aynı anda silinebilir. Tek seferde maksimum 50 ID.

Query Parameters

FieldTypeDescription
idstring - requiredSilinecek kategori ID'leri; virgülle ayrılmış. Örn: 1,2,3

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Category deleted successfully.",
        "deleted_ids": [2]
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/categories?id=2' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Özelleştirmeler

5 uç nokta

Ürün özelleştirme gruplarına (yazı alanı, seçim listesi vb.) ait işlemler. Her grup; customizations (özelleştirme kalemleri) ve values (seçenekler) içerebilir.

GETÖzelleştirme Listesi

{{base_url}}/customizations
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringGrup adında arama; Max 100 karakter
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)
sortstringSıralanacak Alan; Values: id / name / sort
orderstringSıralama Yönü; Values: asc / desc
pageintegerSayfa Numarası; Min: 1
limitintegerLimit; Min: 1 Max: 500

Response (200 OK)

{
    "status": true,
    "data": {
        "items": [
            {
                "id": 1,
                "name": "Yazı Ekle",
                "status": "active",
                "sort": 0
            },
            {
                "id": 2,
                "name": "Renk Seçimi",
                "status": "inactive",
                "sort": 1
            }
        ],
        "pager": {
            "currentPage": 1,
            "totalPages": 1,
            "totalRecords": 2
        }
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/customizations' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETÖzelleştirme Detayı

{{base_url}}/customizations/detail?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredÖzelleştirme Grubu ID
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/customizations/detail?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTÖzelleştirme Ekle

{{base_url}}/customizations
Bearer token gerekirContent-Type: application/json

languages alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.

customizations dizisi düz (flat) yapıdadır. Her öğe bir dile ait bir özelleştirme kalemini temsil eder. Aynı özelleştirme kaleminin tüm dil girişleri arka arkaya sıralanmalı ve her dilden bir öğe geçildikten sonra sıradaki kalemin girişleri başlamalıdır (lang_id döngüsü tekrar ettiğinde yeni kalem başlar).

values dizisi de düz yapıdadır; her öğe bir dile ait bir seçenek kalemini temsil eder. Seçenekler pozisyona göre eşleştirilir: tüm dil girişlerindeki values[0] aynı seçenek, values[1] diğer seçenektir.

tip değerine göre type kısıtı: tip 1/2/3 → type ∈ [1,2] | tip 4/5 → type ∈ [1,2,3]

tip değerine göre values kısıtı: tip 1/4/5 → values gönderilemez | tip 2/3 → values gönderilebilir

Body (JSON)

FieldTypeRules
languagesarray - requiredGrup adları; tüm aktif diller için gönderilmeli (allActiveLangs)
languages.*.lang_idinteger - requiredDil ID
languages.*.namestring - requiredGrup adı; Max 255 karakter
statusstringDurum; Values: active / inactive (varsayılan: inactive)
sortintegerSıralama; Min: 0 (varsayılan: 0)
customizationsarrayÖzelleştirme kalemleri (düz dizi — bir öğe = bir dil)
customizations.*.lang_idintegerDil ID
customizations.*.tipintegerAlan tipi; Values: 1=Metin / 2=Tekli Seçim / 3=Çoklu Seçim / 4=Tarih / 5=Dosya
customizations.*.titlestring - requiredKalem başlığı; Max 255 karakter
customizations.*.placeholderstringPlaceholder metni; Max 255 karakter
customizations.*.descstringAçıklama; Max 500 karakter
customizations.*.typeintegerİçerik tipi; tip 1/2/3 → [1,2] / tip 4/5 → [1,2,3]
customizations.*.minintegerMin değer; Min: 0
customizations.*.maxintegerMax değer; Min: 0
customizations.*.sortintegerSıralama; Min: 0
customizations.*.price_prefixstringFiyat operatörü; Values: + / -
customizations.*.pricenumericFiyat farkı
customizations.*.requiredintegerZorunlu alan; Values: 0 / 1
customizations.*.valuesarraySeçenekler; yalnızca tip 2/3 için (düz dizi — bir öğe = bir dil)
customizations..values..lang_idintegerDil ID
customizations..values..namestringSeçenek adı; Max 255 karakter
customizations..values..sortintegerSıralama; Min: 0
customizations..values..statusintegerDurum; Values: 0 / 1
customizations..values..price_prefixstringFiyat operatörü; Values: + / -
customizations..values..pricenumericFiyat farkı
customizations..values..imagestringSeçenek görseli; geçerli URL — uploads/customizations/ dizinine indirilir

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Customization group created successfully.",
        "customization_group_id": 3
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

PATCHÖzelleştirme Düzenle

{{base_url}}/customizations?id=1
Bearer token gerekirContent-Type: application/json

id query parametresi zorunludur.

Yalnızca değiştirmek istediğiniz alanları gönderin; customizations ve languages dizilerini göndermek zorunda değilsiniz.

Mevcut bir kalemi ya da seçeneği güncellerken o kalemin/seçeneğin tüm alanlarını gönderin; gönderilmeyen alanlar varsayılan değerine döner. Seçenekler (values) yalnız kalem girişinde tip 2 ya da 3 gönderildiğinde işlenir.

customizations dizisi düz (flat) yapıdadır. Aynı customization_id değerine sahip girişler aynı kalemi günceller; customization_id olmayan girişler yeni kalem olarak eklenir. Yeni kalemlerde lang_id döngüsü kuralı geçerlidir.

customizations: [] (boş dizi) gönderilirse gruba ait tüm özelleştirme kalemleri silinir.

values: [] (boş dizi) gönderilirse o kaleme ait tüm seçenekler silinir.

value_id varsa mevcut seçenek güncellenir; yoksa yeni seçenek eklenir. Seçenek silmek için values: [] kullanın.

tip değerine göre type kısıtı: tip 1/2/3 → type ∈ [1,2] | tip 4/5 → type ∈ [1,2,3]

tip değerine göre values kısıtı: tip 1/4/5 → values gönderilemez | tip 2/3 → values gönderilebilir

Query Parameters

FieldTypeDescription
idinteger - requiredÖzelleştirme Grubu ID

Body (JSON)

FieldTypeRules
languagesarrayGrup adları; gönderilen diller upsert edilir
languages.*.lang_idintegerDil ID
languages.*.namestringGrup adı; Max 255 karakter
statusstringDurum; Values: active / inactive
sortintegerSıralama; Min: 0
customizationsarrayÖzelleştirme kalemleri (düz dizi); boş dizi → tümünü sil
customizations.*.customization_idintegerMevcut kalem ID; varsa günceller, yoksa yeni ekler
customizations.*.lang_idintegerDil ID
customizations.*.tipintegerAlan tipi; Values: 1 / 2 / 3 / 4 / 5
customizations.*.titlestring - requiredBaşlık; her kalem girişinde zorunlu; Max 255 karakter
customizations.*.placeholderstringPlaceholder; Max 255 karakter
customizations.*.descstringAçıklama; Max 500 karakter
customizations.*.typeintegerİçerik tipi; tip 1/2/3 → [1,2] / tip 4/5 → [1,2,3]
customizations.*.minintegerMin değer; Min: 0
customizations.*.maxintegerMax değer; Min: 0
customizations.*.sortintegerSıralama; Min: 0
customizations.*.price_prefixstringValues: + / -
customizations.*.pricenumericFiyat farkı
customizations.*.requiredintegerValues: 0 / 1
customizations.*.valuesarraySeçenekler; boş dizi → bu kaleme ait tümünü sil
customizations..values..value_idintegerMevcut seçenek ID; varsa günceller, yoksa yeni ekler
customizations..values..lang_idintegerDil ID
customizations..values..namestringSeçenek adı; Max 255 karakter
customizations..values..sortintegerSıralama; Min: 0
customizations..values..statusintegerValues: 0 / 1
customizations..values..price_prefixstringValues: + / -
customizations..values..pricenumericFiyat farkı
customizations..values..imagestringGörsel URL; uploads/customizations/ dizinine indirilir

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Customization group updated successfully.",
        "customization_group_id": 1
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

DELETEÖzelleştirme Sil

{{base_url}}/customizations?ids=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem; grubu, tüm özelleştirme kalemlerini, tüm seçeneklerini ve dil kayıtlarını kalıcı olarak siler. Geri alınamaz.

Birden fazla grup aynı anda silinebilir.

Query Parameters

FieldTypeDescription
idsstring - requiredSilinecek grup ID'leri; virgülle ayrılmış. Örn: 1,2,3

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Customization groups deleted successfully.",
        "deleted_ids": [1, 2],
        "not_found_ids": [],
        "count": 2
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/customizations?ids=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Bloglar

5 uç nokta

Blog yazılarını listeleme, detay görüntüleme, oluşturma, güncelleme ve silme işlemleri. Her blog birden fazla dil kaydı ve kategori ilişkisi taşıyabilir; SEO URL'leri ny_routes tablosuna otomatik yazılır.

GETBlog Listesi

{{base_url}}/blogs
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringBlog adında arama; trim uygulanır; Max 200 karakter
statusstringDurum filtresi; Values: active / inactive
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)
sortstringSıralanacak alan; Values: id / name / order / date (varsayılan: id)
orderstringSıralama yönü; Values: asc / desc (varsayılan: desc)
pageintegerSayfa numarası; Min: 1
limitintegerSayfa limiti; Min: 1 Max: 500

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/blogs' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETBlog Detayı

{{base_url}}/blogs/detail?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredBlog ID
lang_idintegerDil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/blogs/detail?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTBlog Ekle

{{base_url}}/blogs
Bearer token gerekirContent-Type: application/json

languages alanı zorunludur; tüm aktif diller için gönderilmelidir.

permalink boş bırakılırsa name alanından otomatik üretilir. Aynı adres kullanılıyorsa sonuna otomatik ek konur (örn. kahve-rehberi-1).

image geçerli bir URL olmalıdır; uploads/blog/ dizinine indirilir.

status alanı gönderilmezse active olarak varsayılır.

Body (JSON)

FieldTypeRules
languagesarray - requiredDil kayıtları; tüm aktif diller için gönderilmeli (allActiveLangs)
languages.*.lang_idinteger - requiredDil ID
languages.*.namestring - requiredBlog başlığı; Min 1 Max 255 karakter
languages.*.permalinkstringSEO URL; boş bırakılırsa name'den üretilir; Max 255 karakter
languages.*.descriptionstringBlog içeriği (HTML kabul edilir); Max 100000 karakter
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
statusstringDurum; Values: active / inactive (varsayılan: active)
orderintegerSıralama; Min 0 Max 99999
imagestringGörsel URL; uploads/blog/ dizinine indirilir
categoriesarrayKategori ilişkileri; Max 50
categories.*.idintegerBlog kategori ID
categories.*.orderintegerKategorideki sıralama; Min 0 Max 99999

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Blog created successfully.",
        "blog_id": 5
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

PATCHBlog Düzenle

{{base_url}}/blogs?id=1
Bearer token gerekirContent-Type: application/json

id query parametresi zorunludur.

Yalnızca değiştirmek istediğiniz alanları gönderin.

languages: mevcut dil kaydı varsa güncellenir; yoksa yeni eklenir. Permalink değiştirilirse eski SEO route silinerek yenisi eklenir.

categories: tam değiştirme (full replace) — gönderilen liste, blogun tüm kategori ilişkilerinin yerini alır. Boş dizi göndermek mevcut tüm kategori ilişkilerini siler.

image geçerli bir URL olmalıdır; uploads/blog/ dizinine indirilir.

Query Parameters

FieldTypeDescription
idinteger - requiredBlog ID

Body (JSON)

FieldTypeRules
languagesarrayDil kayıtları; gönderilen diller upsert edilir; Max 20 giriş
languages.*.lang_idintegerDil ID
languages.*.namestringBlog başlığı; Min 1 Max 255 karakter
languages.*.permalinkstringSEO URL; değiştirilirse eski adres kaldırılır; adresi değiştirmeyecekseniz göndermeyin; Max 255 karakter
languages.*.descriptionstringBlog içeriği (HTML kabul edilir); Max 100000 karakter
languages.*.meta_titlestringMeta başlık; Max 255 karakter
languages.*.meta_descriptionstringMeta açıklama; Max 500 karakter
languages.*.meta_keywordsstringMeta anahtar kelimeler; Max 500 karakter
statusstringDurum; Values: active / inactive
orderintegerSıralama; Min 0 Max 99999
imagestringGörsel URL; uploads/blog/ dizinine indirilir
categoriesarrayKategori ilişkileri (tam değiştirme); Max 50
categories.*.idintegerBlog kategori ID
categories.*.orderintegerKategorideki sıralama; Min 0 Max 99999

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Blog updated successfully.",
        "blog_id": 1
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği

DELETEBlog Sil

{{base_url}}/blogs?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Bu işlem blogu ve tüm dil kayıtlarını kalıcı olarak siler. Geri alınamaz.

Birden fazla blog aynı anda silinebilir.

Query Parameters

FieldTypeDescription
idstring - requiredSilinecek blog ID'leri; virgülle ayrılmış. Örn: 1,2,3

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Blog deleted successfully.",
        "deleted_ids": [1, 2]
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/blogs?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Siparişler

4 uç nokta

Sipariş listeleme, detay görüntüleme, durum/ödeme/not güncelleme ve durum geçmişi / kargo hareketi ekleme işlemleri. Silme işlemi desteklenmez.

GETSiparişler Listesi

{{base_url}}/orders
Bearer token gerekirContent-Type: application/jsonAccept: application/json
Sipariş durumu değerleri
DeğerAçıklama
pending_approvalOnay Bekliyor
preparingHazırlanıyor
shippedKargolandı
completedTamamlandı
on_holdBeklemede
cancelledİptal Edildi
sent_to_entegraEntegraya Düştü
returnedİade Edildi
Ödeme durumu değerleri
DeğerAçıklama
pending_approvalOnay Bekliyor
approvedOnaylandı
cancelledİptal Edildi

Query Parameters

FieldTypeDescription
customer_idstringMüşteri ID; virgülle birden fazla gönderilebilir
customer_codestringMüşteri/Cari kodu
emailstringE-posta adresi
phonestringTelefon numarası
order_nostringSipariş numarası; virgülle birden fazla gönderilebilir
full_namestringAd soyad (LIKE araması)
start_datestringTarih aralığı başlangıç; Format: YYYY-MM-DD veya YYYY-MM-DDTHH:MM:SSZ
end_datestringTarih aralığı bitiş; Format: YYYY-MM-DD veya YYYY-MM-DDTHH:MM:SSZ
order_statusstringSipariş durumu; Values: pending_approval / preparing / shipped / completed / on_hold / cancelled / sent_to_entegra / returned
payment_statusstringÖdeme durumu; Values: pending_approval / approved / cancelled
devicestringCihaz türü; Values: desktop / mobile_app
companystringFirma unvanı (LIKE araması)
invoice_typestringFatura tipi; Values: individual / institutional
customer_typestringMüşteri tipi; Values: subscribed_customers / dealers
dealersstringBayi grubu ID; virgülle birden fazla gönderilebilir
min_order_amountdecimalMin sipariş tutarı
max_order_amountdecimalMax sipariş tutarı
sortstringSıralanacak alan; Values: id / order_date / full_name / amount (varsayılan: id)
orderstringSıralama yönü; Values: asc / desc (varsayılan: desc)
pageintegerSayfa numarası; Min: 1
limitintegerSayfa limiti; Min: 1 Max: 500

Response (200 OK)

  • shipping.delivery_type: address (adrese teslim) / pickup_point (Gel Al noktasından teslim). Gel al siparişinde shipping.pickup_point noktanın adını, shipping.pickup_code müşterinin teslimde göstereceği kodu taşır; diğer siparişlerde ikisi boş döner.
  • extra_pay: ödeme türüne bağlı ek ücret (ör. kapıda ödeme bedeli) varsa {"title", "price"} nesnesi, yoksa boş dizi [].

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/orders' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETSipariş Detayı

{{base_url}}/orders/detail?order_id=414
Bearer token gerekirContent-Type: application/jsonAccept: application/json

order_id veya order_no parametrelerinden biri zorunludur.

Detay yanıtı; liste yanıtına ek olarak products[], history[], cargo_history[] ve contracts{} alanlarını içerir.

Query Parameters

FieldTypeDescription
order_idintegerSipariş ID; order_id veya order_no'dan biri zorunlu
order_nostringSipariş numarası; order_id veya order_no'dan biri zorunlu

Response (200 OK)

  • shipping.delivery_type: address (adrese teslim) / pickup_point (Gel Al noktasından teslim). Gel al siparişinde shipping.pickup_point noktanın adını, shipping.pickup_code müşterinin teslimde göstereceği kodu taşır; diğer siparişlerde ikisi boş döner.
  • extra_pay: ödeme türüne bağlı ek ücret (ör. kapıda ödeme bedeli) varsa {"title", "price"} nesnesi, yoksa boş dizi [].

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/orders/detail?order_id=414' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

PATCHSipariş Güncelle

{{base_url}}/orders?order_id=414
Bearer token gerekirContent-Type: application/json

order_id veya order_no parametrelerinden biri zorunludur.

Yalnızca değiştirmek istediğiniz alanları gönderin.

Otomatik durum geçişi: payment_status: approved gönderildiğinde sipariş hâlâ pending_approval durumundaysa, sipariş durumu otomatik olarak preparing yapılır.

Bu endpoint yalnızca durum, ödeme durumu ve admin notunu günceller. Durum ya da ödeme durumu değiştiğinde sipariş geçmişine otomatik kayıt düşer; sipariş durumu değişikliğinde müşteriye mobil bildirim gider. Kendi açıklamanızla kayıt eklemek ya da SMS / e-posta göndermek için POST /orders/actions kullanın.

Query Parameters

FieldTypeDescription
order_idintegerSipariş ID; order_id veya order_no'dan biri zorunlu
order_nostringSipariş numarası; order_id veya order_no'dan biri zorunlu

Body (JSON)

FieldTypeRules
order_statusstringSipariş durumu; Values: pending_approval / preparing / shipped / completed / on_hold / cancelled / sent_to_entegra / returned
payment_statusstringÖdeme durumu; Values: pending_approval / approved / cancelled
admin_notestringAdmin notu

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Order updated successfully.",
        "order_id": 414
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "order_status": "preparing",
  "payment_status": "approved",
  "admin_note": "Müşteri arandı, onay alındı."
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/orders?order_id=414' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "order_status": "preparing",
  "payment_status": "approved",
  "admin_note": "Müşteri arandı, onay alındı."
}'

POSTSipariş Aksiyonu

{{base_url}}/orders/actions?order_id=414
Bearer token gerekirContent-Type: application/json

order_id veya order_no parametrelerinden biri zorunludur.

history ve cargo alanlarından en az biri zorunludur; ikisi de aynı istekte gönderilebilir.

Idempotency-Key (önerilir): İsteğe Idempotency-Key başlığı eklenebilir (16–128 karakter; harf, rakam, -, _). Aynı anahtarla aynı sipariş için 24 saat içinde gelen tekrar istek yeniden işlenmez; ilk başarılı yanıt "idempotent": true alanıyla döner, geçmiş kaydı ve bildirimler tekrarlanmaz.

history: ny_order_action tablosuna kayıt ekler, or_durum günceller ve otomasyon motoru tetiklenir. Bildirim gönderilmesi için notifications dizisine sms, mail ve/veya push eklenebilir.

cargo: ny_order_cargo tablosuna kargo takip kaydı ekler, sipariş durumunu otomatik olarak shipped (3) yapar ve otomasyon motoru tetiklenir.

action_type değerleri
DeğerAçıklama
1Onay Bekliyor
2Hazırlanıyor
3Kargolandı
4Tamamlandı
5Beklemede
6İptal Edildi
7Entegraya Düştü
8İade

Query Parameters

FieldTypeDescription
order_idintegerSipariş ID; order_id veya order_no'dan biri zorunlu
order_nostringSipariş numarası; order_id veya order_no'dan biri zorunlu

Body (JSON)

FieldTypeRules
historyobjectDurum geçmişi kaydı; history veya cargo'dan en az biri zorunlu
history.action_typeinteger - requiredAksiyon tipi; Values: 1–8
history.action_textstringAksiyon açıklaması
history.notificationsarrayBildirim kanalları; Values: sms / mail / push
cargoobjectKargo hareketi kaydı; sipariş durumunu otomatik shipped yapar
cargo.company_idinteger - requiredKargo firma ID
cargo.tracking_nostring - requiredKargo takip numarası
cargo.notificationsarrayBildirim kanalları; Values: sms / mail / push

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Actions processed successfully.",
        "order_id": 414
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "history": {
    "action_type": 3,
    "action_text": "Sipariş kargoya verildi.",
    "notifications": [
      "sms",
      "mail"
    ]
  },
  "cargo": {
    "company_id": 4,
    "tracking_no": "1234567890",
    "notifications": [
      "sms",
      "mail"
    ]
  }
}
İstek örneği
curl --request POST 'https://www.example.com/api/ecommerce/v1/orders/actions?order_id=414' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "history": {
    "action_type": 3,
    "action_text": "Sipariş kargoya verildi.",
    "notifications": [
      "sms",
      "mail"
    ]
  },
  "cargo": {
    "company_id": 4,
    "tracking_no": "1234567890",
    "notifications": [
      "sms",
      "mail"
    ]
  }
}'

İadeler

7 uç nokta

Müşteri iade taleplerini listeleyin, detaylarını görüntüleyin ve ürün bazlı onay/ret işlemi yapın. İade nedenlerini yönetin.

GETİade Listesi

{{base_url}}/returns?user_id=&order_no=&start_date=&end_date=&lang_id=1&sort=id&order=desc&page=1&limit=50
Bearer token gerekir

İade taleplerini sayfalı olarak listeler. Her kayıt o iadedeki ürün sayısı ve onay/red durumunu özet olarak içerir.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
user_id—Müşteri ID'sine göre filtrele
order_no—Sipariş numarasına göre filtrele (LIKE arama)
start_date—Başlangıç tarihi (YYYY-MM-DD)
end_date—Bitiş tarihi (YYYY-MM-DD)
lang_id1Dil ID (varsayılan: 1 = TR)
sortidSıralama alanı: id | date
orderdescSıralama yönü: asc | desc
page1Sayfa numarası (varsayılan: 1)
limit50Sayfa başına kayıt (1–500, varsayılan: 50)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/returns?user_id=&order_no=&start_date=&end_date=&lang_id=1&sort=id&order=desc&page=1&limit=50' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "total": 24,
    "page": 1,
    "limit": 50,
    "items": [
      {
        "iade_id": 12,
        "order_id": 305,
        "user_id": 88,
        "return_id": 3,
        "order_no": "SP-2026-0305",
        "customer_name": "Ahmet Yılmaz",
        "return_explanation": "Ürün hasarlı geldi.",
        "return_name": "Hasarlı Ürün",
        "total": 2,
        "approved": 1,
        "cancelled": 0,
        "created_at": 1747296000,
        "created_at_local": "15.05.2026 - 10:00"
      }
    ]
  }
}

GETİade Detayı

{{base_url}}/returns/detail?id=12&lang_id=1
Bearer token gerekir

Belirtilen iadenin tüm detaylarını ve iade edilen ürünlerin satır bazlı onay/red durumlarını döner.

  • status: 0 = açık talep, 2 = müşteri talebi geri çekti.
  • Her ürün satırı kendi iade nedenini (reason_id, reason) taşır.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
id12İade ID (zorunlu)
lang_id1Dil ID (varsayılan: 1 = TR)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/returns/detail?id=12&lang_id=1' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıtlar
200 OKBaşarılı Yanıt
404 Not FoundHata — İade Bulunamadı
{
  "status": false,
  "error": "not_found",
  "message": "Return not found."
}

PATCHİade Aksiyon (Onayla / Reddet)

{{base_url}}/returns?return_id=12&product_row_id=abc123def456
Bearer token gerekirContent-Type: application/json

Bir iade içindeki tek bir ürün satırını onaylar veya reddeder. Her ürün satırı bağımsız olarak işlenir.

Parametre notu: return_id ve product_row_id query string'de gönderilir; diğer alanlar JSON body'de.

action değerleri:

  • approve — ürünü onaylar; restore_stock: "true" ise stok geri eklenir; update_cari: "true" ise cari güncellenir (yalnız cari ödemeli siparişlerde); sipariş durumu otomatik olarak 8 (İade Edildi) yapılır
  • reject — ürünü reddeder

restore_stock / update_cari: "true" veya "false" string olarak gönderilmeli (integer 0/1 kabul edilmez).

Müşteri bildirimi: Talepteki son bekleyen ürün satırı da karara bağlandığında müşteriye sonuç e-postası ve SMS gönderilir (SMS panel ayarına bağlıdır).

Çift işlem koruması: Daha önce onaylanmış veya reddedilmiş ürün satırı için 409 döner.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
return_id12İade ID (zorunlu)
product_row_idabc123def456Ürün satır ID'si — İade Detayı yanıtındaki products[].row_id değeri (zorunlu)

İstek gövdesi

{
  "action": "approve",
  "message": "İade talebiniz onaylandı.",
  "restore_stock": "true",
  "update_cari": "false"
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/returns?return_id=12&product_row_id=abc123def456' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "action": "approve",
  "message": "İade talebiniz onaylandı.",
  "restore_stock": "true",
  "update_cari": "false"
}'
Örnek yanıtlar
200 OKBaşarılı Yanıt — Onay
{
  "status": true,
  "data": {
    "message": "Product return approved successfully.",
    "return_id": 12,
    "action": "approve",
    "stock_restored": 1
  }
}
409 ConflictHata — Zaten İşlenmiş
{
  "status": false,
  "error": "already_processed",
  "message": "This product return has already been approved."
}

GETİade Nedenleri Listesi

{{base_url}}/returns/reasons?lang_id=1&status=&sort=id&order=asc&page=1&limit=100
Bearer token gerekir

Tanımlı iade nedenlerini sayfalı olarak listeler.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
lang_id1Dil ID (varsayılan: 1 = TR)
status—Durum filtresi: active | inactive
sortidSıralama alanı: id | sort
orderascSıralama yönü: asc | desc
page1Sayfa numarası (varsayılan: 1)
limit100Sayfa başına kayıt (1–500, varsayılan: 100)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/returns/reasons?lang_id=1&status=&sort=id&order=asc&page=1&limit=100' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "total": 8,
    "page": 1,
    "limit": 100,
    "items": [
      {
        "id": 1,
        "status": "active",
        "sort": 0,
        "return_name": "Hasarlı Ürün",
        "created_at": 1700000000,
        "created_at_local": "14.11.2023 - 23:13",
        "updated_at": 1747296000,
        "updated_at_local": "15.05.2026 - 10:00"
      }
    ]
  }
}

POSTİade Nedeni Ekle

{{base_url}}/returns/reasons
Bearer token gerekirContent-Type: application/json

Yeni iade nedeni oluşturur.

languages[] tüm aktif diller için gönderilmelidir (allActiveLangs zorunlu). status varsayılan: active.

Rate limit: 120 istek/dakika

İstek gövdesi

İstek örneği
Örnek yanıt
201 CreatedBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Return reason created successfully.",
    "return_reason_id": 9
  }
}

PATCHİade Nedeni Güncelle

{{base_url}}/returns/reasons?id=9
Bearer token gerekirContent-Type: application/json

Mevcut iade nedenini günceller. Sadece gönderilen alanlar güncellenir.

languages[] zorunludur ve mağazanın tüm aktif dillerini içermelidir; gönderilen adlar mevcut adların yerine yazılır.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
id9Güncellenecek iade nedeni ID (zorunlu)

İstek gövdesi

{
  "languages": [
    {
      "lang_id": 1,
      "name": "Hasarlı / Ayıplı Ürün"
    },
    {
      "lang_id": 2,
      "name": "Damaged / Defective Product"
    }
  ],
  "status": "inactive",
  "sort": 5
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/returns/reasons?id=9' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "languages": [
    {
      "lang_id": 1,
      "name": "Hasarlı / Ayıplı Ürün"
    },
    {
      "lang_id": 2,
      "name": "Damaged / Defective Product"
    }
  ],
  "status": "inactive",
  "sort": 5
}'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Return reason updated successfully.",
    "return_reason_id": 9
  }
}

DELETEİade Nedeni Sil

{{base_url}}/returns/reasons?ids=2,3
Bearer token gerekir

Belirtilen iade nedenlerini siler.

Not: id=1 olan varsayılan iade nedeni silinemez; bu ID dahil edilirse 403 döner.

Toplu silme limiti: Tek istekte en fazla 50 ID gönderilebilir.

Rate limit: 120 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
ids2,3Silinecek iade nedeni ID'leri, virgülle ayrılmış (zorunlu)
İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/returns/reasons?ids=2,3' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıtlar
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "message": "Return reasons deleted successfully.",
    "deleted_ids": [
      2,
      3
    ],
    "count": 2
  }
}
403 ForbiddenHata — Varsayılan Neden Silinemez
{
  "status": false,
  "error": "forbidden",
  "message": "The default return reason (id=1) cannot be deleted."
}

Hızlı Sepet

5 uç nokta

Tutar bazlı hızlı sepet (fast cart) işlemleri. Belirli bir müşteri için fiyat, taksit, kargo ve tarih aralığı tanımlı özel ödeme linki oluşturur.

GETHızlı Sepet Listesi

{{base_url}}/fast-carts
Bearer token gerekirContent-Type: application/jsonAccept: application/json

Query Parameters

FieldTypeDescription
searchstringSepet adında arama; Max 100 karakter
statusstringDurum filtresi; Values: active / inactive
new_order_statusintegerSipariş durumu; 0 = sipariş verilmedi, 1 = sipariş verildi
sortstringSıralanacak alan; Values: id / cart_name / cart_total / start_date / end_date / cart_status
orderstringSıralama yönü; Values: asc / desc
pageintegerSayfa numarası; Min: 1
limitintegerSayfa limiti; Min: 1 Max: 500

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/fast-carts' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

GETHızlı Sepet Detayı

{{base_url}}/fast-carts/detail?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur.

Query Parameters

FieldTypeDescription
idinteger - requiredHızlı Sepet ID

Response (200 OK)

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/fast-carts/detail?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

POSTHızlı Sepet Ekle

{{base_url}}/fast-carts
Bearer token gerekirContent-Type: application/json

cart_name, amount, amount.name, amount.price, start_date ve end_date alanları zorunludur.

end_date değeri start_date değerinden büyük olmalıdır.

Body (JSON)

FieldTypeRules
cart_namestring - requiredSepet adı; Max 255 karakter
amountobject - requiredTutar bilgileri
amount.namestring - requiredÜrün/hizmet adı; Max 255 karakter
amount.pricedecimal - requiredTutar; 0'dan büyük, Max 99999999
amount.tax_rateintegerKDV oranı; Min 0 (varsayılan: 20)
statusstringDurum; Values: active / inactive (varsayılan: active)
cart_typeintegerSepet tipi; 0 = herkes kullanabilir, 1 = yalnız üye girişi yapmış müşteriler
cart_campaignintegerMağaza kampanyaları (promosyonlar, havale ve mağazadan teslim indirimleri) bu sepette de uygulansın mı; 0 = hayır, 1 = evet
cart_installmentintegerTaksit sayısı; Min 1 Max 12 (varsayılan: 1)
cart_limitintegerToplam kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz
customer_limitintegerMüşteri başına kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz
cart_customerarraySepetin atandığı müşteri ID listesi; her değer kayıtlı bir müşteri olmalı. Ödeme adımında erişim kısıtı olarak kullanılmaz; sepeti yalnız üyelere açmak için cart_type: 1 kullanın
cargo_statusintegerÜcretsiz kargo; 0 = kapalı, 1 = açık
cargo_typeintegerÜcretsiz kargonun kapsamı (cargo_status = 1 iken); 0 = tüm kargo firmaları, 1 = yalnız free_cargo listesindeki firmalar
free_cargoarrayÜcretsiz kargo firması ID listesi; her değer ny_kargo_firma.id'de bulunmalı
region_infointegerÜlke ID; ny_country.country_id'de bulunmalı (varsayılan: 215 = Türkiye)
start_dateinteger - requiredBaşlangıç tarihi (Unix timestamp)
end_dateinteger - requiredBitiş tarihi (Unix timestamp); start_date'den büyük olmalı

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Fast cart created successfully.",
        "id": 1,
        "cart_url": "https://www.example.com/sepet/checkout?fast=XXXXX"
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "cart_name": "Yaz Kampanyası",
  "amount": {
    "name": "Danışmanlık Hizmeti",
    "price": 1500,
    "tax_rate": 20
  },
  "status": "active",
  "cart_type": 0,
  "cart_campaign": 0,
  "cart_installment": 1,
  "cart_limit": 100,
  "customer_limit": 1,
  "cart_customer": [
    12,
    45
  ],
  "cargo_status": 0,
  "cargo_type": 0,
  "free_cargo": [],
  "region_info": 215,
  "start_date": 1714500000,
  "end_date": 1717178400
}
İstek örneği

PATCHHızlı Sepet Düzenle

{{base_url}}/fast-carts?id=1
Bearer token gerekirContent-Type: application/json

id query parametresi zorunludur. Body'de yalnızca güncellenmek istenen alanlar gönderilir.

amount.price gönderilirse cart_total da güncellenir.

Query Parameters

FieldTypeDescription
idinteger - requiredHızlı Sepet ID

Body (JSON)

FieldTypeRules
cart_namestringSepet adı; Max 255 karakter
amountobjectTutar bilgileri
amount.namestringÜrün/hizmet adı; Max 255 karakter
amount.pricedecimalTutar; 0'dan büyük, Max 99999999
amount.tax_rateintegerKDV oranı; Min 0
statusstringDurum; Values: active / inactive
cart_typeintegerSepet tipi; 0 = herkes kullanabilir, 1 = yalnız üye girişi yapmış müşteriler
cart_campaignintegerMağaza kampanyaları (promosyonlar, havale ve mağazadan teslim indirimleri) bu sepette de uygulansın mı; 0 = hayır, 1 = evet
cart_installmentintegerTaksit sayısı; Min 1 Max 12
cart_limitintegerToplam kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz
customer_limitintegerMüşteri başına kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz
cart_customerarraySepetin atandığı müşteri ID listesi; ödeme adımında erişim kısıtı olarak kullanılmaz
cargo_statusintegerÜcretsiz kargo; 0 = kapalı, 1 = açık
cargo_typeintegerÜcretsiz kargonun kapsamı (cargo_status = 1 iken); 0 = tüm kargo firmaları, 1 = yalnız free_cargo listesindeki firmalar
free_cargoarrayÜcretsiz kargo firması ID listesi
region_infointegerÜlke ID
start_dateintegerBaşlangıç tarihi (Unix timestamp)
end_dateintegerBitiş tarihi (Unix timestamp)

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Fast cart updated successfully.",
        "id": 1,
        "cart_url": "https://www.example.com/sepet/checkout?fast=XXXXX"
    }
}

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "cart_name": "Güncellendi Yaz Kampanyası",
  "amount": {
    "name": "Danışmanlık Hizmeti",
    "price": 1800,
    "tax_rate": 20
  },
  "status": "active",
  "end_date": 1719856800
}
İstek örneği
curl --request PATCH 'https://www.example.com/api/ecommerce/v1/fast-carts?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "cart_name": "Güncellendi Yaz Kampanyası",
  "amount": {
    "name": "Danışmanlık Hizmeti",
    "price": 1800,
    "tax_rate": 20
  },
  "status": "active",
  "end_date": 1719856800
}'

DELETEHızlı Sepet Sil

{{base_url}}/fast-carts?id=1
Bearer token gerekirContent-Type: application/jsonAccept: application/json

id parametresi zorunludur. Tek veya virgülle ayrılmış çoklu ID gönderilebilir. Bir seferde maksimum 50 ID silinebilir.

Query Parameters

FieldTypeDescription
idstring - requiredSilinecek ID(ler); tekil: 1 veya virgüllü: 1,2,3; Max 50 adet

Response (200 OK)

{
    "status": true,
    "data": {
        "message": "Fast cart deleted successfully.",
        "id": "1"
    }
}

Rate limit: 120 istek/dakika

İstek örneği
curl --request DELETE 'https://www.example.com/api/ecommerce/v1/fast-carts?id=1' \
  --header 'Content-Type: application/json' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'

Raporlar

8 uç nokta

Satış, sipariş, ürün, stok, müşteri, iade, kupon ve terk edilmiş sepet raporları. Tüm dönem parametreleri: today, 7d, 30d, this_month, last_month, this_year, custom. custom seçildiğinde start_date ve end_date (YYYY-MM-DD) zorunludur.

GETSatış Özeti

{{base_url}}/reports/sales?period=30d&breakdown=
Bearer token gerekir

Belirtilen dönem için finansal satış özetini döner. breakdown parametresi eklenirse günlük veya saatlik sipariş dağılımı da eklenir.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
period30dDönem: today | 7d | 30d | this_month | last_month | this_year | custom
start_date—Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
end_date—Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
breakdown—Zaman dağılımı: daily | hourly (isteğe bağlı)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/sales?period=30d&breakdown=' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt

GETSipariş İstatistikleri

{{base_url}}/reports/orders?period=30d&city_limit=10
Bearer token gerekir

Sipariş durumu, ödeme yöntemi, kargo firması ve şehir bazlı dağılımları döner.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
period30dDönem: today | 7d | 30d | this_month | last_month | this_year | custom
start_date—Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
end_date—Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
city_limit10Şehir dağılımında gösterilecek maksimum şehir sayısı (1–50, varsayılan: 10)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/orders?period=30d&city_limit=10' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt

GETEn Çok Satan Ürünler

{{base_url}}/reports/products/top-sellers?period=30d&sort=quantity&limit=10
Bearer token gerekir

Belirtilen dönemde en çok satılan ürünleri ödemesi onaylanmış siparişler baz alınarak listeler.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
period30dDönem: today | 7d | 30d | this_month | last_month | this_year | custom
start_date—Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
end_date—Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
sortquantitySıralama: quantity | revenue (varsayılan: quantity)
limit10Gösterilecek ürün sayısı (1–50, varsayılan: 10)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/products/top-sellers?period=30d&sort=quantity&limit=10' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "period": {
      "label": "Son 30 Gün",
      "start_date": "15.04.2026",
      "end_date": "15.05.2026"
    },
    "sort": "quantity",
    "limit": 10,
    "products": [
      {
        "id": 42,
        "code": "PRD-001",
        "name": "Örnek Ürün",
        "total_qty": 85,
        "total_revenue": 25415,
        "total_revenue_format": "₺25.415,00"
      }
    ]
  }
}

GETStok Durumu

{{base_url}}/reports/stock?threshold=5&limit=50
Bearer token gerekir

Genel stok özeti ve kritik stok altındaki ürünleri döner. Bu endpoint dönem filtresi almaz — anlık stok verisi döner.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
threshold5Kritik stok eşiği (1–1000, varsayılan: 5) — bu değer ve altındaki ürünler low_stock_products listesine girer
limit50Listede döndürülecek maksimum ürün sayısı (1–200, varsayılan: 50)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/stock?threshold=5&limit=50' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "threshold": 5,
    "summary": {
      "total_products": 320,
      "stock_off": 12,
      "out_of_stock": 8,
      "low_stock": 25,
      "total_stock_value": 485200,
      "total_stock_value_format": "₺485.200,00"
    },
    "low_stock_products": [
      {
        "id": 17,
        "code": "PRD-017",
        "name": "Az Stoklu Ürün",
        "stock_total": 2,
        "price": 199.9,
        "price_format": "₺199,90"
      }
    ]
  }
}

GETMüşteri İstatistikleri

{{base_url}}/reports/customers?period=30d&city_limit=10
Bearer token gerekir

Aktif müşteri sayısını, dönem içindeki yeni kayıt sayısını, tekrar alıcı sayısını ve sipariş bazlı şehir dağılımını döner. repeat_buyers dönemden bağımsızdır: ödemesi onaylı en az 2 siparişi olan üyeleri sayar.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
period30dDönem: today | 7d | 30d | this_month | last_month | this_year | custom
start_date—Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
end_date—Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
city_limit10Şehir dağılımında gösterilecek maksimum şehir sayısı (1–50, varsayılan: 10)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/customers?period=30d&city_limit=10' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt

GETİade İstatistikleri

{{base_url}}/reports/returns?period=30d
Bearer token gerekir

İade sayısı, iade oranı, durum dağılımı ve en çok görülen iade nedenlerini döner. İade oranı aynı dönemdeki toplam sipariş sayısına göre hesaplanır.

  • status_breakdown her zaman beş durum döner: pending, approved, rejected, partial (kısmen onaylandı), withdrawn (müşteri geri çekti).
  • top_reasons en fazla 5 nedeni iade edilen ürün adedine göre listeler; return_total ürün adedidir. Müşterinin geri çektiği talepler hariçtir.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
period30dDönem: today | 7d | 30d | this_month | last_month | this_year | custom
start_date—Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
end_date—Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/returns?period=30d' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt

GETKupon İstatistikleri

{{base_url}}/reports/coupons?period=30d
Bearer token gerekir

Aktif kupon sayısı, dönemdeki kupon kullanım istatistikleri ve en çok kullanılan 10 kuponu döner.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
period30dDönem: today | 7d | 30d | this_month | last_month | this_year | custom
start_date—Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
end_date—Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/coupons?period=30d' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt

GETTerk Edilmiş Sepet

{{base_url}}/reports/abandoned-carts?period=30d&breakdown=
Bearer token gerekir

Üye kullanıcıların terk ettiği sepetlerin özet istatistiklerini döner. breakdown=daily parametresi eklenirse günlük dağılım da eklenir.

Rate limit: 60 istek/dakika

Sorgu parametreleri

ParametreÖrnek değerAçıklama
period30dDönem: today | 7d | 30d | this_month | last_month | this_year | custom
start_date—Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
end_date—Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu
breakdown—Günlük dağılım: daily (isteğe bağlı, tek geçerli değer)
İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/reports/abandoned-carts?period=30d&breakdown=' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "period": {
      "label": "Son 30 Gün",
      "start_date": "15.04.2026",
      "end_date": "15.05.2026"
    },
    "summary": {
      "cart_qty": 145,
      "total_value": 28750,
      "total_value_format": "₺28.750,00",
      "total_items": 412
    },
    "breakdown": [
      {
        "period": "2026-05-14",
        "cart_qty": 7,
        "total_value": 1380,
        "total_value_format": "₺1.380,00"
      }
    ]
  }
}

Ayarlar

2 uç nokta

Mağaza firma bilgilerini güncellemek için kullanılan endpoint'ler.

GETFirma Bilgileri Görüntüle

{{base_url}}/settings/company
Bearer token gerekir

Mevcut firma bilgilerini döner. Hassas ve dahili alanlar (logo, settings, ip, domain, theme vb.) yanıta dahil edilmez.

Rate limit: 120 istek/dakika

İstek örneği
curl --request GET 'https://www.example.com/api/ecommerce/v1/settings/company' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>'
Örnek yanıt
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "company_name": "Örnek Mağaza",
    "full_company_name": "Örnek Mağaza Ticaret A.Ş.",
    "company_about": "Hakkımızda kısa açıklama.",
    "company_address": "İstanbul, Türkiye",
    "company_tel1": "+90 212 000 00 00",
    "company_tel2": "+90 532 000 00 00",
    "company_mail1": "[email protected]",
    "company_mail2": "[email protected]",
    "company_description": "<p>Uzun açıklama metni.</p>",
    "working_hours": "Hft içi 09:00 - 18:00",
    "company_location": "<iframe src=\"https://maps.google.com/...\"></iframe>",
    "facebook": "https://facebook.com/ornekmagaza",
    "twitter": "https://twitter.com/ornekmagaza",
    "instagram": "https://instagram.com/ornekmagaza",
    "google": "https://g.page/ornekmagaza",
    "linkedin": "https://linkedin.com/company/ornekmagaza",
    "tiktok": "https://tiktok.com/@ornekmagaza",
    "pinterest": "https://pinterest.com/ornekmagaza",
    "footer_icon_type": 0,
    "header_icon_type": 1
  }
}

POSTFirma Bilgileri Güncelle

{{base_url}}/settings/company
Bearer token gerekirContent-Type: application/json

Firma bilgilerini günceller. Tüm alanlar isteğe bağlıdır; en az bir tanınmış alan gönderilmelidir.

Alanlar:

AlanKuralAçıklama
company_nameMax 255 karakterKısa ticari unvan
full_company_nameMax 500 karakterTam yasal unvan
company_aboutMax 5000 karakterKısa hakkımızda metni
company_addressMax 500 karakterAçık adres
company_tel1Max 30 karakterBirincil telefon
company_tel2Max 30 karakterİkincil telefon
company_mail1Geçerli e-posta; Max 255 karakterBirincil e-posta
company_mail2Geçerli e-posta; Max 255 karakterİkincil e-posta
company_descriptionMax 100000 karakter; HTML kabul edilirUzun açıklama / hakkımızda
lang_idinteger; pozitif tam sayı (varsayılan: 1)company_description'ın kaydedileceği dil
working_hoursMax 500 karakterÇalışma saatleri
company_locationMax 10000 karakter; yalnızca Google Maps iframe kabul edilir, diğer kaynaklar otomatik temizlenirHarita embed kodu
facebookGeçerli https/http URL; Max 500 karakterFacebook profil URL'i
twitterGeçerli https/http URL; Max 500 karakterTwitter/X profil URL'i
instagramGeçerli https/http URL; Max 500 karakterInstagram profil URL'i
googleGeçerli https/http URL; Max 500 karakterGoogle Business URL'i
linkedinGeçerli https/http URL; Max 500 karakterLinkedIn profil URL'i
tiktokGeçerli https/http URL; Max 500 karakterTikTok profil URL'i
pinterestGeçerli https/http URL; Max 500 karakterPinterest profil URL'i
footer_icon_typeinteger; 0 veya 1Footer sosyal ikon tipi
header_icon_typeinteger; 0 veya 1Header sosyal ikon tipi

Rate limit: 120 istek/dakika

İstek gövdesi

{
  "company_name": "Örnek Mağaza",
  "full_company_name": "Örnek Mağaza Ticaret A.Ş.",
  "company_about": "Hakkımızda kısa açıklama.",
  "company_address": "İstanbul, Türkiye",
  "company_tel1": "+90 212 000 00 00",
  "company_tel2": "+90 532 000 00 00",
  "company_mail1": "[email protected]",
  "company_mail2": "[email protected]",
  "company_description": "<p>Uzun açıklama / hakkımızda metni. HTML kabul edilir.</p>",
  "working_hours": "Hft içi 09:00 - 18:00",
  "company_location": "<iframe src=\"https://maps.google.com/...\"></iframe>",
  "facebook": "https://facebook.com/ornekmagaza",
  "twitter": "https://twitter.com/ornekmagaza",
  "instagram": "https://instagram.com/ornekmagaza",
  "google": "https://g.page/ornekmagaza",
  "linkedin": "https://linkedin.com/company/ornekmagaza",
  "tiktok": "https://tiktok.com/@ornekmagaza",
  "pinterest": "https://pinterest.com/ornekmagaza",
  "footer_icon_type": 0,
  "header_icon_type": 1
}
İstek örneği
curl --request POST 'https://www.example.com/api/ecommerce/v1/settings/company' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer <ACCESS_TOKEN>' \
  --data '{
  "company_name": "Örnek Mağaza",
  "full_company_name": "Örnek Mağaza Ticaret A.Ş.",
  "company_about": "Hakkımızda kısa açıklama.",
  "company_address": "İstanbul, Türkiye",
  "company_tel1": "+90 212 000 00 00",
  "company_tel2": "+90 532 000 00 00",
  "company_mail1": "[email protected]",
  "company_mail2": "[email protected]",
  "company_description": "<p>Uzun açıklama / hakkımızda metni. HTML kabul edilir.</p>",
  "working_hours": "Hft içi 09:00 - 18:00",
  "company_location": "<iframe src=\"https://maps.google.com/...\"></iframe>",
  "facebook": "https://facebook.com/ornekmagaza",
  "twitter": "https://twitter.com/ornekmagaza",
  "instagram": "https://instagram.com/ornekmagaza",
  "google": "https://g.page/ornekmagaza",
  "linkedin": "https://linkedin.com/company/ornekmagaza",
  "tiktok": "https://tiktok.com/@ornekmagaza",
  "pinterest": "https://pinterest.com/ornekmagaza",
  "footer_icon_type": 0,
  "header_icon_type": 1
}'
Örnek yanıtlar
200 OKBaşarılı Yanıt
{
  "status": true,
  "data": {
    "updated_fields": [
      "company_name",
      "company_mail1",
      "instagram"
    ],
    "description_lang_id": 1
  }
}
400 Bad RequestHata — Tanınan Alan Yok
{
  "status": false,
  "error": "no_fields",
  "message": "Güncellenecek en az bir geçerli alan gönderilmelidir."
}
422 Unprocessable EntityHata — Validasyon
{
  "status": false,
  "error": "validation_error",
  "message": {
    "company_mail1": "company_mail1 alanı geçerli bir e-posta adresi olmalıdır."
  }
}

Entegra E-Ticaret API · v1.2.0 · Son güncelleme 14.10.2026

© 2026 Entegra Bilişim