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/{site}/ab-tests
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/ab-tests" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/analytics
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.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/analytics" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/business
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.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/app" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Bir sayfa görüntülemesini yaz.
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ı.
curl -X PATCH "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/app" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/authors" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/authors
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/authors" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/automation/rules" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/mail/log
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.
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"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/backups" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/badges" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/badges" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/blocks" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/bookings (BLE22-14454 hazırlığı)
site🔴 Kapı web.attendees.read: randevu KİŞİSEL VERİDİR (ad · e-posta ·
telefon) ve içerik yazma iznine bağlanmaz.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/bookings" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/bookings/day — günlük liste + doluluk
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.
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"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/regions/{key} — SİTE düzeyi atama.
sitecurl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/brand-preset" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/business
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.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/business" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Bir sayfa görüntülemesini yaz.
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ı.
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/business" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/cache/flush — sayfa önbelleğini tazele
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/calendar
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.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/calendar" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/certificate-templates
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/certificate-templates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/certificate-templates
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/certificate-templates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/certificate-templates/preview.pdf
site🔴 Kaydedilmemiş taslak da önizlenir: "önce kaydet sonra bak" akışı, kiracıya denemek için canlı şablonu bozdururdu.
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"{
"data": "…",
"trace_id": "01JC…"
}PATCH /api/web/v1/ab-tests/{id}/status — başlat / durdur.
site🔴 web.publish ister: koşan bir test ziyaretçinin gördüğü içeriği böler.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/compliance" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/cookies — şerit ayarı.
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.
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/compliance" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/consents" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/donation-campaigns/{id}/donors.csv — bağışçı listesi.
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/consents/iys.csv — **İYS'ye yüklenecek**
sitebiç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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/events/{id}/ticket-types
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/content-types" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/events/{id}/ticket-types
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/content-types" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/content-types/import
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).
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/cookies — envanter · ayar · sayaç.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/cookies" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/cookies — şerit ayarı.
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.
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/cookies" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/cookies/consents/{rid} — KANIT sorgusu.
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/courses" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/courses" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/customer-history?email= (BLE22-14457)
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/cookies — envanter · ayar · sayaç.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/data-inventory" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/data-requests" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/delivery-zones
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/delivery-zones" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/delivery-zones
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/delivery-zones" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/design-lock
site🔴 İzin web.theme.code — kilidin ENGELLEDİĞİ izinden (web.theme.manage)
BAŞKA. Aynı olsaydı kilit hiçbir şey yapmazdı.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/doc-feedback — iyileştirme kuyruğu
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).
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/doc-search — panel içi doküman araması
site(BLE22-14072'nin panel ayağı).
⚠ Ölçüt BAŞLIK + ÖZETTİR, gövde DEĞİL: blok ağacında tam metin araması
jsonb üzerinde tarama demektir ve o soruyu site içi arama (arama.rs)
zaten cevaplıyor.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/doc-search" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/doc-suggestions — düzeltme önerisi kuyruğu
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/doc-versions
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/doc-versions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/doc-versions
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/doc-versions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/donation-campaigns" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/menus/{handle}/duplicate (BLE2-13443)
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.
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/duplicate" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/event-destinations" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Sayaçları güncelle (tek transaction).
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/event-destinations" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/events" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/events" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/forms" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/gecis?domain=… — alan adı geçişi
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"*.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/gecis" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/goals — hedefler + dönüşüm sayıları.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/goals" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/goals" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/handover — defter + sitenin ŞU ANKİ durumu.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/handover" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/handover
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/handover" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/handover-check
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/handover-check" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/handover/challenge
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/handover/challenge" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/ab-tests/{id}/report
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.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/health" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/home/{page} — ana sayfayı seç.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/ideas — yalnız DÖNÜŞMEMİŞ fikirler.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/ideas" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ideas
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.
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/ideas" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/import/jobs — göç işleri.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/import-jobs" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/import-sources
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/import-sources" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import-sources
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/import-sources" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import/crawl — eski siteyi **TARA**.
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ü.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import/csv — CSV'den toplu sayfa/yazı
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/import/jobs — göç işleri.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/import/jobs" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/import/jobs/{job} — ilerleme ve GEREKÇELER.
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).
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import/jobs/{job}/apply — taramayı UYGULA.
sitejobcurl -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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import/jobs/{job}/cancel — **durdur**.
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).
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import/jobs/{job}/undo — göçü **geri al**.
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/import/jobs/{job}/verify — göç SONRASI
sitejobadres 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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import/undo — göçü geri al (BLE22-13641).
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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/ab-tests/{id}/apply — kazananı yayına al.
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import/wxr/job — göçü **sıraya al**.
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/network/sites/{site}/defaults-preview — bu ayar yeni
sitesitede 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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/job-runs
site🔴 Hata metni EKRANDA okunur. Bu paketten önce bir görev haftalarca düşse
bunu yalnız journalctl bilirdi.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/jobs" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Sayaçları güncelle (tek transaction).
sitekindcurl -X PATCH "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/jobs/<kind>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/jobs/{kind}/run
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/layout-templates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/layout-templates — şablon aç (BLE22-14724).
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.
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"{
"data": "…",
"trace_id": "01JC…"
}Satırları içeri al — **çağıranın tx'inde**.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/lead-magnets" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
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"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/library" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/library/import
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ı).
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/link-audit
site# 🔴 Bu, sayfa-başına kalite denetiminin İKİNCİ bir kopyası DEĞİLDİR
Toplayıcılar ORTAKTIR (kalite::ic_baglantilar · kalite::medya_anahtarlari)
ve çözüm kuralı da: yayında sayfa · yayında yazı · **yönlendirme** · ana
sayfa. İkinci bir kural, editörde "kırık" denen bir bağlantının bu ekranda
sağlam görünmesi demekti.
🔴 **Yönlendirmesi olan adres KIRIK DEĞİLDİR.** Taşınmış bir sayfaya giden
bağlantı ziyaretçi için ÇALIŞIR (301); onu kırık ilan eden bir rapor,
kullanıcıyı düzeltilecek bir şey olmayan satırlarda gezdirir ve raporun
tamamına olan güveni bitirir.
🔴 **Dış adres SORULMAZ.** Yayındaki her sayfanın dış bağlantılarını
yoklamak, kiracının içeriğini üçüncü taraflara duyurmak ve raporu o
sitelerin o anki durumuna bağlamaktır (ic_baglantiların aynı gerekçesi).
🔴 **Kapı web.view**: bu bir TANILAMA okumasıdır, bir yönetim işlemi değil.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/link-audit" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/locations" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/locations" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Satırları içeri al — **çağıranın tx'inde**.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}Blok düğümünden duyarlı ayarları oku.
site⚠ İki biçim de kabul edilir (props üst seviyeyi EZER) — govde_temalinin
düzleştirmesiyle aynı sözleşme.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Bir sayfa görüntülemesini yaz.
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ı.
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/mail/dns
siteBeklenen 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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/mail/dns/apply — zone bizdeyse kayıtları AÇ.
sitecurl -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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/mail/dns/check — şimdi denetle ve KAYDET.
sitecurl -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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/mail/log
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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/mail/preview
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/mail/reputation
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail/reputation" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/mail/sender — siteye gönderici kimliği ata.
sitecurl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail/sender" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/mail/spam-check
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/mail/suppressions
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail/suppressions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/mail/suppressions — elle bastır.
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail/suppressions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}DELETE /api/web/v1/sites/{site}/mail/suppressions — serbest bırak.
site⚠ Adres YOL PARÇASI değil sorgu: @ ve . taşıyan bir dizeyi yola gömmek,
kaçış derdini her istemciye ödetir.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/mail/templates
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/mail/templates — oluştur ya da güncelle.
sitecurl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail/templates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}DELETE /api/web/v1/sites/{site}/mail/templates/{id}
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/mail/triggers
siteKatalog + 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.
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"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/mail/triggers
sitecurl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/mail/triggers" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/media — çok parçalı yükleme (panel).
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/media" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Görseli dönüştür ve **YENİ bir kütüphane kaydı** aç.
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/media/{id}/usage
sitemediacurl -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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/media/bulk-delete (BLE2-13402)
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ı).
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/members.csv — KVKK veri dışa aktarımı
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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/members/import — CSV'den üye içe aktar.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/members/invite — üyeyi DAVET ET (BLE22-14095).
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).
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"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/menus/{handle} — upsert.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/menus/{handle}/duplicate (BLE2-13443)
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/newsletter/campaigns" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
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"{
"data": "…",
"trace_id": "01JC…"
}DELETE /api/web/v1/ab-tests/{id}
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/newsletter/campaigns/{id}/send
siteidcurl -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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/not-found — 404 raporu (BLE2-13496).
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.
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"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/offers" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/offers" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Bir sitenin ayarını oku. Satır yoksa [MailAyar::default].
site# Errors Veritabanı hatası.
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"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/cookies — şerit ayarı.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/orders" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/pages" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/pages/bulk — toplu yayınla/kaldır/arşivle/sil.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/policies" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/policies/{kind} — YENİ SÜRÜM aç.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}Blok düğümünden duyarlı ayarları oku.
sitekindversion⚠ İki biçim de kabul edilir (props üst seviyeyi EZER) — govde_temalinin
düzleştirmesiyle aynı sözleşme.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/policies/archive?kind=… — yayınlanmış sürümler.
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/policies/archive" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/policies/notify — bildirim ayarı.
sitecurl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/policies/notify" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/posts" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/price-lists" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/promo-bands" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/quotes" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/quotes" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/posts
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/redirects" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Satırları içeri al — **çağıranın tx'inde**.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/regions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/regions/{key} — SİTE düzeyi atama.
sitekeycurl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/regions/<key>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}DELETE /api/web/v1/sites/{site}/regions/{key}
sitekeycurl -X DELETE "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/regions/<key>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/resources
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/resources" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/import-sources
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/resources" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/search-analytics — PANEL düzlemi.
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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/services
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/services" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/services
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/services" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/settings — çözülmüş ayarlar + KATALOG.
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).
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/settings" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PATCH /api/web/v1/sites/{site}/settings — ayarları BİRLEŞTİREREK yaz.
sitecurl -X PATCH "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/settings" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}PUT /api/web/v1/sites/{site}/tags — sitenin grup adları.
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.
curl -X PUT "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/tags" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/taxonomies
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/taxonomies" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/taxonomies
sitecurl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/taxonomies" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/templates — sayfa şablonu seçenekleri
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.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/templates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/theme-patterns — AKTİF temanın desenleri.
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ı.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/theme/history — bu sitenin temasının
siteSÜ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.
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"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/tours" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/{site}/ab-tests
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.
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/tours" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/{site}/donation-campaigns
sitecurl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/<site>/translations" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/web/v1/sites/ensure-first — **kiracının ilk sitesini garanti eder**
(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).
curl -X POST "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/ensure-first" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /api/web/v1/sites/overview
# 🔴 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.
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/v1/sites/overview" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}