Web (Site Kurucu)

sites

53 uç · /api/web/v1/sites

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 53 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.

GET/api/web/v1/sites

`GET /api/web/v1/audit`

Oturum
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites

`POST /api/web/v1/sites/{site}/posts`

Oturum
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PATCH/api/web/v1/sites/{site}

`PATCH /api/web/v1/posts/{post}`

OturumYol parametresi: site
İstek
curl -X PATCH "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/analytics

`GET /api/web/v1/sites/{site}/analytics`

OturumYol parametresi: site

# 🔴 Rakamlar HAM DEĞİL, kullanıcı sorusunun cevabı Panel "hangi sayfa okundu · nereden geldiler · hangi cihaz · şu an kaç kişi" diye sorar. Ham satır dökmek panele bir tablo verir, bir CEVAP vermez.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/analytics" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/approvals

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/approvals" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/authors

`GET /api/web/v1/sites/{site}/authors`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/authors" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/authors

`POST /api/web/v1/sites/{site}/authors`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/authors" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/backups

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/backups" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/backups

`POST /api/web/v1/sites/{site}/posts`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/backups" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/blocks

`GET /api/web/v1/sites/{site}/blocks` — editörün paleti.

OturumYol parametresi: site

🔴 Katalog SİTEYE bağlıdır, kiracıya değil: aynı kiracının iki sitesi FARKLI tema kullanabilir ve her birinin paleti kendi temasının bloklarını göstermeli. Kiracı düzeyinde dönen bir uç, bir sitede olmayan bir bloğu palete koyar ve kullanıcı onu ekleyip çizilmediğini görür.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/blocks" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/calendar

`GET /api/web/v1/sites/{site}/calendar`

OturumYol parametresi: site

🔴 Sayfa · yazı · fikir TEK yanıtta: üç ayrı uç, panelin üç turu birleştirmesi ve üçünün AYRI süzülmesi demekti — kullanıcı "takvimimde eksik var" der.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/calendar" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/comments

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/comments" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/duplicate

`POST /api/web/v1/sites/{site}/menus/{handle}/duplicate` (BLE2-13443)

OturumYol parametresi: site

