Web (Site Kurucu)

sites

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

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 187 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}/ab-tests

GET /api/web/v1/sites/{site}/ab-tests

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/ab-tests" \
  -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}/app

GET /api/web/v1/sites/{site}/business

OturumYol parametresi: site

⚠ Katalog YANITIN İÇİNDE gelir (DEV-01): panel gün adlarını ve sosyal platform listesini GÖMMEZ — gömülü bir liste, sunucuya yeni bir platform eklendiği gün onu hiç göstermez.

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

Bir sayfa görüntülemesini yaz.

OturumYol parametresi: site

# 🔴 Ölçüm ziyaretçiyi BEKLETMEZ Yazma tokio::spawn ile arka plana alınır: analitik bir KOLAYLIKTIR ve sayfanın gecikmesi ondan önemlidir. DB yavaşlarsa ziyaretçi bunu HİÇ hissetmez ("ağ öldü ≠ veri yok"un ölçüm sürümü). # 🔴 Bot SAYILMAZ Bot trafiği sayaçları şişirir ve müşteri kendi sitesinin gerçek ziyaretçisini göremez. Sınıf yine de HESAPLANIR (cihaz) ama yazılmaz — yazsaydık panelde ayrı bir "bot" satırı olurdu ve toplamı bozardı.

İstek
curl -X PATCH "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/app" \
  -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}/automation/rules

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

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

GET /api/web/v1/sites/{site}/mail/log

OturumYol parametresi: site

🔴 "Gitti mi" sorusunun cevabı burada. Bu ekran olmadan kiracı, form yanıtının ulaşıp ulaşmadığını ancak ziyaretçi şikayet edince öğreniyordu.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/automation/runs" \
  -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}/badges

GET /api/web/v1/sites/{site}/badges

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

POST /api/web/v1/sites/{site}/badges

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/badges" \
  -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}/donation-campaigns

OturumYol parametresi: site
İ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}/bookings

GET /api/web/v1/sites/{site}/bookings (BLE22-14454 hazırlığı)

OturumYol parametresi: site

🔴 Kapı web.attendees.read: randevu KİŞİSEL VERİDİR (ad · e-posta · telefon) ve içerik yazma iznine bağlanmaz.

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

GET /api/web/v1/sites/{site}/bookings/day — günlük liste + doluluk

OturumYol parametresi: site

(BLE22-14454 · 14455 · 14458). 🔴 Gün SUNUCUNUN günüdür: istemcinin saatine bakan bir varsayılan, farklı dilimdeki bir kullanıcıya BAŞKA bir günün listesini açardı ("zaman SUNUCUNUNDUR"). ⚠ Doluluk KAYNAK BAŞINADIR: tek bir toplam sayı, "Ayşe dolu, Mehmet boş" durumunu gizler ve personel planlaması tam da o soruyu sorar.

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

PUT /api/web/v1/sites/{site}/regions/{key} — SİTE düzeyi atama.

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

GET /api/web/v1/sites/{site}/business

OturumYol parametresi: site

⚠ Katalog YANITIN İÇİNDE gelir (DEV-01): panel gün adlarını ve sosyal platform listesini GÖMMEZ — gömülü bir liste, sunucuya yeni bir platform eklendiği gün onu hiç göstermez.

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

Bir sayfa görüntülemesini yaz.

OturumYol parametresi: site

# 🔴 Ölçüm ziyaretçiyi BEKLETMEZ Yazma tokio::spawn ile arka plana alınır: analitik bir KOLAYLIKTIR ve sayfanın gecikmesi ondan önemlidir. DB yavaşlarsa ziyaretçi bunu HİÇ hissetmez ("ağ öldü ≠ veri yok"un ölçüm sürümü). # 🔴 Bot SAYILMAZ Bot trafiği sayaçları şişirir ve müşteri kendi sitesinin gerçek ziyaretçisini göremez. Sınıf yine de HESAPLANIR (cihaz) ama yazılmaz — yazsaydık panelde ayrı bir "bot" satırı olurdu ve toplamı bozardı.

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

POST /api/web/v1/sites/{site}/cache/flush — sayfa önbelleğini tazele

OturumYol parametresi: site

(WEB35 · BLE22-14781). # 🔴 Bu bir SİLME DEĞİL, bir KUŞAK İLERLETMESİDİR Anahtar kuşağı taşır (onbellek::sayfa_anahtari); kuşağı artırmak eski girdileri OKUNAMAZ yapar ve onlar kendi ömürleriyle düşer. Toplu silme, tam da yükün arttığı anda önbelleği boşaltmak olurdu (onbellek.rsin kararı). # ⚠ Neden bir uç var Kuşak ZATEN her yayında, tema/ayar değişiminde ve toplu işlemde ilerliyor — yani normal akışta bu komuta ihtiyaç YOKTUR. Uç, o yollardan birinin atlandığı bir arıza anında (ya da bir dağıtım sonrası) elle müdahale içindir ve settings.manage ister: önbelleği boşaltmak bir OPERASYON kararıdır.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/cache/flush" \
  -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}/certificate-templates

