Kozmoz Developer

API Referansı

Her uç için ne işe yaradığı, gereken yetki, tüm parametreler ve gerçek bir örnek cevap.

https://saglik.kozmoz724.com/api/v1

Hesap

Bağlantınızı doğrulamak için ilk çağıracağınız uç.

GET api/v1/me Yetki gerekmez

Anahtar bilgisi

Anahtarın hangi satıcıya ait olduğunu, hangi yetkileri taşıdığını ve istek sınırını döner. Entegrasyonu kurarken ilk bunu çağırın: cevap geliyorsa kimlik doğrulamanız çalışıyor demektir.

Örnek cevap — 200
{
  "vendorId": 1042,
  "vendorName": "Örnek Kozmetik",
  "keyName": "Entegra bağlantısı",
  "apiKey": "kzm_7QF3MHKD2NRAX9TB",
  "scopes": [
    { "code": "ProductRead", "title": "Ürün okuma" },
    { "code": "OrderRead", "title": "Sipariş okuma" }
  ],
  "rateLimit": { "windowSeconds": 10, "maxRequests": 50 }
}

Ürünler

Kataloğunuzu okuyun. Yazma uçları Faz 2'de eklenecek.

GET api/v1/products Yetki: Ürün okuma

Ürünleri listele

Yalnız sizin ürünlerinizi döner. Artımlı senkronizasyon için updatedSince kullanın: her seferinde bütün kataloğu çekmek yerine son çalışmadan bu yana değişenleri alırsınız.

ParametreTipZorunluAçıklama
pagetam sayıHayırSayfa numarası, 0'dan başlar. Varsayılan 0.
sizetam sayıHayırSayfa boyutu. Varsayılan 50, en fazla 200.
barcodemetinHayırBarkoda (GTIN) göre tam eşleşme.
skumetinHayırStok koduna göre tam eşleşme.
updatedSincetarih (ISO 8601)HayırBu tarihten sonra güncellenen ürünler. Örnek: 2026-08-01T00:00:00Z
Örnek cevap — 200
{
  "page": 0,
  "size": 50,
  "totalElements": 213,
  "totalPages": 5,
  "content": [
    {
      "id": 9412,
      "name": "Örnek Yüz Kremi 50 ml",
      "sku": "KZM-1001",
      "barcode": "8690000000017",
      "price": 249.90,
      "listPrice": 299.90,
      "stockQuantity": 42,
      "published": true,
      "brand": "Örnek Marka",
      "categoryIds": [ 118, 204 ],
      "createdOnUtc": "2026-03-11T09:24:00Z",
      "updatedOnUtc": "2026-08-14T18:02:11Z"
    }
  ]
}
GET api/v1/products/{id} Yetki: Ürün okuma

Tek ürün

Kimliğe göre tek ürün döner. Ürün size ait değilse 404 döner — başkasının ürününü sorgulayarak varlığını öğrenemezsiniz.

ParametreTipZorunluAçıklama
idtam sayıEvetÜrün kimliği.
Örnek cevap — 200
{
  "id": 9412,
  "name": "Örnek Yüz Kremi 50 ml",
  "sku": "KZM-1001",
  "barcode": "8690000000017",
  "price": 249.90,
  "listPrice": 299.90,
  "stockQuantity": 42,
  "published": true,
  "brand": "Örnek Marka",
  "categoryIds": [ 118, 204 ],
  "createdOnUtc": "2026-03-11T09:24:00Z",
  "updatedOnUtc": "2026-08-14T18:02:11Z"
}

Ürün yazma

Kataloğunuzu kendi sisteminizden yönetin. Gönderim kabul edilir, numara döner; sonucu sorgularsınız.

POST api/v1/products Yetki: Ürün yazma

Ürün oluştur (toplu)

Yeni ürünleri kuyruğa alır ve bir toplu istek numarası döner. Ürünler YAYINA KAPALI oluşturulur; satıcı panelinden kontrol edip yayınlarsınız. Görseli ve başlığı görülmeden bir ürünün vitrine düşmemesi için böyle.