🔴 **Çoğaltma bir KOPYALAMA değil, bir BAŞLANGIÇtır.** Dile göre ikinci bir menü kuran ya da altbilgi menüsünü ana menüden türeten kullanıcı, 20 satırı elle yeniden yazmak zorunda kalmamalı (CHAN-01'in bu ekrandaki hâli). ⚠ Hedef anahtar DOLUYSA reddedilir (409): sessizce ezmek, kullanıcının üstünde çalıştığı menüyü kaybettirmektir.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/duplicate" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/event-destinations

`GET /api/web/v1/sites/{site}/blocks` — editörün paleti.

OturumYol parametresi: site

🔴 Katalog SİTEYE bağlıdır, kiracıya değil: aynı kiracının iki sitesi FARKLI tema kullanabilir ve her birinin paleti kendi temasının bloklarını göstermeli. Kiracı düzeyinde dönen bir uç, bir sitede olmayan bir bloğu palete koyar ve kullanıcı onu ekleyip çizilmediğini görür.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/event-destinations" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/event-destinations

Sayaçları güncelle (tek transaction).

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/event-destinations" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/forms

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/forms" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/forms

`POST /api/web/v1/sites/{site}/posts`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/forms" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/goals

`GET /api/web/v1/sites/{site}/goals` — hedefler + dönüşüm sayıları.

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/goals" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/goals

`POST /api/web/v1/sites/{site}/goals`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/goals" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/handover-check

`GET /api/web/v1/sites/{site}/handover-check`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/handover-check" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/health

`GET /api/web/v1/sites/{site}/health`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/health" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/home/{page}

`POST /api/web/v1/sites/{site}/home/{page}` — ana sayfayı seç.

OturumYol parametresi: sitepage

⚠ Sayfa **YAYINDA olmalı**: kök adres taslak bir sayfaya bağlanırsa ziyaretçi 404 alır ve müşteri bunu ürün arızası sanar.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/home/<page>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/ideas

`GET /api/web/v1/sites/{site}/ideas` — yalnız DÖNÜŞMEMİŞ fikirler.

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/ideas" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/ideas

`POST /api/web/v1/sites/{site}/ideas`

OturumYol parametresi: site

🔴 Fikir bir SAYFA DEĞİLDİR: sayfa bir adres, bir sürüm defteri ve bir yayın kapısı taşır. Her fikir için taslak sayfa açmak, sayfa listesini hiç yazılmamış başlıklarla doldurur ve sayfa tavanını (5000) fikirlerle yakar.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/ideas" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/library

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/library" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/library

`POST /api/web/v1/sites/{site}/posts`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/library" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/media

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/media" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/media

`POST /api/web/v1/sites/{site}/media` — çok parçalı yükleme (panel).

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/media" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/media/{media}/transform

Görseli dönüştür ve **YENİ bir kütüphane kaydı** aç.

OturumYol parametresi: sitemedia

# 🔴 ORİJİNAL KORUNUR Yerinde yazan bir sürüm geri alınamaz bir düzenleme yapar: kullanıcı yanlış kırptığında ilk hâli KAYBOLUR ve "geri al" diye bir şey olmaz. Ve o görsel yayındaki bir sayfada kullanılıyorsa, ziyaretçi düzeltilmemiş bir kırpmayı anında görür. Yeni kayıt, kullanıcının kararını geri alınabilir kılar. ⚠ Yeni kayıt kotadan DÜŞER ve panel bunu söyler — sessizce iki kat yer tüketen bir düğme, kotanın neden dolduğunu anlaşılmaz yapardı.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/media/<media>/transform" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/media/{media}/usage

`GET /api/web/v1/sites/{site}/media/{id}/usage`

OturumYol parametresi: sitemedia
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/media/<media>/usage" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/media/bulk-delete

`POST /api/web/v1/sites/{site}/media/bulk-delete` (BLE2-13402)

OturumYol parametresi: site

🔴 Kısmi başarı SESSİZ kalmaz: her kayıt için sonuç döner. *"İşlem tamamlandı"* diyen bir toplu uç, kullanıcıya yapılmamış bir işi yapılmış gösterir (sayfa toplu işleminin aynı kararı).

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/media/bulk-delete" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/menus

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/menus" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/web/v1/sites/{site}/menus/{handle}

`PUT /api/web/v1/sites/{site}/menus/{handle}` — upsert.

OturumYol parametresi: sitehandle

🔴 Upsert, POST/PATCH ayrımı DEĞİL: menü `handle` ile adreslenir ("ana", "altbilgi") ve tema onu o adla çağırır. Kullanıcının "ana menü var mı" sorusunu sorup ona göre POST ya da PATCH seçmesi, panelde iki yol demekti.

İstek
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/menus/<handle>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/menus/{handle}/duplicate

`POST /api/web/v1/sites/{site}/menus/{handle}/duplicate` (BLE2-13443)

OturumYol parametresi: sitehandle

🔴 **Çoğaltma bir KOPYALAMA değil, bir BAŞLANGIÇtır.** Dile göre ikinci bir menü kuran ya da altbilgi menüsünü ana menüden türeten kullanıcı, 20 satırı elle yeniden yazmak zorunda kalmamalı (CHAN-01'in bu ekrandaki hâli). ⚠ Hedef anahtar DOLUYSA reddedilir (409): sessizce ezmek, kullanıcının üstünde çalıştığı menüyü kaybettirmektir.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/menus/<handle>/duplicate" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/not-found

`GET /api/web/v1/sites/{site}/not-found` — 404 raporu (BLE2-13496).

OturumYol parametresi: site

# 🔴 Rapor bir GÖREV LİSTESİDİR Her satır **öneri** taşır: aynı yolda çöpte/taslakta bir sayfa varsa *"yayınla"*, benzer bir yol varsa *"yönlendir"*, hiçbiri yoksa *"sayfa yaz"*. Yalnız sayı gösteren bir rapor, kullanıcıya ne yapacağını söylemez.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/not-found" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/pages

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/pages" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/pages

`POST /api/web/v1/sites/{site}/posts`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/pages" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/pages/bulk

`POST /api/web/v1/sites/{site}/pages/bulk` — toplu yayınla/kaldır/arşivle/sil.

OturumYol parametresi: site

## 🔴 Kısmi başarı SESSİZ kalmaz 200 sayfanın 3'ü yayınlanamadıysa (sürümü yok, yayında değil, alt sayfası var) uç **hangisinin neden** olduğunu satır satır söyler. "İşlem tamamlandı" diyen bir toplu uç, kullanıcıya yapılmamış bir işi yapılmış gösterir ve o bunu ancak ziyaretçi şikayet edince öğrenir. ## 🔴 Her eylem KENDİ iznini ister `publish` → `web.publish`; gerisi `web.content.write`. Tek bir "toplu işlem" izni tanımlamak, yayın kapısını toplu uç üzerinden atlatmak olurdu — tek sayfada `publish` bayrağının ayrı izin istemesiyle aynı gerekçe. ⚠ **Her sayfa KENDİ tx'inde** işlenir: tek tx'te biri düşerse hepsi geri alınır ve kullanıcı 199 başarılı işini kaybeder. Toplu işlem bir atomiklik vaadi DEĞİLDİR; rapor vaadidir.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/pages/bulk" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/posts

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/posts" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/posts

`POST /api/web/v1/sites/{site}/posts`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/posts" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/redirects

`GET /api/web/v1/audit`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/redirects" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/redirects

`POST /api/web/v1/sites/{site}/posts`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/redirects" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/redirects/import

`POST /api/web/v1/sites/{site}/redirects/import`

OturumYol parametresi: site

# 🔴 Kısmi başarı SESSİZ KALMAZ Yanıt `{eklenen, guncellenen, atlanan, hatalar[]}` döner. *"İçe aktarıldı"* diyen bir uç, kullanıcıya yapılmamış bir işi yapılmış gösterir ve o bunu ancak ziyaretçi şikayet edince öğrenir.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/redirects/import" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/search-analytics

`GET /api/web/v1/sites/{site}/search-analytics` — PANEL düzlemi.

OturumYol parametresi: site

# 🔴 Asıl değerli soru "aranan ama BULUNAMAYAN"dır "En çok aranan" ilginç bir istatistiktir; **sıfır sonuç veren aramalar** ise bir YAPILACAKLAR listesidir: müşterinin sitesinde eksik olan içeriği tam olarak o liste söyler. İkisi AYRI döner. ⚠ İzin `web.view`: bu bir içerik kararı değil, bir okuma. Ama `visitor_hash` YANITTA GEÇMEZ — o bir spam/tekillik sinyalidir, ekrana basmak onu bir "ziyaretçi kimliği" sanmaya davet ederdi.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/search-analytics" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/settings

`GET /api/web/v1/sites/{site}/settings` — çözülmüş ayarlar + KATALOG.

OturumYol parametresi: site

⚠ Katalog yanıtın İÇİNDE gelir: panel ikinci bir ayar listesi tutmaz. Gömülü liste sunucudakiyle sessizce ayrışır (DEV-01'in "kapsam kataloğu tek kaynaktadır" dersi).

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/settings" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PATCH/api/web/v1/sites/{site}/settings

`PATCH /api/web/v1/sites/{site}/settings` — ayarları BİRLEŞTİREREK yaz.

OturumYol parametresi: site
İstek
curl -X PATCH "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/settings" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/taxonomies

`GET /api/web/v1/sites/{site}/taxonomies`

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/taxonomies" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/{site}/taxonomies

`POST /api/web/v1/sites/{site}/taxonomies`

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/taxonomies" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/templates

`GET /api/web/v1/sites/{site}/templates` — sayfa şablonu seçenekleri

OturumYol parametresi: site

(BLE2-12889). # 🔴 Liste AKTİF TEMADAN gelir, panele GÖMÜLMEZ Şablon kümesi temanın `templates/` dizinidir ve her tema farklıdır. Panele gömülü bir liste, kiracının yüklediği temada olmayan bir şablonu seçtirir; sayfa o şablonu bulamaz, sessizce `page`e düşer ve kullanıcı "seçtim ama değişmedi" der (DEV-01'in bu ekrandaki hâli). ⚠ `page` DAİMA listede: `ZORUNLU_SABLON`dur ve her tema onu taşımak zorundadır (`tema_paketi` doğrulaması). Tema yüklenmemişse yerleşik varsayılan temanın tek şablonu odur.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/templates" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/web/v1/sites/{site}/theme

`PUT /api/web/v1/sites/{site}/theme`

OturumYol parametresi: site
İstek
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/theme" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/theme/history

`GET /api/web/v1/sites/{site}/theme/history` — bu sitenin temasının

OturumYol parametresi: site

SÜRÜMLERİ (BLE2-13272 · 14874 · 14875). # 🔴 Sürüm bir GİT COMMIT'i değil, YÜKLENMİŞ BİR PAKETTİR Her yükleme `web.themes`te AYRI bir satırdır (`themes_ad_surum_uk`: aynı ad+sürüm iki kez kurulamaz). "Geri alma" bu yüzden ayrı bir mekanizma GEREKTİRMEZ: önceki sürümün satırı DURUYOR ve `PUT …/theme` onu aktive eder — üstelik uyumluluk raporuyla (karşılıksız bloklar, taşınan ayarlar) birlikte. Eksik olan tek şey **hangi sürümlerin var olduğunu görmekti**; görmediği bir şeye geri dönemeyen kullanıcı için o mekanizma YOKTU. ⚠ Ölçüt tema **ADIDIR**: sürümler aynı adı taşıyan satırlardır. `digest` UNIQUE DEĞİLDİR (aynı paketi ikinci kez kurmak meşru bir istektir) ve kimlik ölçütü olamaz.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/theme/history" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/sites/{site}/translations

`GET /api/web/v1/sites/{site}/blocks` — editörün paleti.

OturumYol parametresi: site

🔴 Katalog SİTEYE bağlıdır, kiracıya değil: aynı kiracının iki sitesi FARKLI tema kullanabilir ve her birinin paleti kendi temasının bloklarını göstermeli. Kiracı düzeyinde dönen bir uç, bir sitede olmayan bir bloğu palete koyar ve kullanıcı onu ekleyip çizilmediğini görür.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/translations" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/sites/ensure-first

`POST /api/web/v1/sites/ensure-first` — **kiracının ilk sitesini garanti eder**

Oturum

(BLE2-12743). ## 🔴 Neden "lisans açılınca" DEĞİL, panele ilk girişte İlk akla gelen, lisansı açan yolun (`card_verify_callback`, admin onayı, eklenti ekleme) siteyi de açmasıdır. Üç sebeple reddedildi: * **Çekirdek `web.sites`i GÖREMEZ.** FORCE RLS altındadır ve kiracı bağlamı kurulmadan yapılan sorgu hata VERMEZ — sessizce **0 satır** döner (COMMERCE-01'in kök dersi). Orada yazılan bir "site var mı" kontrolü daima "yok" der ve her lisans açılışında yeni bir site doğardı. * **Lisansı açan YOL BİR TANE DEĞİL.** Kart doğrulama, KYC onayı, plan değişimi, eklenti ekleme, admin… Kanca hepsine tek tek yazılırsa er geç birinde unutulur (bu deponun en pahalı dersi). * **Kurulum sihirbazı zaten ilk girişte çalışır.** Site oluşturma onun ilk adımıdır; iki yerden açmak, sihirbazın adım sayacını yalanlar. ## Sözleşme * **İdempotent**: kiracının zaten sitesi varsa hiçbir şey yapmaz ve var olanı döner. Kullanıcı paneli her açtığında yeni site açan bir uç, çoklu site tavanını üç günde doldururdu. * Site **TASLAK** doğar — içi boş bir siteyi ziyaretçiye açmak müşteriye *"sitem bomboş yayında"* dedirtir. * **Ad kiracının ünvanından** gelir; boşsa okunur bir yedek. Adsız bir site seçicide metinsiz bir satırdır (V7 dersi).

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/ensure-first" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
Bu sayfa işine yaradı mı?