GET /api/web/v1/sites/{site}/certificate-templates

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

POST /api/web/v1/sites/{site}/certificate-templates

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

POST /api/web/v1/sites/{site}/certificate-templates/preview.pdf

OturumYol parametresi: site

🔴 Kaydedilmemiş taslak da önizlenir: "önce kaydet sonra bak" akışı, kiracıya denemek için canlı şablonu bozdururdu.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/certificate-templates/preview.pdf" \
  -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…"
}
GET/api/web/v1/sites/{site}/compliance

PATCH /api/web/v1/ab-tests/{id}/status — başlat / durdur.

OturumYol parametresi: site

🔴 web.publish ister: koşan bir test ziyaretçinin gördüğü içeriği böler.

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

PUT /api/web/v1/sites/{site}/cookies — şerit ayarı.

OturumYol parametresi: site

🔴 Kapalı küme UÇTA da doğrulanır: şemadaki check son savunmadır, ama kullanıcıya "geçersiz konum" demeyi bir veritabanı hatasına bırakmak ekranda anlaşılmaz bir 500 üretirdi.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

GET /api/web/v1/donation-campaigns/{id}/donors.csv — bağışçı listesi.

OturumYol parametresi: site

🔴 KİŞİSEL VERİ (ad · e-posta · telefon · TCKN) kiracının dışına çıkar: denetime düşer ve GERİ ALINAMAZ listesindedir; hücreler formül kaçışlı.

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

GET /api/web/v1/sites/{site}/consents/iys.csv — **İYS'ye yüklenecek**

OturumYol parametresi: site

biçimde dışa aktarma (BLE22-14205). # 🔴 Neden ayrı bir uç Genel rıza dışa aktarması KİRACININ arşivi içindir ve serbest metni taşır. İYS ise SABİT bir şema bekler: alıcı tipi, izin kaynağı, izin tarihi, izin türü ve durum. Kiracıyı bu dönüşümü Excel'de elle yapmaya bırakmak, 6563 s. Kanun'un ispat yükünü bir kopyala-yapıştır hatasına bağlamak olurdu. ⚠ Yalnız newsletter amaçlı kayıtlar: form gönderimi ya da üyelik rızası TİCARİ ELEKTRONİK İLETİ onayı DEĞİLDİR ve İYS'ye yüklenmesi, verilmemiş bir onayı beyan etmek olurdu. ⚠ Alıcı tipi DAİMA BIREYSEL: tacir/esnaf ayrımını ziyaretçiye sormuyoruz ve uydurmak, İYS'ye yanlış beyan vermektir. Kiracı yüklemeden önce düzeltebilir; sütun boş bırakılırsa İYS satırı reddeder.

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

GET /api/web/v1/events/{id}/ticket-types

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

POST /api/web/v1/events/{id}/ticket-types

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

POST /api/web/v1/sites/{site}/content-types/import

OturumYol parametresi: site

🔴 Çakışan kök SESSİZCE YENİDEN ADLANDIRILMAZ: emlak-2 adında ikinci bir tip, kullanıcının farkında olmadığı bir kopya ve ziyaretçiye iki farklı adresten aynı içerik demektir. 409 döner, BOŞ bir kök ÖNERİR ve karar kullanıcınındır (tipi silmenin aynı kararı: sayıyı söyle, kararı verme).

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

GET /api/web/v1/sites/{site}/cookies — envanter · ayar · sayaç.

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

PUT /api/web/v1/sites/{site}/cookies — şerit ayarı.

OturumYol parametresi: site

🔴 Kapalı küme UÇTA da doğrulanır: şemadaki check son savunmadır, ama kullanıcıya "geçersiz konum" demeyi bir veritabanı hatasına bırakmak ekranda anlaşılmaz bir 500 üretirdi.

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

GET /api/web/v1/sites/{site}/cookies/consents/{rid} — KANIT sorgusu.

OturumYol parametresi: siterid

🔴 Ziyaretçi kimliksizdir: kanıt ancak kendi çerezinde taşıdığı rid ile bulunur. Bunu sunmayan bir defter, denetimde "kayıtlarımız var" demekten ibaret kalırdı.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

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

GET /api/web/v1/sites/{site}/customer-history?email= (BLE22-14457)

OturumYol parametresi: site

🔴 Kapı web.attendees.read ve sorgu TAM eşleşmedir: "içeren" bir arama, tek harfle bütün müşteri listesini dökerdi (kişisel veri). ⚠ Randevu ve etkinlik kaydı BİRLİKTE döner: müşteri geçmişini iki ayrı ekranda arayan kullanıcı, ikisini hiç yan yana göremezdi.

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