ParametreTipZorunluAçıklama
itemslisteEvetÜrün satırları. Tek istekte en fazla 1000 satır.
items[].namemetinEvetÜrün adı.
items[].barcodemetinHayırBarkod (GTIN). Barkod veya stok kodundan biri zorunlu.
items[].skumetinHayırStok kodu.
items[].priceondalıkEvetSatış fiyatı.
items[].listPriceondalıkHayırÜstü çizili liste fiyatı.
items[].stockQuantitytam sayıHayırStok adedi.
items[].categoryIdtam sayıHayırKategori kimliği — kategori ucundan alınır.
items[].brandIdtam sayıHayırMarka kimliği — marka ucundan alınır.
items[].descriptionmetinHayırÜrün açıklaması.
items[].imageUrlslisteHayırGörsel adresleri. Yalnız https ve genel internet adresleri; iç ağ adresleri reddedilir.
Örnek cevap — 200
{
  "batchRequestId": "6f2a91c4d38b47e5ac1f7b0e29d5a833",
  "itemCount": 250,
  "status": "Queued",
  "message": "Ürünler kuyruğa alındı. Oluşturulan ürünler yayına kapalı gelir; satıcı panelinden kontrol edip yayınlayabilirsiniz."
}
PUT api/v1/products Yetki: Ürün yazma

Ürün güncelle (toplu)

Var olan ürünleri günceller. Ürün barkod veya stok koduyla bulunur; size ait olmayan bir barkod bulunamamış sayılır. Yalnız gönderdiğiniz alanlar değişir, göndermedikleriniz olduğu gibi kalır.

ParametreTipZorunluAçıklama
itemslisteEvetGüncellenecek satırlar. Tek istekte en fazla 1000 satır.
items[].barcodemetinHayırÜrünü bulmak için barkod.
items[].skumetinHayırÜrünü bulmak için stok kodu.
items[].publisheddoğru/yanlışHayırÜrünü yayına alır veya yayından kaldırır.
Örnek cevap — 200
{
  "batchRequestId": "b81d40f7c9a24e6d95c3e0182fa7d64b",
  "itemCount": 40,
  "status": "Queued",
  "message": "Güncellemeler kuyruğa alındı."
}
POST api/v1/products/price-and-stock Yetki: Ürün yazma

Fiyat ve stok güncelle (toplu)

Gün içinde en sık çağıracağınız uç. Yalnız fiyat ve stok değişir; ürün adı, açıklaması ve görselleri hiç dokunulmadan kalır — bu yüzden panelde elle yaptığınız düzeltmeler senkronizasyonla geri alınmaz.

ParametreTipZorunluAçıklama
itemslisteEvetSatırlar. Tek istekte en fazla 1000 satır.
items[].barcodemetinHayırÜrünü bulmak için barkod.
items[].skumetinHayırÜrünü bulmak için stok kodu.
items[].salePriceondalıkHayırYeni satış fiyatı.
items[].listPriceondalıkHayırYeni liste fiyatı.
items[].quantitytam sayıHayırYeni stok adedi.
Örnek cevap — 200
{
  "batchRequestId": "3c7e18a0b6d54f92ae0d47c8b1539f2a",
  "itemCount": 1000,
  "status": "Queued",
  "message": "Fiyat ve stok güncellemeleri kuyruğa alındı."
}
GET api/v1/products/batch-requests/{batchRequestId} Yetki: Ürün yazma

Toplu istek sonucu

Gönderiminizin durumunu ve SATIR BAZINDA sonucunu döner. 1000 satırın 3'ü hatalıysa 997'si işlenir ve yalnız 3'ü için sebep yazar; lineIndex ile kendi kaydınıza eşleştirirsiniz.

