API Uçları
Yönetim ve okuma uçları, örnek istekler
Zenginleştirmenin yönetim ve okuma uçları. Panel bunların hepsini kendisi kullanır; kendi aracınızdan blok ve kural yönetmek ya da içeriği okumak isterseniz bu sayfadaki sözleşmeye bakın. Kural ve blok kavramları için: Genel Bakış.
Yönetim uçları
Panelin kullandığı uçlar https://api.selwise.com/api/v1/product-enrichment altındadır, oturum jetonu (Authorization: Bearer) ister ve product_enrichment modülüne bağlıdır. Modül yoksa 402, rol yetkisizse 403 döner. Yetkiler: enrichment:view, enrichment:create, enrichment:update, enrichment:delete. İstek gövdesinde bilinmeyen alan göndermek 400 döner (örneğin app kanalında selector).
| Uç | Ne yapar |
|---|---|
GET /blocks?siteId=, GET /blocks/:id | Blokları listeler, getirir |
POST /blocks, PUT /blocks/:id, DELETE /blocks/:id | Oluşturur, günceller, siler. Bir kural tarafından yerleştirilen blok silinmez (409). Tasarımcıyla (ağaçla) kurulmuş bloğa html ya da css göndermek 409 döner: değiştirmek için tree, elle düzenlemeye dönmek için tree: null gönderin |
POST /blocks/:id/duplicate | Kopyalar (Draft olarak) |
GET /blocks/attribute-keys?siteId= | ${attr.alan} olarak kullanılabilecek özel alanlar |
GET /assignments?siteId=, GET /assignments/:id | Kuralları listeler, getirir |
POST /assignments, PUT /assignments/:id, DELETE /assignments/:id | Oluşturur, günceller, siler |
PATCH /assignments/:id/toggle | Gövde status: draft, active ya da paused |
GET, POST, DELETE /assignments/:id/codes | Kuralın ürün kodlarını listeler (page, limit), ekler (codes, en fazla 5.000), çıkarır (codesRaw). limit varsayılan 50, en fazla 200 |
POST /assignments/conditions/preview | Katalog koşullarının kaç ürünle eşleştiğini döndürür (siteId, conditions, limit) |
GET /preview?siteId=&code= | Bir ürün için mağazanın alacağı yanıtın aynısı (test modu dahil, önbelleksiz) |
GET /preview/tokens?siteId=&code= | Bir ürünün yer tutucu değerleri |
Bir kuralın temel alanları (POST /assignments): siteId, blockIds (1 ile 10 arası, sıra çizim sırasıdır), matchType (codes, all, conditions), selector (web kanalında zorunlu, en fazla 255 karakter), insertPosition (before, after, inside-start, inside-end, replace), placementKey, renderMode (client, auto, server), priority (-1000 ile 1000), conflictBehavior (stack, exclusive), status, isTestMode, primaryGoal (conversion, revenue, click_rate), segmentTargetingMode (all, include, exclude), segmentIds (en fazla 50), startsAt, endsAt (ISO 8601), codes ve conditions (en fazla 10). Güncellemede boş gönderilmeyen alan olduğu gibi kalır; placementKey: "", startsAt: null, endsAt: null ilgili değeri temizler.
Mağazanın kullandığı herkese açık uçlar, kanal anahtarıyla çalışır:
GET /public/sites/SITE_KEY/enrichments?code=KODwidget'ın okuduğu yanıtı verir (items, her biri ham bloklarla, vetokens). Test modundaki kurallar için&test=1.GET /public/sites/SITE_KEY/app/enrichments?code=KOD&slots=ad1,ad2uygulama kanalı içindir (Mobil Uygulamada Zenginleştirme).- Sunucunuzdan içerik basmak için: Sunucu Taraflı Render.
Örnek: blok ve kural oluşturma
Önce blok (HTML ve CSS ayrı alanlardadır; tree göndermezseniz html zorunludur):
curl -X POST https://api.selwise.com/api/v1/product-enrichment/blocks \
-H "Authorization: Bearer OTURUM_JETONU" \
-H "Content-Type: application/json" \
-d '{
"siteId": "KANAL_UUID",
"name": "Garanti kutusu",
"html": "<div class=\"garanti\"><h4>Garanti</h4><p>${attr.garanti_suresi}</p></div>",
"css": ".garanti { padding: 16px; border: 1px solid var(--selwise-border, #e5e5e5); }",
"reservedHeightPx": 96,
"status": "active"
}'
Yanıtta bloğun id değeri gelir. Sonra bu bloğu bir kurala bağlayın:
curl -X POST https://api.selwise.com/api/v1/product-enrichment/assignments \
-H "Authorization: Bearer OTURUM_JETONU" \
-H "Content-Type: application/json" \
-d '{
"siteId": "KANAL_UUID",
"blockIds": ["BLOK_UUID"],
"matchType": "conditions",
"conditions": [{ "field": "brand", "operator": "equals", "value": "Nike" }],
"selector": ".product-description",
"insertPosition": "after",
"priority": 10,
"conflictBehavior": "stack",
"status": "active",
"primaryGoal": "conversion"
}'
{
"id": "3f6c…",
"siteId": "KANAL_UUID",
"matchType": "conditions",
"selector": ".product-description",
"insertPosition": "after",
"placementKey": null,
"renderMode": "client",
"priority": 10,
"conflictBehavior": "stack",
"status": "active",
"isTestMode": false,
"primaryGoal": "conversion",
"segmentTargetingMode": "all",
"segmentIds": [],
"startsAt": null,
"endsAt": null
}
Yanıt kısaltılmıştır: gerçek yanıt kuralın blok listesini, koşullarını ve zaman damgalarını da taşır. Koşul kuralı oluşturulunca eşleşen ürünler aynı istekte hesaplanıp yazılır.
Herkese açık okuma
Mağazadaki widget bir ürün sayfasında şu ucu çağırır (kanal anahtarıyla, oturum jetonu gerekmez):
curl "https://api.selwise.com/api/v1/public/sites/SITE_KEY/enrichments?code=04260"
{
"v": "mfb3k9a.3",
"items": [
{
"assignmentId": "3f6c…",
"selector": ".product-description",
"insertPosition": "after",
"order": 0,
"blocks": [
{ "blockId": "9a1d…", "html": "<div class=\"garanti\">…</div>", "css": "…", "reservedHeightPx": 96 }
],
"segmentTargetingMode": "all",
"segmentIds": [],
"isTestMode": false
}
],
"tokens": { "code": "04260", "title": "Kırmızı Keten Gömlek", "price": 899.9, "currency": "TRY", "attrs": { "garanti_suresi": "2 yıl" } }
}
items çakışma kurallarına göre sıralıdır (order); yer tutucular tokens ile istemcide doldurulur. Ürün katalogda yoksa ya da hiçbir kural eşleşmiyorsa items boş döner. 100 karakterden uzun kod, hata değil boş yanıt alır. Yanıt ürün kodu başına önbelleğe alınır (içerik en fazla 5 dakika, boş yanıt en fazla 1 dakika).
Hata kodları
| Kod | Ne zaman |
|---|---|
| 400 | Gövde doğrulanamadı: yanıt alan: cümle biçiminde hangi alanın neden reddedildiğini söyler. Geçersiz seçici, 255 karakter üstü seçici, 10'dan fazla blok ya da koşul, geçersiz yuva adı, bilinmeyen alan, app kanalında selector gönderme |
| 401 | Oturum jetonu yok ya da süresi dolmuş |
| 402 | Hesapta Ürün Zenginleştirme modülü yok |
| 403 | Rolün yetkisi yok (enrichment:*); Marketing silemez |
| 404 | Kanal, blok ya da kural bulunamadı (başka organizasyona ait olanlar dahil) |
| 409 | Blok hâlâ bir kuralda kullanılıyor, ya da tasarımcı bloğuna html/css gönderildi |
| 429 | Genel istek sınırı |
Son güncelleme: 10 Ekim 2026