GET /api/web/v1/sites/{site}/cookies — envanter · ayar · sayaç.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

GET /api/web/v1/sites/{site}/delivery-zones

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

POST /api/web/v1/sites/{site}/delivery-zones

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

PUT /api/web/v1/sites/{site}/design-lock

OturumYol parametresi: site

🔴 İzin web.theme.code — kilidin ENGELLEDİĞİ izinden (web.theme.manage) BAŞKA. Aynı olsaydı kilit hiçbir şey yapmazdı.

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

GET /api/web/v1/sites/{site}/doc-feedback — iyileştirme kuyruğu

OturumYol parametresi: site

(BLE22-14075). 🔴 Rapor SAYIYLA yetinmez: "hangi yazı kötü" sorusunun yanında "NEYİ eksik" cevabı (ziyaretçi mesajları) durur. Yalnız oran gösteren bir rapor, ekibi tahmin etmeye bırakır. ⚠ Kapı web.forms.read: geri bildirim mesajı ziyaretçinin yazdığı SERBEST METİNDİR ve form gönderimleriyle aynı sınıftadır (kişisel veri olabilir).

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

GET /api/web/v1/sites/{site}/doc-suggestions — düzeltme önerisi kuyruğu

OturumYol parametresi: site

(BLE22-14467). ⚠ Kapı web.forms.read: öneri ziyaretçinin SERBEST METNİDİR ve isteğe bağlı ad/e-posta taşır — form gönderimleriyle aynı sınıftadır.

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

GET /api/web/v1/sites/{site}/doc-versions

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

POST /api/web/v1/sites/{site}/doc-versions

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/donation-campaigns" \
  -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}/donation-campaigns

OturumYol parametresi: site
İ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}/events

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/events" \
  -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}/gecis

GET /api/web/v1/sites/{site}/gecis?domain=… — alan adı geçişi

OturumYol parametresi: site

(Faz 14 Paket 10, BLE22-13644 · 13646 · 13647). # 🔴 Göçün en pahalı hatası burada Müşteri alan adını yeni siteye çevirdiğinde DNS bölgesi de çoğu zaman değişir ve o bölgede yaşayan **MX/SPF/DKIM/DMARC** kayıtları taşınmazsa şirketin e-postası o an durur. Belirtisi gecikmelidir, sebebi görünmezdir ve müşteri bunu BİZİM arızamız sanar — haklı olarak, çünkü onu uyarmadık. # 🔴 Bu uç alan adı BAĞLAMAZ Bağlama · doğrulama · registrar işleri ÇEKİRDEK panelde yaşar (DOM-21 · DOM-30) ve orada TEKTİR. Buradaki soru dar ve göçe ait: *"neyi taşımalıyım, çevirdikten sonra çalışıyor mu"*.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/gecis" \
  -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

GET /api/web/v1/sites/{site}/handover — defter + sitenin ŞU ANKİ durumu.

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

POST /api/web/v1/sites/{site}/handover

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/handover" \
  -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…"
}
POST/api/web/v1/sites/{site}/handover/challenge

POST /api/web/v1/sites/{site}/handover/challenge

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/handover/challenge" \
  -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/ab-tests/{id}/report

OturumYol parametresi: site

🔴 Kazanan İLAN EDİLMEZ, karar ab::anlamliliktan gelir ve eşiğin altında "henüz karar verilemez" der. Ekran oranları yine gösterir — ama hangisinin bir BULGU hangisinin gürültü olduğunu söyleyerek.

İ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…"
}
PATCH/api/web/v1/sites/{site}/identity

Kimlik yaz

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

GET /api/web/v1/sites/{site}/import/jobs — göç işleri.

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

GET /api/web/v1/sites/{site}/import-sources

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

POST /api/web/v1/sites/{site}/import-sources

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

POST /api/web/v1/sites/{site}/import/crawl — eski siteyi **TARA**.

OturumYol parametresi: site

# 🔴 Tarama bir GÖÇ DEĞİL, bir ENVANTERDİR İş mode = 'tarama' doğar ve web.pagese HİÇ dokunmaz. Kullanıcı envanteri ve uyumluluk raporunu görüp POST …/apply dediğinde AYNI iş moda geçer — "ÖNİZLE → UYGULA"nın kazımadaki karşılığı. # 🔴 Kök BURADA yoklanır, gerisi kuyrukta Adresi hiç yoklamadan iş açan bir uç, adresi yanlış yazan kullanıcıya "sıraya alındı" der ve hata ancak dakikalar sonra defterde görünürdü.

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

POST /api/web/v1/sites/{site}/import/csv — CSV'den toplu sayfa/yazı

OturumYol parametresi: site