ParametreTipZorunluAçıklama
batchRequestIdmetinEvetGönderim sırasında dönen numara.
Örnek cevap — 200
{
  "batchRequestId": "3c7e18a0b6d54f92ae0d47c8b1539f2a",
  "type": "PriceAndStock",
  "status": "Completed",
  "itemCount": 3,
  "succeededCount": 2,
  "failedCount": 1,
  "createdOnUtc": "2026-08-19T08:14:02Z",
  "completedOnUtc": "2026-08-19T08:15:07Z",
  "items": [
    { "lineIndex": 0, "status": "Succeeded", "productId": 9412 },
    { "lineIndex": 1, "status": "Succeeded", "productId": 9413 },
    {
      "lineIndex": 2,
      "status": "Failed",
      "failReason": "Bu barkod veya stok koduna sahip ürününüz bulunamadı."
    }
  ]
}

Kargo

Siparişlerinizi kargolayın. Paketler satıcı bazında ayrı — kendi satırlarınızı yönetirsiniz.

GET api/v1/shipment-packages Yetki: Sipariş okuma

Paketleri listele

Kargolanmayı bekleyen ve kargolanmış paketlerinizi döner. Aynı siparişteki başka satıcının satırları ve kargo takip numarası burada GÖRÜNMEZ.

ParametreTipZorunluAçıklama
pagetam sayıHayırSayfa numarası, 0'dan başlar.
sizetam sayıHayırSayfa boyutu. Varsayılan 50, en fazla 200.
shippeddoğru/yanlışHayırtrue: yalnız kargolananlar, false: yalnız bekleyenler.
createdSincetarih (ISO 8601)HayırBu tarihten sonra oluşan siparişler.
Örnek cevap — 200
{
  "page": 0,
  "size": 50,
  "totalElements": 3,
  "totalPages": 1,
  "content": [
    {
      "orderId": 20481,
      "orderNumber": "20481",
      "orderStatus": "Processing",
      "shippingStatus": "NotYetShipped",
      "createdOnUtc": "2026-08-17T11:04:22Z",
      "vendorTotal": 499.80,
      "shipments": [],
      "lines": [
        { "id": 55120, "productId": 9412, "productName": "Örnek Yüz Kremi 50 ml", "sku": "KZM-1001", "quantity": 2, "unitPrice": 249.90, "totalPrice": 499.80 }
      ],
      "shipping": {
        "recipientName": "Ayşe Yılmaz",
        "phone": "05xxxxxxxxx",
        "addressLine": "Örnek Mah. Örnek Sk. No:1 D:2",
        "district": "Kadıköy",
        "city": "İstanbul",
        "postalCode": "34700"
      }
    }
  ]
}
GET api/v1/shipment-packages/{orderId} Yetki: Sipariş okuma

Tek paket

Siparişte size ait satır yoksa 404 döner.

ParametreTipZorunluAçıklama
orderIdtam sayıEvetSipariş kimliği.
Örnek cevap — 200
{ "orderId": 20481, "orderNumber": "20481", "shippingStatus": "NotYetShipped", "lines": [ ... ] }
PUT api/v1/shipment-packages/{orderId}/shipped Yetki: Sipariş yazma

Kargo bilgisi bildir

Sizin bu siparişteki satırlarınız için kargo paketi oluşturur ve takip numarasını kaydeder. Zaten kargolanmış satırlar tekrar paketlenmez. Siparişin kargo durumu kısmi/tam olarak otomatik belirlenir — çok satıcılı bir siparişte yalnız sizin gönderiminiz siparişin tamamını 'kargolandı' yapmaz.

ParametreTipZorunluAçıklama
orderIdtam sayıEvetSipariş kimliği.
trackingNumbermetinEvetKargo takip numarası.
carriermetinHayırKargo firması adı.
shippedOnUtctarih (ISO 8601)HayırKargoya veriliş anı. Boşsa şimdiki zaman kullanılır.
Örnek cevap — 200
{
  "id": 3312,
  "trackingNumber": "1234567890",
  "shippedOnUtc": "2026-08-19T09:21:00Z"
}

İadeler

Kendi ürünlerinize açılan iade taleplerini görün ve sonuçlandırın.

GET api/v1/returns Yetki: İade okuma

İadeleri listele

Yalnız sizin ürünlerinize açılmış talepler döner.

