TIKON Geliştirici Merkezi / Simurgh Connector

API Dokümantasyonu

Bu sayfa harici yazılımların Simurgh Pazaryeri ile ürün, sipariş ve site yönetimi entegrasyonunu anlatır.

🛒 Pazaryeri API Erişim Dokümanı Ürün, stok, fiyat, sipariş, fatura, kargo, iade ve iptal entegrasyonları. Dokümana gir → 🌐 Domain Site API Erişim Dokümanı Domaini Simurgh tarafından yönetilen tenantlar için sayfa, slider, menü ve site ayarları. Dokümana gir →

Aktif Entegrasyon Katmanı

Harici uygulama entegrasyonu tenant kapsamlı ticari API üzerinden yürür.

KatmanKapsamKim kullanır?
1 · Ticari APIÜrün ekleme, güncelleme, silme, fiyat, stok, görsel, kategori, marka, sipariş çekme, sipariş durumu, fatura, kargo, iade ve iptal.Tüm aktif tenantlar. Domain tenantın kendi üzerinde olmasa da kullanılabilir.
Eski domainli site/CMS endpointleri kapatılmıştır. Tenant mağaza görünümü Satıcı Merkezi üzerinden yönetilir.

Genel Bilgiler

Base URL:

https://pazaryeri.simurgh.com.tr/simurgh-connector
Dil: TürkçeVarsayılan channel: defaultPara: TRYSürüm: 1.0.0.64
Tüm korumalı endpointlerde X-Connector-Key ve X-Connector-Token headerları önerilir. Eski entegrasyonlar için X-Simurgh-Key ve X-Simurgh-Token headerları da geriye dönük olarak desteklenir. Credential değerleri tenant bazlıdır; başka tenantları göremez.

Connector katalog ayarları

SIMURGH_CONNECTOR_CHANNEL_CODE=default
SIMURGH_CONNECTOR_INVENTORY_SOURCE_CODE=default
SIMURGH_CONNECTOR_ATTRIBUTE_FAMILY_CODE=default
SIMURGH_CONNECTOR_ATTRIBUTE_OPTION_POLICY=reject

Bu değerler yalnız varsayılandır; ürün isteğinde karşılık gelen alanlar gönderilirse request değeri önceliklidir.

Mevcut API Sözleşmesinin Durumu

AlanDurumAçıklama
Auth / Health / DoctorStandartcode, message, data, meta.requestId ve doğru HTTP status kodları kullanılır. /doctor config, route, tablo, katalog ve queue durumunu birlikte kontrol eder.
Ürün endpointleriStandartFormRequest validation ve ApiResponse katmanı kullanılır. Panel sync için credential içermeyen audit API mevcuttur.
Kategori / MarkaStandartSimurgh kimliği ile mapping tabanlı idempotent upsert yapılır.
Site / Master ImportLegacyEndpointler aktiftir; ancak henüz ortak FormRequest ve standart response katmanına taşınmamıştır.
/system/reindexAPI değilRoute içinde mevcut değildir. Şimdilik Artisan CLI komutu kullanılır.

Auth

POST/auth/loginAktif

Connector credential doğrulaması yapar. Token üretmez; body veya header ile gönderilen mevcut key/token çiftini doğrular.

curl -X POST "$BASE_URL/auth/login" \
-H "Content-Type: application/json" \
-d '{"key":"<connector-key>","token":"<connector-token>"}'

Başarılı cevap:

{
  "success": true,
  "code": "AUTHENTICATED",
  "message": "Connector credentials verified.",
  "data": {
    "service": "simurgh-connector",
    "engine": "simurgh_marketplace",
    "tenant": "example-tenant",
    "version": "1.0.0.63",
    "auth": {"type":"headers","headers":["X-Connector-Key","X-Connector-Token"],"legacyHeaders":["X-Simurgh-Key","X-Simurgh-Token"]}
  },
  "meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}

Health

GET/healthAktif

Uygulama ve veritabanı durumunu kontrol eder. Bu endpoint middleware arkasındadır.

curl -X GET "$BASE_URL/health" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
{
  "success": true,
  "code": "HEALTHY",
  "message": "Connector is healthy.",
  "data": {
    "service": "simurgh-connector",
    "engine": "simurgh_marketplace",
    "tenant": "example-tenant",
    "version": "1.0.0.63",
    "checks": {"application":true,"database":true}
  },
  "meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}

Doctor

GET/doctorAktif

v1.0.0.28: Connector kurulumunu ve canlı ortam hazırlığını tek cevapta kontrol eder. Database, auth config, route kaydı, dokümantasyon sürümü, storage yazılabilirliği, Simurgh/Simurgh Pazaryeri tabloları, katalog varsayılanları ve sync job özetini döner.

curl -X GET "$BASE_URL/doctor" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"

Başarılı cevap HTTP 200 döner. Kritik hata varsa HTTP 503 döner; errors alanı deploy sonrası ilk bakılacak yerdir. Uyarılar warnings içinde kalır ve işlem bloklamaz.

{
  "success": true,
  "code": "CONNECTOR_DOCTOR_OK",
  "message": "Connector doktor kontrolü tamamlandı.",
  "data": {
    "service": "simurgh-connector",
    "engine": "simurgh_marketplace",
    "tenant": "example-tenant",
    "version": "1.0.0.63",
    "checks": {
      "database": {"ok":true},
      "routes": {"ok":true},
      "tables": {"ok":true},
      "catalog_defaults": {"ok":true}
    },
    "queue": {"enabled":true,"counts_by_status":{"pending":0}}
  },
  "meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
Bu endpoint de auth middleware arkasındadır. Credential bilgisini dışarı yazmaz; yalnız key/token tanımlı mı bilgisini boolean olarak raporlar.

Cevap ve Hata Standardı

Auth, health, doctor, ürün, kategori ve marka endpointlerinde aşağıdaki ortak yapı kullanılır.

{
  "success": true,
  "code": "PRODUCT_STOCK_UPDATED",
  "message": "...",
  "data": {},
  "meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}

Validation hatası:

HTTP 422
{
  "success": false,
  "code": "VALIDATION_FAILED",
  "message": "Gönderilen bilgiler doğrulanamadı.",
  "errors": {"sku":["SKU alanı zorunludur."]},
  "meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
HTTPKullanım
200Başarılı işlem veya değişiklik gerektirmeyen idempotent sonuç.
401Credential hatalı veya eksik.
403IP izin listesi engeli.
409Mapping veya benzersiz kayıt çakışması.
422FormRequest validation hatası.
500Beklenmeyen uygulama hatası.
503Connector credential/config eksikliği veya health bağımlılığı sorunu.

Ticari API · Ürün Endpointleri

Ürün, fiyat ve stok akışında ana eşleştirme anahtarı tenant_id + simurgh_product_id değeridir. SKU, ilk eşleştirmede ve eski kayıt kurtarmada fallback olarak kullanılır.
POST/productsValidated

Ürünü oluşturur veya mapping üzerinden günceller. sku ya da barcode alanlarından en az biri zorunludur. Kategori ve marka için öncelikli alanlar simurgh_category_ids ve simurgh_brand_id değerleridir; bunlar tenant bazlı mapping tablolarından Simurgh Pazaryeri ID değerlerine çevrilir. Eski categories ve brand_id sayısal alanları geriye uyumluluk için kabul edilir.

{
  "simurgh_product_id":"prd_001",
  "sku":"TEST001",
  "barcode":"8690000000001",
  "name":"Test Ürün",
  "type":"simple",
  "price":149.90,
  "stock":12,
  "weight":1,
  "manage_stock":true,
  "status":true,
  "visible_individually":true,
  "simurgh_category_ids":["cat_001"],
  "simurgh_brand_id":"brand_001",
  "attribute_family_code":"default",
  "channel":"default",
  "channels":["default"],
  "inventory_source_code":"default",
  "locale":"tr"
}
AlanDavranış
channelÜrünün locale/channel bağlamı. Verilmezse connector config veya Simurgh Pazaryeri varsayılan channel kodu kullanılır.
channelsÜrünün atanacağı channel kodları/ID listesi. Verilmezse seçili channel kullanılır.
inventory_source_codestock değerinin yazılacağı inventory source. Varsayılan: default.
inventoriesÇoklu depo için {"default":12,"warehouse_2":4} biçiminde gönderilebilir.
attribute_family_codeYeni ürün oluşturulurken kullanılacak family kodu. Varsayılan: default.
simurgh_category_idsSimurgh kategori ID listesi. Her kayıt simurgh_category_mappings tablosunda synced durumda olmalıdır.
simurgh_brand_idSimurgh marka ID değeri. simurgh_brand_mappings tablosundaki Simurgh Pazaryeri option ID değerine çevrilir.
Gönderilen channel/inventory/family kaynağı veya Simurgh kategori/marka mapping kaydı bulunamazsa ürün işlemi PRODUCT_SYNC_FAILED ile durur. Başka bir kaynağa sessiz fallback yapılmaz.
{
  "success":true,
  "action":"created",
  "product_id":42,
  "simurgh_product_id":"prd_001",
  "category_ids":[7],
  "brand_option_id":12
}
POST/products/preflightRead-only

v1.0.0.27: /products ile aynı payloadı yazmadan kontrol eder. Kategori/marka mapping, attribute family, inventory source, zorunlu attribute, configurable super attribute, duplicate varyant kombinasyonu ve option policy sonucu doğrulanır.

curl -X POST "$BASE_URL/products/preflight" \
-H "Content-Type: application/json" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>" \
-d '{
  "simurgh_product_id":"prd_parent_001",
  "type":"configurable",
  "sku":"TSHIRT-001",
  "attribute_family_code":"default",
  "attribute_option_policy":"create_if_allowed",
  "configurable_attributes":["color","size"],
  "variants":[
    {"sku":"TSHIRT-001-RED-M","price":349.90,"attributes":{"color":"Kırmızı","size":"M"}}
  ]
}'

Bu endpoint veritabanına ürün, varyant veya option yazmaz. create_if_allowed politikası bilinmeyen option için would_create raporu üretir; gerçek oluşturma sadece /products veya /products/full-sync sırasında yapılır.

{
  "success": true,
  "code": "PRODUCT_PREFLIGHT_OK",
  "can_sync": true,
  "data": {
    "product": {"operation":"create","type":"configurable"},
    "configurable": {"enabled":true,"variant_count":1},
    "attributes": {"options":{"resolved":[],"created":[],"would_create":[],"ignored":[]}}
  }
}
POST/products/stockValidated

sku veya simurgh_product_id ile ürün bulur. Stok için ayrı payload hash kullanır; aynı veri tekrar gelirse action: unchanged dönebilir.

{ "simurgh_product_id":"prd_001", "stock":12, "manage_stock":true, "channel":"default", "locale":"tr" }
POST/products/priceValidated

price, regular_price veya list_price alanlarından biriyle fiyat günceller. Özel fiyat ve tarih aralığı desteklenir.

{
  "simurgh_product_id":"prd_001",
  "price":149.90,
  "special_price":129.90,
  "cost_price":80,
  "special_price_from":"2026-07-11",
  "special_price_to":"2026-07-31"
}
POST/products/seoMapping + Hash

simurgh_product_id öncelikli, SKU yedek yöntem olacak şekilde ürünü ortak mapping katmanından bulur. SEO payload hash değeri değişmediyse action: unchanged döner. url_key, meta_title, meta_keywords, meta_description, channel ve locale doğrulanır.

{ "simurgh_product_id":"prd_001", "url_key":"test-urun", "meta_title":"Test Ürün", "meta_keywords":"test,urun", "meta_description":"SEO açıklaması", "channel":"default", "locale":"tr" }
POST/products/mediaMapping + Validation

Ürünü ortak mapping katmanından bulur; simurgh_product_id önceliklidir. Görsel ve video URL alanları doğrulanır. Başarılı senkron sonrası mapping kaydına medya hash ve son medya senkron zamanı yazılır.

{ "simurgh_product_id":"prd_001", "main_image":"https://cdn.example.com/main.jpg", "images":["https://cdn.example.com/image.jpg"], "videos":[], "force":false }
POST/products/infoMapping + Hash

simurgh_product_id öncelikli olacak şekilde ürünü ortak mapping katmanından bulur. Temel bilgi, kategori, marka, SEO ve görünürlük alanlarını tek akışta günceller. simurgh_category_ids ve simurgh_brand_id mevcut mapping tablolarından çözülür. Aynı bilgi payloadı tekrar gönderilirse action: unchanged döner.

{
  "simurgh_product_id":"prd_001",
  "name":"Güncel Ürün Adı",
  "short_description":"Kısa açıklama",
  "description":"Uzun açıklama",
  "simurgh_category_ids":["cat_001"],
  "simurgh_brand_id":"brand_001",
  "status":true,
  "visible_individually":true
}

Zorunlu kimlik: sku veya simurgh_product_id. Başarılı senkron sonrasında mapping kaydına last_info_hash ve last_info_sync_at yazılır.

POST/products/price-stockValidated

Fiyat ve stoğu tek istekte iki ayrı servis üzerinden günceller. Ortak SKU üst seviyede veya nested payload içinde verilebilir.

{
  "sku":"TEST001",
  "price":{"price":1301,"special_price":null},
  "stock":{"stock":7}
}
POST/products/visibilityMapping + Hash

Ürünü ortak mapping katmanından bulur. Aktiflik ve tekil görünürlük değerlerini günceller; aynı görünürlük hash değeri tekrar gönderilirse action: unchanged döner.

{ "simurgh_product_id":"prd_001", "status":true, "visible_individually":true, "channel":"default", "locale":"tr" }
POST/products/full-syncValidated

Master import servisini syncMedia=true ve varsayılan operation=FULL_SYNC ile çalıştırır. Request doğrulaması /products ile aynıdır. Simurgh panel için response içinde panel, operation, simurgh_marketplace_product_id, errors ve warnings özetleri bulunur. Mevcut kategori, marka, ürün, fiyat, stok ve medya servisleri değiştirilmedi.

{
  "simurgh_product_id":"prd_001",
  "sku":"TEST001",
  "name":"Tam Senkron Ürün",
  "price":1301,
  "stock":7,
  "simurgh_category_ids":["cat_001"],
  "simurgh_brand_id":"brand_001"
}

Panelin doğrudan okuyabileceği başarılı cevap özeti:

{
  "success": true,
  "code": "PRODUCT_FULL_SYNC_COMPLETED",
  "sku": "TEST001",
  "operation": "CREATE",
  "simurgh_marketplace_product_id": 42,
  "panel": {
    "tenant": "example-tenant",
    "source": "simurgh_panel",
    "result": "success",
    "next_action": "show_success",
    "operation": "CREATE",
    "sku": "TEST001",
    "product_id": 42,
    "price_synced": true,
    "stock_synced": true,
    "media_skipped": false,
    "failed_steps": [],
    "trace_id": "uuid",
    "endpoint": "products/panel-sync"
  },
  "panel_trace_id": "uuid",
  "errors": [],
  "warnings": []
}
POST/products/panel-syncAktif

v1.0.0.32: Simurgh panel için önerilen endpointtir. Aynı MasterProductImportService akışını kullanır, ancak panel isteği için ayrı controller metodundan geçer ve credential içermeyen audit izi üretir. /products/full-sync davranışını bozmaz.

POST /simurgh-connector/products/panel-sync
# Body: /products/full-sync ile aynı ürün payloadı

Başarılı/başarısız cevapta panel tarafı için panel.trace_id, panel.endpoint ve üst seviyede panel_trace_id döner. 1.0.0.33 ile aynı iz GET /products/panel-sync/audit?trace_id=... üzerinden de okunur. Sunucuda özet log:

/home/example-tenant/www/storage/logs/simurgh-panel-sync.jsonl

Ürün Attribute Engine

v1.0.0.26: POST /products ve POST /products/full-sync payloadlarında dinamik Simurgh Pazaryeri attribute değerleri ortak option resolver üzerinden işlenir.

Associative payload

{
  "simurgh_product_id": "prd_001",
  "sku": "SKU001",
  "attribute_family_code": "default",
  "attributes": {
    "color": 12,
    "material": "Pamuk",
    "is_fragile": true
  }
}

Locale/channel kapsamlı payload

{
  "attributes": [
    {"code":"custom_title","value":"Başlık","locale":"tr","channel":"default"},
    {"code":"color","value":"Kırmızı"}
  ],
  "strict_attributes": true
}

Desteklenen tipler: text, textarea, price, boolean, select, multiselect, checkbox, date, datetime, file ve image.

Select, multiselect ve checkbox değerleri option ID veya mevcut option etiketi ile çözülebilir. Varsayılan politika reject olduğu için bilinmeyen option otomatik oluşturulmaz. Attribute ürün ailesine bağlı değilse veya zorunlu attribute eksikse işlem başarısız olur.

strict_attributes=false kullanılırsa bilinmeyen veya aileye bağlı olmayan alanlar atlanır ve response içindeki attributes.ignored listesinde raporlanır.

Attribute Option Policy

v1.0.0.26: Normal ürün attribute'ları ve configurable varyant super attribute değerleri artık ortak AttributeOptionResolver servisiyle çözümlenir.

PolicyDavranış
rejectVarsayılan güvenli davranıştır. Option ID veya etiket bulunamazsa ürün senkronu hata ile durur.
create_if_allowedBilinmeyen string etiket için Simurgh Pazaryeri attribute_options ve locale translation kaydı oluşturur. Aynı etiket varsa tekrar oluşturmaz.
ignoreSadece strict_attributes=false olduğunda normal ürün attribute değerini atlar. Configurable varyant kombinasyonları ignore edilemez.

Request seviyesi policy

{
  "sku": "SKU001",
  "attribute_option_policy": "create_if_allowed",
  "attributes": [
    {"code":"color","value":{"label":"Kırmızı","labels":{"tr":"Kırmızı","en":"Red"}}}
  ]
}

Attribute bazlı override

{
  "attribute_option_policy": "reject",
  "attribute_option_policies": {
    "color": "create_if_allowed",
    "material": "ignore"
  },
  "strict_attributes": false
}

Response içinde çözümleme raporu döner: attributes.options.resolved, attributes.options.created, attributes.options.would_create, attributes.options.ignored. Configurable ürünlerde varyant option raporu variants.options altında döner. /products/preflight read-only olduğu için yeni option açmaz; oluşturulabilecek kayıtları would_create olarak gösterir.

{
  "attributes": {
    "written": [{"code":"color","type":"select"}],
    "ignored": [],
    "options": {
      "resolved": [],
      "created": [{"attribute_code":"color","option_id":45,"label":"Kırmızı"}],
      "would_create": [],
      "ignored": []
    }
  }
}
Canlı sistemde güvenli varsayılan reject olarak kalır. Otomatik option oluşturma sadece request veya config ile açıkça create_if_allowed yapılırsa çalışır.

Configurable Ürün ve Varyant Motoru

v1.0.0.25: POST /products ve POST /products/full-sync configurable parent ürün, super attribute ve child varyant senkronizasyonunu destekler.

v1.0.0.27: Configurable payloadlar artık canlı senkron öncesinde POST /products/preflight ile read-only doğrulanabilir.

{
  "simurgh_product_id": "prd_parent_001",
  "type": "configurable",
  "sku": "TSHIRT-001",
  "name": "Basic Tişört",
  "attribute_family_code": "default",
  "configurable_attributes": ["color", "size"],
  "variants": [
    {
      "simurgh_product_id": "prd_variant_red_m",
      "sku": "TSHIRT-001-RED-M",
      "name": "Basic Tişört Kırmızı M",
      "price": 349.90,
      "stock": 8,
      "weight": 0.25,
      "attributes": {"color": "Kırmızı", "size": "M"}
    }
  ],
  "prune_variants": false
}

configurable_attributes alanındaki attribute'lar Simurgh Pazaryeri ürün ailesine bağlı ve select tipinde olmalıdır. Option değeri mevcut option ID veya etiketiyle gönderilebilir. Bilinmeyen option için ortak policy kullanılır; varsayılan reject davranışı korunur.

Her varyant ayrı simurgh_product_id ile simurgh_product_mappings tablosuna kaydedilir. SKU değişse bile sonraki senkronizasyonda mapping üzerinden aynı child ürün bulunur.

Aynı SKU veya aynı attribute kombinasyonu iki kez gönderilirse işlem reddedilir. Varsayılan prune_variants=false olduğundan payload dışında kalan mevcut varyantlar korunur. true kullanılırsa payload dışında kalan child varyantlar Simurgh Pazaryeri güncelleme akışı tarafından kaldırılır.

Kategori & Marka

POST/categoriesMapping + Validation

simurgh_category_id ile idempotent kategori upsert yapar. Aynı payload tekrar gönderildiğinde yeniden yazmak yerine action: unchanged dönebilir. external_id ve category_id geriye dönük alias olarak kabul edilir.

{
  "simurgh_category_id":"cat_001",
  "name":"Gümüş Kolye",
  "slug":"gumus-kolye",
  "parent_simurgh_category_id":"cat_root",
  "locale":"tr",
  "description":"Kategori açıklaması",
  "meta_title":"Gümüş Kolye",
  "meta_keywords":"gümüş,kolye",
  "meta_description":"Kategori SEO açıklaması",
  "position":10,
  "status":1,
  "display_mode":"products_only"
}
POST/brandsMapping + Validation

simurgh_brand_id ile Simurgh Pazaryeri brand attribute option kaydını oluşturur/günceller. external_id ve brand_id alias olarak kabul edilir.

{ "simurgh_brand_id":"brand_001", "name":"Example Store", "slug":"example-store", "locale":"tr", "sort_order":10 }

Kategori Zorunlu Attribute Sözleşmesi

v1.0.0.25: POST /categories payloadı artık required_attributes alanını kabul eder. Bu liste kategori mapping kaydında tutulur ve ürün senkronunda doğrulanır.

{
  "simurgh_category_id": "cat_001",
  "name": "Tişört",
  "required_attributes": ["material", "gender"]
}

Ürün bu kategoriye bağlandığında belirtilen Simurgh Pazaryeri attribute değerleri mevcut değilse ürün işlemi PRODUCT_SYNC_FAILED ile durur. Sessiz varsayım veya otomatik option oluşturma yapılmaz.

Varyant Bazlı Medya

v1.0.0.25: Configurable ürünlerde her varyant kendi görsel ve video listesini taşıyabilir. Medya işlemi ürün transaction'ı tamamlandıktan sonra yürütülür; bir varyant medya hatası parent ürün kaydını geri almaz ve variant_media.partial_failure alanında raporlanır.

{
  "type": "configurable",
  "variants": [{
    "sku": "TSHIRT-RED-M",
    "price": 349.90,
    "attributes": {"color": "Kırmızı", "size": "M"},
    "main_image": "https://cdn.example.com/red-m-main.jpg",
    "images": ["https://cdn.example.com/red-m-2.jpg"],
    "videos": []
  }]
}

Domainli Site Yönetimi — Emekliye Ayrıldı

Kapalı: Tenant credentialıyla merkezi CMS, slider, menü veya site ayarı değiştiren bütün /site/* rotaları kaldırılmıştır. Mağaza görünümü Satıcı Merkezi’nden yönetilir. Ürün, sipariş ve fatura işlemleri için Ticari API ve Sipariş API bölümlerini kullanın.
Domain kapsamı: Example Store gibi domaini Simurgh tarafından yönetilen tenantlarda kullanılabilir. Domaini Simurgh’a ait olmayan tenantlarda bu bölümü devre dışı bırakın.
GET/site/snapshotCMS Read

Kanal ayarları, tema alanları, sliderlar, CMS sayfaları, menüler, kategoriler ve capability bilgisini tek cevapta döndürür.

GET/site/categoriesRead-only

Menü ve vitrin seçimi için aktif Simurgh Pazaryeri kategori ağacını döndürür; katalog kaydı yazmaz.

POST/site/assetsCMS Upload

Logo, favicon, slider ve banner görsellerini multipart file alanından alır. JPEG, PNG, WebP, GIF ve ICO; en fazla 8 MB.

POST/site/pagesLegacy

CMS sayfalarını oluşturur/günceller.

{ "pages":[{"key":"about","title":"Hakkımızda","slug":"hakkimizda","content":"<p>İçerik</p>"}] }
POST/site/slidersLegacy

Tema slider verisini günceller.

{ "channel":"default", "locale":"tr", "name":"Ana Sayfa Slider", "theme_code":"simurgh", "replace":true, "items":[{"title":"Yeni Koleksiyon","image":"https://cdn.example.com/slider.jpg","link":"/search?query=kolye"}] }
POST/site/settingsLegacy

Mağaza ve tema ayarlarını günceller.

{ "channel":"default", "locale":"tr", "store_name":"Example Store", "site_title":"Example Store Resmi Mağaza", "email":"info@example.com", "theme":{"copyright":"© 2026 Example Store"} }
POST/site/menusLegacy

Header ve footer menülerini günceller.

{ "channel":"default", "locale":"tr", "header":[{"title":"Kolye","url":"/search?query=kolye","sort_order":1}], "footer":[{"title":"KVKK","url":"/kvkk","sort_order":1}] }
DELETE/site/pages/{id}CMS Delete

Belirtilen CMS sayfasını siler.

DELETE/site/sliders/{id}CMS Delete

Belirtilen image carousel sliderını ve storage klasörünü siler.

Ticari API · Sipariş, Fatura ve Kargo

Sipariş çekme, acknowledgement, durum, fatura, gönderi, iade ve iptal uçları validation, standart response, mapping ve opsiyonel async queue kullanır. Fatura, gönderi, iade ve iptal işlemleri Simurgh Pazaryeri repository yaşam döngüsünü çalıştırır; yalnızca status alanı değiştirilmez.
v1.0.0.64: Yıldızlı/Flaş kampanya indirimleri, ürün rozetleri, 4,5/5 güvenilir satıcı, aynı gün kargo ve kampanya öncelikli arama sıralaması eklendi.
v1.0.0.63: Satıcı Merkezi ürün düzenleme ekranına tenant izole görsel ekleme, silme ve sıralama desteği eklendi. Ürün başına toplam altı görsel sınırı uygulanır.
v1.0.0.62: Ürün detayları mağaza güvencesi, ürün özellikleri ve “Satıcıya Sor” alanlarıyla marketplace görünümüne yaklaştırıldı; domain kullanmayan tenantlar için merkezi mağaza URL'si eklendi.
v1.0.0.59: Platform işletme kimliğinden üretilen geçici hukuk ve sözleşme merkezi, footer bağlantıları ve tedarikçi başvuru kabul bağlantıları eklendi. Metinler hukuk müşaviri onayı bekler.
v1.0.0.58: Referanslı gidiş/iade kargo maliyeti, ücretsiz iade kodu, refund/tenant transfer ödeme defteri, resmî tatil iş günü takvimi ve müşteri bildirim merkezi eklendi. Kargo gideri uygun hakedişe ve platform hizmet faturasına bağlanır.
v1.0.0.57: Sponsorlu ürünler arama/kategori ilgisi ve teklif ağırlıklı deterministik rotasyonla katalog sonuçlarına eklendi. Ücretli reklam olayları uygun TRY hakedişine bir kez bağlanır, ayrı kesinti olur ve platform UBL hizmet faturası toplamına katılır; nete sığmayan olay sonraki döneme devreder.
v1.0.0.56: Tenant sponsorlu ürün/mağaza başvurusu, CPC/CPM teklif ve günlük/toplam bütçe, developer onayı, HMAC ziyaretçi özetiyle tekilleştirilen gösterim/tıklama olayları ve organik akıştan ayrı açık “Sponsorlu” storefront alanı eklendi.
v1.0.0.55: Doğrulanmış teslimattan başlayan 25 iş günü hakediş vadesi, blokaj/refund kontrollü otomatik uygunluk, Yönetim Merkezi dönem ve transfer planlaması ile referans zorunlu ödeme kaydı eklendi. Hafta sonları atlanır; Türkiye resmî tatil kaynağı sonraki entegrasyondur.
v1.0.0.54: Merkezi iptal/iade talebi, tenant izole satıcı yanıtı, developer kararı, append-only olay geçmişi ve hakediş blokajı eklendi. Ödeme sağlayıcısı bağlanana kadar geri ödeme yalnız manuel işlem kaydıdır ve gerçek banka/ödeme referansı olmadan tamamlanamaz.
v1.0.0.53: Müşteri hesabı platform genelinde merkezidir. Tenant login dönüşü güvenli tek kullanımlık SSO ile yapılır. Takip ve onaylı doğrulanmış yorum ödülleri tenant cüzdanında tutulur; yalnız aynı tenant ürünlerinde kullanılabilir. Satıcı profili puan, takipçi, kategoriler, fırsatlar, popüler/yeni ürünler ve değerlendirmeleri tek sayfada sunar. Ana sayfadaki küçük Simurgh İkinci El bağlantısı ayrı ilan uygulamasını açar.
v1.0.0.51: Satıcı sipariş kaleminde kategori/kural, komisyon, platform hizmet bedeli, ilgili KDV ve stopaj tutarları sipariş anında snapshotlanır. Sonraki kural değişiklikleri geçmiş sipariş hesabını değiştirmez.
v1.0.0.41: Sipariş cevabındaki seller_order alanı satıcı alt sipariş numarası, komisyon, net hakediş ve ödeme durumunu taşır.
v1.0.0.40: Sipariş cevabındaki marketplace_context siparişin tenant/pazaryeri kaynağını taşır; item içindeki seller_tenant_id ürün satıcısını belirtir. Connector siparişleri kendi tenant sahipliğiyle sınırlar.
v1.0.0.39: pazaryeri.simurgh.com.tr merkezi pazaryeri görünümü ile tenant storefront görünümü Host bazında ayrıldı.
v1.0.0.38: Sipariş çekme cevabındaki order_preferences alanı bireysel/kurumsal sipariş tipini, e-fatura seçimini, fatura unvanı/vergi dairesi/vergi numarasını ve müşteri sipariş notunu taşır.
GET/orders/pull?limit=50&after_id=120Cursor + Mapping

Siparişleri artan Simurgh Pazaryeri ID sırasıyla döndürür. after_id yeni cursor alanıdır; since_id geriye uyumluluk için desteklenir. limit 1–250 arasındadır. Her dönen sipariş mapping tablosunda pulled olarak işaretlenir.

curl "$BASE_URL/orders/pull?limit=50&after_id=120&updated_after=2026-07-11T00:00:00Z" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
{
  "success": true,
  "code": "ORDERS_PULLED",
  "count": 2,
  "orders": [ ... ],
  "cursor": {
    "current": 120,
    "next": 122,
    "has_more": false,
    "limit": 50
  },
  "meta": { "requestId": "...", "timestamp": "..." }
}
POST/orders/statusValidation + Async

order_id veya increment_id ile sipariş durumunu günceller. simurgh_order_id verilirse mapping kaydına bağlanır. async:true, ?async=1 veya Prefer: respond-async ile ORDER_STATUS işi kuyruğa alınabilir. Aynı status ve boş yorum tekrarında action: unchanged döner.

{
  "increment_id":"4",
  "simurgh_order_id":"sim-order-001",
  "status":"processing",
  "comment":"Simurgh tarafından işleme alındı.",
  "async":true
}
Bu uç mevcut Simurgh Pazaryeri orders.status alanını günceller. Invoice ve shipment oluşturmuş sayılmaz; tam lifecycle işlemleri ayrı endpointlerle eklenecektir.
POST/orders/acknowledgeMapping + Async

Simurgh Pazaryeri siparişinin Simurgh tarafında başarıyla oluşturulduğunu bildirir. simurgh_order_id zorunludur; mapping kaydı acknowledged durumuna alınır ve acknowledged_at yazılır.

{"increment_id":"1000001","simurgh_order_id":"sim-order-001","async":false}
POST/orders/refundLifecycle + Async

Simurgh Pazaryeri RefundRepository üzerinden iade oluşturur. items verilmezse kalan iade edilebilir kalemlerin tamamı kullanılır. shipping, adjustment_refund ve adjustment_fee desteklenir. Bu işlem Simurgh Pazaryeri iade ve stok iade akışını çalıştırır; harici ödeme sağlayıcısına otomatik para iadesi garantisi vermez.

{"increment_id":"1000001","items":{"42":1},"shipping":0,"adjustment_refund":0,"adjustment_fee":0,"async":false}
POST/orders/invoiceLifecycle + Async

Siparişin faturalanabilir kalemleri için Simurgh Pazaryeri InvoiceRepository üzerinden fatura oluşturur. items verilmezse kalan tüm miktar faturalanır.

{"increment_id":"1000001","items":{"42":1},"async":false}
POST/orders/shipmentLifecycle + Async

Simurgh Pazaryeri ShipmentRepository üzerinden gönderi oluşturur, stok hareketini ve sipariş durumunu Simurgh Pazaryeri kurallarıyla işler. Inventory source kodu veya ID kabul edilir.

{"increment_id":"1000001","inventory_source":"default","carrier_title":"Yurtiçi Kargo","tracking_number":"123456789","items":{"42":1}}
POST/orders/cancelLifecycle + Async

OrderRepository iptal akışını kullanır; stok iadesi, kalem miktarları ve sipariş durumu Simurgh Pazaryeri tarafından güncellenir. force yalnız yönetici override ihtiyacında kullanılmalıdır.

{"increment_id":"1000001","force":false}

Master Import

POST/master/productsLegacy Response

Kategori, marka, ürün, fiyat, stok, SEO ve medya aktarımını tek servis akışında yürütür. Controller henüz FormRequest ve ortak response standardına taşınmamıştır.

{
  "product": {
    "simurgh_product_id":"prd_001",
    "sku":"MASTER001",
    "name":"Master Test Ürün",
    "description":"Ürün açıklaması",
    "price":199.90,
    "stock":7,
    "weight":1,
    "manage_stock":true,
    "status":"ACTIVE",
    "category":{"name":"Gümüş Kolye","slug":"gumus-kolye","parent_id":1},
    "brand":{"name":"Example Store"},
    "seo":{"url_key":"master-test-urun","meta_title":"Master Test Ürün"},
    "media":{"images":["https://cdn.example.com/product.jpg"]}
  }
}

Sistem

CLIphp artisan indexer:indexAPI route yok

/system/reindex endpointi mevcut route dosyasında yoktur. Gerektiğinde container içinde CLI kullanılır.

docker exec -it example-tenant-php php artisan indexer:index

Sync Jobs

v1.0.0.18: Takılı processing sync işlerini otomatik kurtaran queue resilience katmanı, simurgh:sync-recover komutu ve worker --recover-after seçeneği eklendi.

v1.0.0.19: Ürün, kategori ve marka uçlarına geriye uyumlu asenkron kuyruk desteği eklendi. İstek gövdesinde "async": true, sorguda ?async=1 veya Prefer: respond-async kullanıldığında API 202 Accepted ve jobUuid döndürür. Aynı tenant, job tipi, entity ve payload için aktif iş varsa yeni kayıt açılmaz; mevcut iş action: reused ile döner.

v1.0.0.17: Queue worker komutu, job type handler registry ve geçici/kalıcı hata sınıflandırması eklendi.

Asenkron kullanım ve duplicate koruması

Aşağıdaki uçlar senkron davranışı korur; isteğe bağlı olarak kuyruğa alınabilir: /products, ürün alt uçları, /categories ve /brands.

curl -X POST "$BASE_URL/products/stock?async=1" \
  -H "Content-Type: application/json" \
  -H "X-Simurgh-Key: $KEY" \
  -H "X-Simurgh-Token: $TOKEN" \
  -d '{"simurgh_product_id":"prd_001","sku":"SKU001","stock":12}'

Alternatif header: Prefer: respond-async. Başarılı cevap 202 Accepted olur:

{
  "success": true,
  "code": "SYNC_JOB_QUEUED",
  "action": "queued",
  "data": {
    "jobUuid": "...",
    "jobType": "PRODUCT_STOCK",
    "status": "pending"
  }
}

Aynı aktif payload tekrar gönderilirse code: SYNC_JOB_REUSED ve action: reused döner. İş tamamlandığında veya kalıcı olarak başarısız olduğunda aynı payload daha sonra yeniden kuyruğa alınabilir.

GET /sync/jobs/{jobUuid}

Tenant kapsamında işi ve son log kayıtlarını döndürür.

curl -H "X-Simurgh-Key: $KEY" \
  -H "X-Simurgh-Token: $TOKEN" \
  "$BASE_URL/sync/jobs/JOB_UUID"

POST /sync/jobs/{jobUuid}/retry

Yalnız failed veya retry durumundaki işi yeniden kuyruğa alır. Attempt sayacı sıfırlanır.

Durum geçişleri

pending | retry -> processing -> completed
                               -> retry
                               -> failed

Retry gecikmeleri: hemen, 1 dakika, 5 dakika, 15 dakika ve 60 dakika.

Queue Worker

Pending veya retry durumundaki simurgh_sync_jobs kayıtlarını tenant bazında claim eder ve job type → handler registry üzerinden ilgili servise yönlendirir.

CLIphp artisan simurgh:sync-workAktif
php artisan simurgh:sync-work --tenant=example-tenant --once
php artisan simurgh:sync-work --tenant=example-tenant --types=PRODUCT_PRICE --types=PRODUCT_STOCK
php artisan simurgh:sync-work --tenant=example-tenant --sleep=5 --max-jobs=100
SeçenekAçıklama
--tenantİşlenecek tenant. Verilmezse SIMURGH_CONNECTOR_TENANT kullanılır.
--onceEn fazla bir job işler ve çıkar. Deploy sonrası güvenli smoke test için uygundur.
--sleepJob yoksa bekleme süresi. Varsayılan 5 saniye.
--max-jobsBelirtilen sayıda job işlendikten sonra worker kapanır. 0 sınırsızdır.
--typesBir veya daha fazla job tipi filtresi.

Desteklenen job tiplerini görmek için:

php artisan simurgh:sync-types

Desteklenen çekirdek tipler: CATEGORY_UPSERT, BRAND_UPSERT, PRODUCT_CREATE, PRODUCT_UPDATE, PRODUCT_UPSERT, PRODUCT_FULL_SYNC, PRODUCT_PRICE, PRODUCT_STOCK, PRODUCT_MEDIA, PRODUCT_SEO, PRODUCT_VISIBILITY, PRODUCT_INFO.

Validation, mapping bulunamaması ve desteklenmeyen job tipi kalıcı hata kabul edilir. Ağ/sistem kaynaklı beklenmeyen hatalar retry/backoff akışına girer.

Panel Sync Audit

v1.0.0.34: Simurgh panel eski /products/full-sync endpointini kullanıyorsa bu çağrılar da aynı güvenli audit loguna yazılır. Kökte product nesnesiyle gelen payloadlar validation öncesi geriye uyumlu normalize edilir. v1.0.0.33: /products/panel-sync audit izi API üzerinden okunabilir.

GET/products/panel-sync/auditAktif

Son panel sync audit kayıtlarını listeler. trace_id verilirse tek ürün gönderiminin started/completed kayıtları destek ekranında hızlı bulunur.

curl -X GET "$BASE_URL/products/panel-sync/audit?limit=20" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"

curl -X GET "$BASE_URL/products/panel-sync/audit?trace_id=<panel_trace_id>" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"

curl -X GET "$BASE_URL/products/panel-sync/audit?endpoint=products/full-sync" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
QueryAçıklama
trace_idPanel response içindeki panel_trace_id ile aynı iz kaydını bulur.
skuAudit satırlarını SKU değerine göre filtreler.
eventstarted, completed veya queued gibi event değerine göre filtreler.
successtrue veya false ile sonuç filtreler.
endpointproducts/full-sync veya products/panel-sync değerine göre filtreler.
limitDönen kayıt sayısı. Varsayılan 20, üst sınır 100.
{
  "success": true,
  "code": "PANEL_SYNC_AUDIT_LISTED",
  "message": "Panel sync audit kayıtları listelendi.",
  "data": {
    "tenant": "example-tenant",
    "log_exists": true,
    "path": "storage/logs/simurgh-panel-sync.jsonl",
    "entries_count": 2,
    "entries": [
      {"event":"completed","trace_id":"uuid","success":true,"sku":"TEST001"},
      {"event":"started","trace_id":"uuid","summary":{"sku":"TEST001"}}
    ]
  },
  "meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}

v1.0.0.32: /products/panel-sync çağrıları için işlem başlangıcı ve sonucu credential içermeyen JSONL log olarak yazılır. Dosya üzerinden kontrol gerektiğinde:

tail -n 20 /home/example-tenant/www/storage/logs/simurgh-panel-sync.jsonl

Log ve audit API tüm ham payloadı yazmaz; SKU, kaynak ürün ID, kategori/marka özeti, işlem sonucu, Simurgh Pazaryeri ürün ID, failed step listesi ve hata/uyarı sayıları gibi güvenli özet alanları içerir.

Kalıcı Sync Worker

example-tenant-connector container artık boşta beklemez; Simurgh Pazaryeri uygulamasını mount ederek aşağıdaki komutu sürekli çalıştırır:

php artisan simurgh:sync-work --sleep=5

Worker yalnız pending ve zamanı gelmiş retry kayıtlarını işler. Başarılı işler completed, geçici hatalar retry, kalıcı veya deneme limiti dolan hatalar failed olur.

Yönetim komutları

docker logs --tail=100 example-tenant-connector
docker restart example-tenant-connector
docker exec -it example-tenant-connector php artisan simurgh:sync-types
docker exec -it example-tenant-connector php artisan simurgh:sync-work --tenant=example-tenant --once

Bu runtime değişikliği yeni HTTP endpoint eklemez; mevcut sync job API uçlarının arka plan yürütücüsünü kalıcı hale getirir.

v1.0.0.28 Sistem Notu

GET /doctor deploy sonrası hızlı sağlık kontrolü için eklenmiştir. /health sadece uygulama/veritabanı durumunu gösterirken /doctor route, tablo, catalog default, dokümantasyon sürümü, storage ve sync queue özetini de kontrol eder.

Dış Connector CLI

v1.0.0.34: Eski panel /products/full-sync çağrıları da audit izine girer. v1.0.0.33: Panel gönderim izi GET /products/panel-sync/audit ile API üzerinden okunabilir. v1.0.0.32: Canlı operatör ürün akışı Simurgh panelden yürütülür. /home/example-tenant/simurgh-commerce CLI komutları bağlantı kontrolü ve teknik smoke test/fallback içindir; operatöre JSON payload hazırlatılmaz. Panel ürün gönderimlerinin özet izi storage/logs/simurgh-panel-sync.jsonl altında tutulur.

cd /home/example-tenant/simurgh-commerce
cp -n .env.example .env
nano .env
php bin/simurgh-commerce version
php bin/simurgh-commerce auth:login
php bin/simurgh-commerce health
php bin/simurgh-commerce doctor
php bin/simurgh-commerce product:preflight --file storage/payloads/product.json
php bin/simurgh-commerce product:full-sync --file storage/payloads/product.json
php bin/simurgh-commerce product:full-sync --file storage/payloads/product.json --async

.env değerleri

SIMURGH_MARKETPLACE_CONNECTOR_BASE_URL=http://127.0.0.1:9001/simurgh-connector
SIMURGH_MARKETPLACE_CONNECTOR_KEY=<connector-key>
SIMURGH_MARKETPLACE_CONNECTOR_TOKEN=<connector-token>
SIMURGH_MARKETPLACE_CONNECTOR_TIMEOUT=30

Komutlar

auth:login credential doğrular. health temel bağlantı kontrolüdür. doctor deploy sonrası ayrıntılı sistem kontrolüdür. product:preflight ve product:full-sync yalnız teknik smoke test/fallback komutlarıdır; canlı ürün akışı Simurgh panelden çağrılan /products/full-sync veya /products/panel-sync ile yürütülür.

Canlı .env ZIP ile ezilmemelidir. Credential değerleri loglara yazılmaz; istek/cevap özeti ve product:full-sync başarı-hata özeti storage/logs/connector.log içine JSON satırı olarak kaydedilir.

Teknik product full-sync örneği

cp storage/payloads/product-full-sync.example.json storage/payloads/product.json
nano storage/payloads/product.json
php bin/simurgh-commerce product:full-sync --file storage/payloads/product.json
Bu örnek operatör akışı değildir. Canlı kullanımda ürün Simurgh panelden gönderilir. --async mevcut PRODUCT_FULL_SYNC job akışını kullanır.

V3 Salt-Okunur Katalog

Simurgh panelinin güvenli ilk kurulumda kategori ve mevcut mağaza ürünlerini okuması içindir. İki endpoint connector auth middleware arkasındadır ve veri değiştirmez.

GET /catalog/categories

Aktif kategori ağacını kimlik, parent, path, level ve leaf bilgileriyle döndürür.

GET /catalog/products

page ve en fazla 200 olan page_size ile ürün, SKU, barkod, kategori, fiyat, stok, özellik ve görsel snapshotı döndürür.

curl -s "$BASE_URL/catalog/categories" \
  -H "X-Simurgh-Key: <key>" -H "X-Simurgh-Token: <token>"

curl -s "$BASE_URL/catalog/products?page=1&page_size=100" \
  -H "X-Simurgh-Key: <key>" -H "X-Simurgh-Token: <token>"
Bu snapshot uzak mağazadan Simurgh'a okuma içindir. Merkezi stok kararını değiştirmez; eşleme ve tenant onayı Simurgh panelindeki V3 akışında yapılır.

Önerilen Mevcut Akış

1. Credential kontrolü: POST /auth/login
2. Bağlantı kontrolü: GET /health
3. Kurulum kontrolü: GET /doctor
4. Kategori: POST /categories
5. Marka: POST /brands
6. Ürün ön kontrol: POST /products/preflight
7. İlk ürün / tam senkron: Simurgh panel -> POST /products/full-sync veya /products/panel-sync
8. Teknik smoke test gerekirse: product:full-sync --file ...
9. Fiyat: POST /products/price
10. Stok: POST /products/stock
11. Bilgi / SEO / medya / görünürlük: ilgili ürün endpointi
12. Sipariş çekme: GET /orders/pull
13. Sipariş acknowledgement: POST /orders/acknowledge
14. Sipariş durumu: POST /orders/status
15. Fatura oluşturma: POST /orders/invoice
16. Gönderi oluşturma: POST /orders/shipment
17. İade oluşturma: POST /orders/refund
18. Sipariş iptali: POST /orders/cancel
Endpoint path’leri mevcut sözleşmedir. REST biçimine dönüştürülmeyecek; değişiklik gerekiyorsa önce bu doküman, route, request ve controller birlikte güncellenecektir.