(BLE22-13636). 🔴 WXR yolunun İKİZİ değil, aynı kapının ikinci girdisi: dönüşüm (goc::html_bloklara), doğrulama (bloklar::dogrula_ve_normalize), çakışma kararı ve 301 yazımı AYNI kodtan geçer. İkinci bir yazma yolu, birinin bir gün "taslak" demeyi unutması demekti.

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

GET /api/web/v1/sites/{site}/import/jobs — göç işleri.

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

GET /api/web/v1/sites/{site}/import/jobs/{job} — ilerleme ve GEREKÇELER.

OturumYol parametresi: sitejob

🔴 Atlanan ve düşen öğeler SEBEBİYLE döner. "12 satır düştü" tek başına hangisini düzelteceğini söylemez (WEB39'un yazılı dersi).

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

POST /api/web/v1/sites/{site}/import/jobs/{job}/apply — taramayı UYGULA.

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

POST /api/web/v1/sites/{site}/import/jobs/{job}/cancel — **durdur**.

OturumYol parametresi: sitejob

🔴 SİLMEZ, DURDURUR. O ana kadar açılmış sayfalar müşterinindir; iptali bir geri almaya çeviren sürüm, "durdur" düğmesini bir VERİ KAYBI düğmesi yapardı. Geri alma AYRI ve AÇIK bir eylemdir (is_geri_al).

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

POST /api/web/v1/sites/{site}/import/jobs/{job}/undo — göçü **geri al**.

OturumYol parametresi: sitejob

🔴 Ölçüt yolla DEĞİL KAYITLA kurulur: iş, açtığı her kaydın kimliğini tutar (migration_items.page_id/post_id). Yola bakan bir geri alma, göçten sonra taşınan bir sayfayı bulamaz ve kullanıcının elle taşıdığı sayfa sessizce kalırdı.

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

GET /api/web/v1/sites/{site}/import/jobs/{job}/verify — göç SONRASI

OturumYol parametresi: sitejob

adres bütünlüğü (Faz 14 Paket 9, BLE22-14132 · 14135 · 14136). # 🔴 "N sayfa açıldı" bir CEVAP DEĞİLDİR Göç eden müşterinin tek sorusu *"bir şey kaybettim mi"*dir. Kaybın üç yeri var ve üçü de açılan sayfa sayısında GÖRÜNMEZ: kaynağın sitemap'inde olup göçe hiç girmemiş adres · taşınan gövdedeki hedefsiz iç bağlantı · 301 YAZILAMAYAN kalıcı bağlantı biçimi. # 🔴 Neden AYRI bir uç Sitemap karşılaştırması kaynak siteye ÇIKAR (dış istek) ve saniyeler sürebilir; iş detayına gömülü bir sürüm, göç ekranını her açılışta yavaş ve ağa bağımlı yapardı. Kullanıcı bu raporu İSTEDİĞİNDE alır.

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

POST /api/web/v1/sites/{site}/import/undo — göçü geri al (BLE22-13641).

OturumYol parametresi: site

# 🔴 YALNIZ DOKUNULMAMIŞ, TASLAK sayfa silinir Ölçüt üç şart birden: sayfa **taslak** · **tek sürümü var** (yani göçten sonra hiç kaydedilmemiş) · yolu listede. Üzerinde çalışılmış bir sayfayı silmek, geri almayı bir VERİ KAYBINA çevirirdi; yayınlanmışsa ziyaretçi için ANİ bir kayıptır. # 🔴 Ve KALICI siler — bilerek Ürünün genel kuralı "silmek çöpe taşır"dır (mig 1562) ama burada çöp ADRESİ TUTAR (path unique) ve müşteri göçü düzeltip tekrar denediğinde her sayfa "zaten var" diye atlanırdı. Bunlar sistemin AZ ÖNCE açtığı ve kullanıcının hiç dokunmadığı satırlardır; kalıcı silmenin kaybettireceği bir emek yoktur.

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

POST /api/web/v1/ab-tests/{id}/apply — kazananı yayına al.

OturumYol parametresi: site

🔴 Yayın AYNI kapıdan (pages::yayinla): ikinci bir yayın yolu, arama indeksini · dış duyuruyu · önbellek kuşağını yeniden hatırlamak zorunda kalan ikinci bir yer açardı. ⚠ Test ÖNCE applied yapılır, yayın SONRA: yayın kapısı "koşan test varsa yayın yok" der ve sıra ters olsaydı kendi kapısına takılırdı.

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

POST /api/web/v1/sites/{site}/import/wxr/job — göçü **sıraya al**.

OturumYol parametresi: site

# 🔴 Senkron ucun ikizi DEĞİL uygula göçü İSTEĞİN İÇİNDE bitirir ve tam da bu yüzden 500 sayfa/200 görselde durur. Bu uç aynı planı üretir ama uygulamaz: kaydı açar, öğeleri sıraya koyar ve işçiye bırakır. Yazıcı yine TEKTİR (bir_plani_uygula) — ayrılan şey NE ZAMAN yazıldığıdır, NASIL değil. # 🔴 Önizleme HÂLÂ hiçbir şey yazmaz Satır yazan tek şey budur ve kullanıcının "Uygula" kararıdır. Önizlemeyi iş açmaya çeviren bir sürüm, "gördüğüm şeyi ben onaylarım" sözleşmesini bozardı.

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

GET /api/web/v1/network/sites/{site}/defaults-preview — bu ayar yeni

OturumYol parametresi: site

sitede ne olur. ⚠ Yalnız GÖSTERİR: uygulamaz. Ayrı bir uç olmasının sebebi, panelin "varsayılanlar neye dönüşecek" sorusunu ikinci bir katalog kurmadan sorabilmesi.

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

GET /api/web/v1/sites/{site}/job-runs

OturumYol parametresi: site

🔴 Hata metni EKRANDA okunur. Bu paketten önce bir görev haftalarca düşse bunu yalnız journalctl bilirdi.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

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

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

POST /api/web/v1/sites/{site}/jobs/{kind}/run

OturumYol parametresi: sitekind

# 🔴 Elle tetikleme AYNI yoldan koşar İkinci bir çalıştırma yolu, kilidin/kotanın/defterin bir gün yalnız birinde uygulanması demekti. Çalışan bir görev **409** döner — "başlattım" deyip hiçbir şey yapmamak, kullanıcıya yalan söylemektir.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/layout-templates — şablon aç (BLE22-14724).

OturumYol parametresi: site

🔴 Ad ZİNCİRDE GEÇEBİLİR olmalı: hiçbir zincirin üretmediği bir ada kaydedilen şablon, kullanıcının düzenleyip yayına aldığı ama HİÇBİR ziyaretçiye ulaşmayan bir kayıttır.

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

Satırları içeri al — **çağıranın tx'inde**.

OturumYol parametresi: site

⚠ kaynak_id yalnız ZAMANLANMIŞ turda doludur: elle yüklenen bir dosyanın kaynağı yoktur ve import_jobs satırı bunu ayırt edebilmeli — "bu kayıtlar nereden geldi" sorusunun cevabı başka hiçbir yerde durmuyor. ⚠ Kayıt tavanı ÇAĞIRANDAN gelir: plan tavanı WebCtxten okunur ve bir görev turunda WebCtx YOKTUR. Buraya gömülü bir sabit, planı yükselten müşterinin tek tek eklerken geçebildiği ama toplu aktarırken geçemediği bir tavan demekti (BLE22-13965'in dersi). # Errors Sorgu düşerse. Satır hataları rapora yazılır ve hata DÖNDÜRMEZ: tek bozuk satır yüzünden 2000 satırlık bir turu düşürmek, kullanıcının işini ikincil bir soruna kurban etmektir.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/lead-magnets" \
  -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…"
}
POST/api/web/v1/sites/{site}/library/import

POST /api/web/v1/sites/{site}/library/import

OturumYol parametresi: site

🔴 **Kısmi başarı SESSİZ kalmaz.** "İçe aktarıldı" diyen bir uç, kullanıcıya yapılmamış bir işi yapılmış gösterir ve o bunu ancak deseni ararken öğrenir. Yanıt {imported, skipped[{name, reason}]} döner. 🔴 Ağaç ORTAK doğrulayıcıdan geçer: içe aktarmanın kendi yolunu açması, şema doğrulamasını onun üzerinden atlamaktı (göçün aynı kararı).

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

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

Satırları içeri al — **çağıranın tx'inde**.

OturumYol parametresi: site

⚠ kaynak_id yalnız ZAMANLANMIŞ turda doludur: elle yüklenen bir dosyanın kaynağı yoktur ve import_jobs satırı bunu ayırt edebilmeli — "bu kayıtlar nereden geldi" sorusunun cevabı başka hiçbir yerde durmuyor. ⚠ Kayıt tavanı ÇAĞIRANDAN gelir: plan tavanı WebCtxten okunur ve bir görev turunda WebCtx YOKTUR. Buraya gömülü bir sabit, planı yükselten müşterinin tek tek eklerken geçebildiği ama toplu aktarırken geçemediği bir tavan demekti (BLE22-13965'in dersi). # Errors Sorgu düşerse. Satır hataları rapora yazılır ve hata DÖNDÜRMEZ: tek bozuk satır yüzünden 2000 satırlık bir turu düşürmek, kullanıcının işini ikincil bir soruna kurban etmektir.

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

Blok düğümünden duyarlı ayarları oku.

OturumYol parametresi: site

⚠ İki biçim de kabul edilir (props üst seviyeyi EZER) — govde_temalinin düzleştirmesiyle aynı sözleşme.

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

Bir sayfa görüntülemesini yaz.

OturumYol parametresi: site

# 🔴 Ölçüm ziyaretçiyi BEKLETMEZ Yazma tokio::spawn ile arka plana alınır: analitik bir KOLAYLIKTIR ve sayfanın gecikmesi ondan önemlidir. DB yavaşlarsa ziyaretçi bunu HİÇ hissetmez ("ağ öldü ≠ veri yok"un ölçüm sürümü). # 🔴 Bot SAYILMAZ Bot trafiği sayaçları şişirir ve müşteri kendi sitesinin gerçek ziyaretçisini göremez. Sınıf yine de HESAPLANIR (cihaz) ama yazılmaz — yazsaydık panelde ayrı bir "bot" satırı olurdu ve toplamı bozardı.

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

GET /api/web/v1/sites/{site}/mail/dns

OturumYol parametresi: site

Beklenen kayıtlar + SON denetim sonucu. ⚠ Denetimi KOŞMAZ: DNS bir ağ işidir ve ekranın açılışını dış dünyanın hızına bağlayan bir uç, DNS yavaşladığında paneli kilitlerdi.

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

POST /api/web/v1/sites/{site}/mail/dns/apply — zone bizdeyse kayıtları AÇ.

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

POST /api/web/v1/sites/{site}/mail/dns/check — şimdi denetle ve KAYDET.

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

GET /api/web/v1/sites/{site}/mail/log

OturumYol parametresi: site

🔴 "Gitti mi" sorusunun cevabı burada. Bu ekran olmadan kiracı, form yanıtının ulaşıp ulaşmadığını ancak ziyaretçi şikayet edince öğreniyordu.

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

POST /api/web/v1/sites/{site}/mail/preview

OturumYol parametresi: site

🔴 Önizleme ÇİZİCİNİN KENDİSİNDEN geçer, panelde ikinci bir çizim yapılmaz: ayrı bir önizleme kodu, kullanıcıya gerçekte gitmeyecek bir mektup gösterir ve fark ancak müşteri şikayet edince anlaşılır.

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

GET /api/web/v1/sites/{site}/mail/reputation

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

PUT /api/web/v1/sites/{site}/mail/sender — siteye gönderici kimliği ata.

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

POST /api/web/v1/sites/{site}/mail/spam-check

OturumYol parametresi: site

🔴 Bu uç HİÇBİR ŞEYİ ENGELLEMEZ; skoru döner. Gönderimi durduran bir sürüm, heuristik bir tahmini ürünün kapısına çevirirdi.

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

GET /api/web/v1/sites/{site}/mail/suppressions

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

POST /api/web/v1/sites/{site}/mail/suppressions — elle bastır.

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

DELETE /api/web/v1/sites/{site}/mail/suppressions — serbest bırak.

OturumYol parametresi: site

⚠ Adres YOL PARÇASI değil sorgu: @ ve . taşıyan bir dizeyi yola gömmek, kaçış derdini her istemciye ödetir.

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

GET /api/web/v1/sites/{site}/mail/templates

OturumYol parametresi: site

🔴 Blok kataloğu ve hazır şablonlar da BURADAN gelir (DEV-01): panele gömülü bir liste, sunucunun eklediği bir bloğu kullanıcıdan saklardı.

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

PUT /api/web/v1/sites/{site}/mail/templates — oluştur ya da güncelle.

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

DELETE /api/web/v1/sites/{site}/mail/templates/{id}

OturumYol parametresi: siteid

⚠ Şablonu silmek mektubu durdurmaz: zincir bir alt halkaya (varsayılan → yerleşik) düşer. "Sildim, artık mektup gitmiyor" beklentisi yanlıştır ve panel bunu söyler.

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

GET /api/web/v1/sites/{site}/mail/triggers

OturumYol parametresi: site

Katalog + bu sitenin açık/kapalı durumu. 🔴 Katalog SUNUCUDAN gelir (DEV-01): panele gömülü bir liste, yeni bir mektup türü eklendiğinde kiracıdan saklardı — ve kimse fark etmezdi, çünkü panel kendi listesini eksiksiz sanar.

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

PUT /api/web/v1/sites/{site}/mail/triggers

OturumYol parametresi: site
İstek
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail/triggers" \
  -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}/members

Panel liste

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

GET /api/web/v1/sites/{site}/members.csv — KVKK veri dışa aktarımı

OturumYol parametresi: site

(BLE22-14098). 🔴 İzin settings.manage: bu dosya KİŞİSEL VERİDİR (e-posta + ad + giriş zamanı). İçerik yazan herkesin indirebildiği bir üye listesi, kiracının veri sorumluluğunu panelin içinden delerdi. ⚠ Parola özeti, jeton ve oturum künyesi ÇIKMAZ: dışa aktarım kişinin KENDİ verisidir, kimlik doğrulama sırları değil.

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

POST /api/web/v1/sites/{site}/members/import — CSV'den üye içe aktar.

OturumYol parametresi: site

# 🔴 İÇE AKTARMA HİÇBİR E-POSTA GÖNDERMEZ 500 kişiye tek tıkla davet göndermek, bu üründe **bilerek olmayan** toplu posta hattını (İYS · 6563) kenardan dolaşmaktır. Satırlar pending doğar, parolaları YOKTUR ve giriş yapamazlar; davet AYRI ve kişi başına bir karardır (POST …/members/invite). # 🔴 VAR OLAN ÜYEYE DOKUNULMAZ Aynı e-posta zaten kayıtlıysa satır ATLANIR ve raporlanır. CSV'den gelen bir adla gerçek bir üyenin adını ezmek, kullanıcının hiç istemediği sessiz bir veri değişikliğidir (yamanın coalesce kuralının içe aktarım hâli). # 🔴 RIZA İÇE AKTARILMAZ listed (üye dizini) ve bülten onayı **DEVREDİLMEZ**: rıza kişinin kendi beyanıdır ve bir CSV sütunu onu üretemez.

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

POST /api/web/v1/sites/{site}/members/invite — üyeyi DAVET ET (BLE22-14095).

OturumYol parametresi: site

🔴 Davet bir ÜYE SATIRIYLA birlikte doğar (pending): üyesiz bir jeton, kabul edildiğinde hangi e-postaya bağlanacağını bilemezdi. ⚠ **Toplu pazarlama e-postası DEĞİLDİR.** Davet, kiracının kendi topluluğuna tek tek gönderdiği işlemsel bir iletidir; ticari elektronik ileti göndermek Türkiye'de İYS kaydı ve onay ister (6563 sayılı Kanun) ve o hat bu modülde YOKTUR (BLE22-14099 bu yüzden ertelendi).

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/members/invite" \
  -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}/newsletter/campaigns

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

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

DELETE /api/web/v1/ab-tests/{id}

OturumYol parametresi: siteid

⚠ Silme sayaçları da götürür (on delete cascade) ve bu BİLİNÇLİ: testin sayıları testin dışında bir anlam taşımaz, saklanan bir kalıntı ise "hangi teste aitti" sorusunu cevapsız bırakırdı.

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

POST /api/web/v1/sites/{site}/newsletter/campaigns/{id}/send

OturumYol parametresi: siteid
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/newsletter/campaigns/<id>/send" \
  -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}/offers

GET /api/web/v1/sites/{site}/offers

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

POST /api/web/v1/sites/{site}/offers

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

Bir sitenin ayarını oku. Satır yoksa [MailAyar::default].

OturumYol parametresi: site

# Errors Veritabanı hatası.

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

PUT /api/web/v1/sites/{site}/cookies — şerit ayarı.

OturumYol parametresi: site

🔴 Kapalı küme UÇTA da doğrulanır: şemadaki check son savunmadır, ama kullanıcıya "geçersiz konum" demeyi bir veritabanı hatasına bırakmak ekranda anlaşılmaz bir 500 üretirdi.

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

GET /api/web/v1/sites/{site}/donation-campaigns

OturumYol parametresi: site
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/orders" \
  -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}/policies

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/policies/{kind} — YENİ SÜRÜM aç.

OturumYol parametresi: sitekind

# 🔴 Var olan sürüm EZİLMEZ Yayındaki gövdeyi güncellemek, verilmiş onayları geçmişe dönük değiştirmek olur. Bu uç DAİMA max(version)+1 açar. Taslak bir sürüm varsa o GÜNCELLENİR — taslak henüz kimseye gösterilmemiştir, sürüm numarası harcamak arşivi anlamsız numaralarla doldururdu.

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

Blok düğümünden duyarlı ayarları oku.

OturumYol parametresi: sitekindversion

⚠ İki biçim de kabul edilir (props üst seviyeyi EZER) — govde_temalinin düzleştirmesiyle aynı sözleşme.

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

GET /api/web/v1/sites/{site}/policies/archive?kind=… — yayınlanmış sürümler.

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

PUT /api/web/v1/sites/{site}/policies/notify — bildirim ayarı.

OturumYol parametresi: site
İstek
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/policies/notify" \
  -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}/price-lists

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

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

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/quotes" \
  -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

Satırları içeri al — **çağıranın tx'inde**.

OturumYol parametresi: site

⚠ kaynak_id yalnız ZAMANLANMIŞ turda doludur: elle yüklenen bir dosyanın kaynağı yoktur ve import_jobs satırı bunu ayırt edebilmeli — "bu kayıtlar nereden geldi" sorusunun cevabı başka hiçbir yerde durmuyor. ⚠ Kayıt tavanı ÇAĞIRANDAN gelir: plan tavanı WebCtxten okunur ve bir görev turunda WebCtx YOKTUR. Buraya gömülü bir sabit, planı yükselten müşterinin tek tek eklerken geçebildiği ama toplu aktarırken geçemediği bir tavan demekti (BLE22-13965'in dersi). # Errors Sorgu düşerse. Satır hataları rapora yazılır ve hata DÖNDÜRMEZ: tek bozuk satır yüzünden 2000 satırlık bir turu düşürmek, kullanıcının işini ikincil bir soruna kurban etmektir.

İ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}/regions

GET /api/web/v1/sites/{site}/donation-campaigns

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

PUT /api/web/v1/sites/{site}/regions/{key} — SİTE düzeyi atama.

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

DELETE /api/web/v1/sites/{site}/regions/{key}

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

GET /api/web/v1/sites/{site}/resources

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

POST /api/web/v1/sites/{site}/import-sources

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/resources" \
  -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}/services

GET /api/web/v1/sites/{site}/services

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

POST /api/web/v1/sites/{site}/services

OturumYol parametresi: site
İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/services" \
  -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…"
}
PUT/api/web/v1/sites/{site}/tags

PUT /api/web/v1/sites/{site}/tags — sitenin grup adları.

OturumYol parametresi: site

# 🔴 Neden ETİKET, neden "müşteri" TABLOSU değil On sitesi olan bir ajans, hangi sitenin hangi müşterisine ait olduğunu hiçbir yerde yazamıyordu; panel "10 site" diyor, ajans adlardan tahmin ediyordu. Bir MÜŞTERİ kaydı ise zaten var ve CRM'in/B2B'nin işidir (COMMERCE-01: veriyi SAHİBİ okur) — buraya ikinci bir müşteri tablosu koymak, aynı gerçeğin iki kaynağı olurdu. # 🔴 PUT, PATCH DEĞİL Etiket bir LİSTEDİR ve "eksik alan değişmez" kuralı altında kullanıcı bir etiketi ASLA kaldıramazdı (işletme künyesinin aynı kararı). Liste yeniden yazılır; ekle/çıkar iki uç ve iki yarış demekti. ⚠ Reddedilen etiketler yanıtta SAYILIR: sessizce düşen bir etiket, kullanıcının yazdığını kaybetmesidir.

İstek
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/tags" \
  -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 pagee düşer ve kullanıcı "seçtim ama değişmedi" der (DEV-01'in bu ekrandaki hâli). ⚠ page DAİMA listede: ZORUNLU_SABLONdur 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-patterns

GET /api/web/v1/sites/{site}/theme-patterns — AKTİF temanın desenleri.

OturumYol parametresi: site

🔴 Tema desenleri kütüphaneye **KOPYALANMAZ.** Kopyalayan bir sürümde tema güncellendiğinde kiracının kütüphanesinde eski sürüm kalır ve o bunu "tema güncellendi ama desenlerim değişmedi" diye yaşar. Desen temadan OKUNUR; sayfaya konduğunda zaten KOPYA olur (snippet doktrini). 🔴 Bozuk bir desen dosyası PALETİ boş bırakmaz: o desen atlanır, ötekiler listelenir (blok kataloğunun aynı kararı). Atlanan sayısı yanıtta durur — sessiz bir atlama, tema yazarının hatasını görünmez yapardı.

İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/theme-patterns" \
  -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.themeste 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}/tours

GET /api/web/v1/sites/{site}/donation-campaigns

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

POST /api/web/v1/sites/{site}/ab-tests

OturumYol parametresi: site

🔴 KONTROL VARYANTINI SUNUCU EKLER ve sayfanın CANLI sürümünü kullanır. Kontrolü istemciye bıraktığımız bir sürümde panel yanlış (ya da eski) bir sürümü taban gösterebilirdi — ve karşılaştırmanın tabanı, ziyaretçinin gerçekte gördüğü sayfa OLMAK ZORUNDADIR.

İstek
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/tours" \
  -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}/donation-campaigns

OturumYol parametresi: site
İ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.sitesi 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…"
}
GET/api/web/v1/sites/overview

GET /api/web/v1/sites/overview

Oturum

# 🔴 Ajans panelinin sorusu "hangi site DİKKAT İSTİYOR"dur On siteyi tek tek açıp bakmak, bir gösterge paneli DEĞİLDİR. Bu uç her site için tek bir turda üç şeyi birden söyler: durum · içerik hacmi · **bekleyen iş** (onay kuyruğu · doğrulanmamış veri talebi · süresi geçmiş talep). ⚠ Sayımlar ALT SORGU ile: site başına ayrı tur atmak N+1 doğururdu ve site sayısı plan limitine kadar çıkabilir. 🔴 Sağlık raporu (saglik::rapor) BURADA çağrılmaz: o, site başına birkaç sorgu atar ve on siteyi tek ekranda göstermek isteyen bir panelde o maliyet çarpılır. Panel "dikkat isteyen" siteyi işaretler, ayrıntıyı o sitenin kendi ekranı verir.

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