ParametreTipZorunluAçıklama
pagetam sayıHayırSayfa numarası, 0'dan başlar.
sizetam sayıHayırSayfa boyutu. Varsayılan 50, en fazla 200.
statusmetinHayırPending, Received, ReturnAuthorized, ItemsRepaired, ItemsRefunded, RequestRejected, Cancelled.
createdSincetarih (ISO 8601)HayırBu tarihten sonra açılan talepler.
Örnek cevap — 200
{
  "page": 0,
  "size": 50,
  "totalElements": 1,
  "totalPages": 1,
  "content": [
    {
      "id": 412,
      "orderId": 20481,
      "productId": 9412,
      "productName": "Örnek Yüz Kremi 50 ml",
      "quantity": 1,
      "status": "Pending",
      "reason": "Ürün beklediğim gibi değil",
      "requestedAction": "İade",
      "customerComment": "Kutusu ezikti.",
      "createdOnUtc": "2026-08-18T14:32:10Z"
    }
  ]
}
PUT api/v1/returns/{id} Yetki: İade yazma

İadeyi sonuçlandır

Talebin durumunu değiştirir. REDDEDERKEN GEREKÇE ZORUNLU — müşterinin neden reddedildiğini görmesi gerekiyor. Notlar üst üste yazılmaz, geçmiş korunur.

ParametreTipZorunluAçıklama
idtam sayıEvetİade talebi kimliği.
statusmetinEvetYeni durum.
notemetinHayırSatıcı notu. Reddederken zorunlu.
Örnek cevap — 200
{
  "id": 412,
  "orderId": 20481,
  "productId": 9412,
  "productName": "Örnek Yüz Kremi 50 ml",
  "quantity": 1,
  "status": "ReturnAuthorized",
  "createdOnUtc": "2026-08-18T14:32:10Z"
}

Siparişler

Siparişleriniz — yalnız size ait satırlarla.

GET api/v1/orders Yetki: Sipariş okuma

Siparişleri listele

Bir sipariş birden fazla satıcının ürününü içerebilir. Bu uç yalnız SİZİN satırlarınızı ve onların toplamını döner; siparişin genel toplamı başkalarının tutarını da içereceği için verilmiyor.

ParametreTipZorunluAçıklama
pagetam sayıHayırSayfa numarası, 0'dan başlar.
sizetam sayıHayırSayfa boyutu. Varsayılan 50, en fazla 200.
statusmetinHayırPending, Processing, Complete veya Cancelled.
createdSincetarih (ISO 8601)HayırBu tarihten sonra oluşan siparişler.
Örnek cevap — 200
{
  "page": 0,
  "size": 50,
  "totalElements": 7,
  "totalPages": 1,
  "content": [
    {
      "id": 20481,
      "orderNumber": "20481",
      "status": "Processing",
      "paymentStatus": "Paid",
      "shippingStatus": "NotYetShipped",
      "createdOnUtc": "2026-08-17T11:04:22Z",
      "vendorTotal": 499.80,
      "lines": [
        {
          "id": 55120,
          "productId": 9412,
          "productName": "Örnek Yüz Kremi 50 ml",
          "sku": "KZM-1001",
          "quantity": 2,
          "unitPrice": 249.90,
          "totalPrice": 499.80
        }
      ],
      "shipping": {
        "recipientName": "Ayşe Yılmaz",
        "phone": "05xxxxxxxxx",
        "addressLine": "Örnek Mah. Örnek Sk. No:1 D:2",
        "district": "Kadıköy",
        "city": "İstanbul",
        "postalCode": "34700"
      }
    }
  ]
}
GET api/v1/orders/{id} Yetki: Sipariş okuma

Tek sipariş

Siparişte size ait satır yoksa 404 döner. Numarayı artırarak başka siparişleri okumak mümkün değildir.

ParametreTipZorunluAçıklama
idtam sayıEvetSipariş kimliği.
Örnek cevap — 200
{ "id": 20481, "orderNumber": "20481", "status": "Processing", "vendorTotal": 499.80, "lines": [ ... ] }

Referans veri

