categories/create · update · delete ✓ CanlıKategori kataloğunu yazar. Scope ürünlerle aynıdır (products:write) — kategoriler ürün/menü domain'inin parçasıdır. Sahiplik/idempotency/hata/echo kuralları katalog yazma ile ortaktır.
← API Uçları · Scope: products:write.
POST /plugin-api/categories/create
{
"title": "Tatlılar", // ZORUNLU (2..100)
"active": true, // ops (default true)
"color": "#ff8800", // ops (<=32)
"languages": { "en": { "title": "Desserts" } }, // ops
"idempotencyKey": "cat-1" // ops
}id, ürünlerin category alanında kullanılır → önce kategori, sonra ürün (products/create).POST /plugin-api/categories/update
{ "id": "a0-0c", "title": "Tatlılar & İçecekler" } // {id} + title/active/color/languages'ten en az biri{ id } + title/active/color/languages'ten en az biri. Sahiplik kontrollü (notOwned).
POST /plugin-api/categories/delete
{ "id": "a0-0c" }plugin.catalog.categoryNotEmpty. Önce ürünleri silin/başka kategoriye taşıyın. (Kaskad silme eklentilere kapalı — güvenli ret.)categories/list ile aynı şekil: { id, title, image, color, rank, active, languages }.
create ile oluşturduğunuz her kayıt eklentinize damgalanır (sahiplik).update ve delete yalnız KENDİ oluşturduğunuz kayıtlarda çalışır — işletmenin veya başka eklentinin kaydını düzenleyemez/silemezsiniz → plugin.catalog.notOwned. (Slack chat.delete deseni.)id ile kendi tarafınızda takip edin; okuma uçları sahiplik bilgisi döndürmez.Tüm create uçları: idempotencyKey (≤128 char, önerilir) → retry'da duplicate yazmaz, ilk başarılı yanıtı aynen döner (24sa pencere; eklenti+tenant+entity başına). Eşzamanlı 2. istek işlenirken → plugin.catalog.duplicateInProgress (kısa bekle, aynı key ile tekrar dene). update/delete doğal idempotenttir (silinmiş kayda tekrar delete → plugin.catalog.notFound).
Hatalar HTTP 200 + { success:false, message } (rate limit 429 hariç).
| message | Anlam |
|---|---|
| joi doğrulama mesajı | Eksik/yanlış tip alan veya tanımsız alan (kütle-atama engeli) |
| plugin.scope.denied | Gerekli yazma scope'u (products:write) onaylı değil |
| plugin.catalog.notFound | id ile kayıt bulunamadı |
| plugin.catalog.notOwned | Kayıt sizin eklentinizce oluşturulmamış (update/delete reddi) |
| plugin.catalog.categoryNotEmpty | Silinmek istenen kategoriye bağlı ürünler var |
| plugin.catalog.duplicateInProgress | Aynı idempotencyKey ile eşzamanlı 2. istek |
| plugin.rateLimited | Ortak write kovası aşıldı (HTTP 429; varsayılan 20/dk — Limitler) |
Her başarılı yazma ilgili kanonik event'i tetikler (category.*).
id'yi saklayıp event data.id ile eşleyin. Event data'sı bu uçların yanıt data'sıyla aynı şekildedir.