Ürün gönderirken ihtiyaç duyacağınız kimlikler.

GET api/v1/categories Yetki: Referans veri

Kategoriler

Kategori ağacı. parentId ile üst kategoriye bağlanır, 0 ise kök kategoridir. Bu liste nadiren değişir; kendi tarafınızda önbelleğe alın.

ParametreTipZorunluAçıklama
pagetam sayıHayırSayfa numarası, 0'dan başlar.
sizetam sayıHayırSayfa boyutu. Varsayılan 50, en fazla 200.
Örnek cevap — 200
{
  "page": 0,
  "size": 50,
  "totalElements": 3911,
  "totalPages": 79,
  "content": [
    { "id": 118, "name": "Cilt Bakımı", "parentId": 12 }
  ]
}
GET api/v1/brands Yetki: Referans veri

Markalar

Sistemde tanımlı marka listesi.

ParametreTipZorunluAçıklama
pagetam sayıHayırSayfa numarası, 0'dan başlar.
sizetam sayıHayırSayfa boyutu. Varsayılan 50, en fazla 200.
Örnek cevap — 200
{ "page": 0, "size": 50, "totalElements": 240, "totalPages": 5, "content": [ { "id": 31, "name": "Örnek Marka", "parentId": 0 } ] }

Sağlık

Kimlik doğrulaması istemeyen tek uç.

GET api/v1/health Yetki gerekmez

Servis durumu

API'nin ve her bölümün ayakta olup olmadığını döner. Kendi izleme sisteminize bağlayabilirsiniz. Anahtar gerektirmez ve hiçbir iş verisi döndürmez.

Örnek cevap — 200
{
  "status": "ok",
  "timeUtc": "2026-08-18T20:14:03Z",
  "groups": {
    "products": true,
    "orders": true,
    "returns": true,
    "reference": true,
    "account": true,
    "webhooks": true
  }
}

Hata kodları

Bütün hatalar aynı zarfla döner. Kodunuzu code alanına göre yazın; message metni zamanla iyileştirilebilir.

HTTPKodAnlamıNe yapmalısınız
400missing_user_agentUser-Agent başlığı gönderilmemiş.İsteklerinize entegrasyonunuzu tanıtan bir User-Agent ekleyin. Sorun çıktığında sizi bulabilmemiz için zorunlu.
400validation_failedGönderilen değerlerden biri geçersiz.Cevaptaki details listesi hangi alanın neden reddedildiğini söyler; o alanı düzeltip tekrar gönderin.
401unauthorizedKimlik doğrulanamadı.Anahtar ve gizli anahtarın doğru, aralarında iki nokta olduğundan ve base64'e doğru çevrildiğinden emin olun. Anahtar iptal edilmiş veya kapatılmış da olabilir — satıcı panelinden kontrol edin.
403insufficient_scopeAnahtarın bu iş için yetkisi yok.Satıcı panelinden anahtara gereken yetkiyi ekleyin ya da o yetkiye sahip yeni bir anahtar oluşturun.
404not_foundKayıt bulunamadı.Kayıt gerçekten yok olabilir ya da size ait olmayabilir. Başkasının kaydı da 404 döner — bu bilinçlidir.
429rate_limit_exceededİstek sınırı aşıldı.Retry-After başlığındaki saniye kadar bekleyip tekrar deneyin. Toplu işlemlerde istekleri zamana yayın.
500internal_errorBizim tarafımızda beklenmeyen bir hata.Kısa bir bekleme sonrası tekrar deneyin. Sürerse cevaptaki requestId ile bize yazın; o numarayla isteği anında buluruz.
404 her zaman "yok" demek değildir. Size ait olmayan bir kayıt da 404 döner. Bu bilinçli: "yetkiniz yok" demek, o kimlikte bir kaydın var olduğunu doğrulamak olurdu ve numara deneyerek başkalarının katalog büyüklüğü öğrenilebilirdi.
Aradığınız ucu bulamadıysanız yol haritasına bakın — hangi kapsamın sırada olduğunu orada yazıyoruz.