Web (Site Kurucu)

pages

21 uç · /api/web/v1/pages

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 21 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/public/v1/pages

`GET /api/web/public/v1/pages` — yayındaki sayfalar.

API anahtarı
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/public/v1/pages" \
  -H "Authorization: Bearer blsk_..." \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/public/v1/pages/{id}

`GET /api/web/public/v1/pages/{id}` — sayfanın CANLI içeriği.

API anahtarıYol parametresi: id
İstek
curl -X GET "https://{slug}--panel.web.blesyum.app/api/web/public/v1/pages/<id>" \
  -H "Authorization: Bearer blsk_..." \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/web/v1/pages/{page}/activity

`GET /api/web/v1/pages/{page}/activity`

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

`POST /api/web/v1/pages/{page}/approval` — onay iste.

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

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

OturumYol parametresi: page

🔴 **Ç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/pages/<page>/duplicate" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/web/v1/pages/{page}/move

`POST /api/web/v1/pages/{page}/move` — sayfayı ağaçta taşı.

OturumYol parametresi: page

🔴 **Döngü kapısı**: bir sayfa kendi altına (ya da kendi torununun altına) taşınamaz. Döngü, ağacı gezen HER kodu (menü üretimi, breadcrumb, sitemap) sonsuz döngüye sokar — ve bu, ziyaretçi isteğinde patlar. ⚠ Kapı UYGULAMADA: PostgreSQL'de kendine referanslı FK döngüyü engellemez.

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

`GET /api/web/v1/audit`

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

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

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

Page plan

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

`POST /api/web/v1/pages/{page}/presence`

OturumYol parametresi: page

Nabzı yazar ve **BAŞKALARINI** döndürür (kendini değil: kullanıcı zaten kendisinin burada olduğunu biliyor ve listede kendini görmek "iki kişi var" gibi okunur).

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

`POST /api/web/v1/posts/{post}/publish`

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

`POST /api/web/v1/pages/{id}/restore` — çöpten geri getir (BLE2-12888).

OturumYol parametresi: page

🔴 **TASLAĞA döner, yayına DEĞİL.** Geri getirmek yayınlamak değildir; bir sayfayı çöpten çıkarıp doğrudan ziyaretçiye açmak, yayın kapısını (`web.publish`) `content.write` ile atlamak olurdu (sürüm geri dönüşünün aynı kararı). ⚠ `live_version_id` çöpe atılırken temizlendi; geri gelen sayfa içeriğini KORUR (sürüm defteri durur) ama yeniden yayınlanmayı bekler.

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

`POST /api/web/v1/pages/{page}/review-link` — misafir inceleme bağlantısı.

OturumYol parametresi: page

🔴 `content.write` yeter, `publish` İSTENMEZ: müşteriye taslağını göstermek yayınlamak değildir (önizleme bağlantısının aynı gerekçesi).

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

`PATCH /api/web/v1/pages/{id}/seo` — sayfanın SEO künyesi (BLE2-13465).

OturumYol parametresi: page

# 🔴 Bu kolon aylardır OKUNUYOR ama YAZILAMIYORDU `render.rs` `web.pages.seo`yu okuyup temaya veriyordu; onu yazan hiçbir yol yoktu. Yani müşteri, sayfasının arama motorunda görünen başlığını ve açıklamasını **hiçbir yerden** değiştiremiyordu ve bunu hiçbir hata söylemiyordu — kolon "var"dı, ekran yoktu. # 🔴 Eksiklik "değişmedi", `null` "temizle" Gövde bir YAMADIR: verilmeyen alan olduğu gibi kalır. Tam-değiştirme yapan bir uç, yalnız başlığı düzelten bir isteği açıklamayı SİLEN bir isteğe çevirirdi (B2B-40'ta canlı künye böyle silindi). ⚠ Ayrı bir uç, genel bir `PATCH /pages/{id}` yerine: genel yama TAM girdi isterdi ve yalnız SEO'yu değiştiren bir çağrı 422 alırdı.

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

`GET /api/web/v1/pages/{id}/seo-audit` — SEO denetimi: yapısal veri +

OturumYol parametresi: page

meta bulguları + skor (BLE2-13492 · 13500..13506). ⚠ Uç TEK: "yapısal veri" ile "meta denetimi" kullanıcı için AYNI sorunun (bu sayfa arama motorunda nasıl görünüyor) iki yüzüdür; iki uç, panelde iki tur ve iki ayrı boş durum demekti. # 🔴 Künyeyi YENİDEN KURMAZ Kompozisyon `yapisal_veri::sayfa_icin`dedir ve renderer da onu kullanır. İkinci bir kopya er geç ayrışır ve panel *"her şey yolunda"* derken ziyaretçiye başka bir künye gider — doğrulama aracının var oluş sebebini yok eder. ⚠ Ölçüt CANLI sürümdür: taslak bir sayfanın künyesini "yayında böyle görünüyor" diye göstermek yalan olurdu. Canlı sürüm yoksa uç bunu SÖYLER.

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

`GET /api/web/v1/pages/{id}/siblings` — dil kardeşleri (BLE2-13452).

OturumYol parametresi: page

# Neden var Çevirmen, hedef sayfayı yazarken KAYNAK metni görmek zorunda. Sekme değiştirerek çalışmak, her blokta bir gidiş-geliş demektir ve uzun bir sayfada çevirmen sırasını kaybeder. Dönen her satır o dildeki sayfanın **en son sürümünü** taşır: yayındakini değil. Çevirmen taslakta çalışıyor olabilir ve kaynak taslağı görmesi meşrudur — yayına bakan bir sürüm, henüz yayınlanmamış bir kaynağı çevirmesini imkânsız kılardı.

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

`PATCH /api/web/v1/pages/{id}/template` — sayfa şablonu (BLE2-12889).

OturumYol parametresi: page

# 🔴 Değer AKTİF TEMANIN şablon kümesinden gelmek zorunda Uydurma bir şablon adı sessizce `page`e düşer (`YuklenmisTema::sablon` yedeği) ve kullanıcı "seçtim ama değişmedi" der. Doğrulama yazma anındadır; panelin seçici çizmesi bir KOLAYLIKTIR, kapı değil (DOM'u atlayan istemci). ⚠ Ayrı bir uç, genel bir `PATCH /pages/{id}` yerine: genel yama TAM girdi isterdi (`title` zorunlu) ve yalnız şablonu değiştiren bir çağrı 422 alırdı.

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

`PATCH /api/web/v1/pages/{id}/translation` — dil kardeşliği (BLE2-13447).

OturumYol parametresi: page

# 🔴 Kardeşlik bir GRUPTUR, çift değil `a → b` biçiminde bir işaretçi tutan tasarımda üçüncü dil eklendiğinde zincir kurulur ve bir halka koparsa diller birbirini GÖREMEZ. Ortak bir `translation_group` kimliği, N dilin hepsini tek sorguyla verir. # 🔴 Aynı dilden İKİ kardeş olamaz Dil değiştirici hangi sayfaya gideceğini bilemezdi. Kapı `pages_dil_kardesi_uk` kısmi unique indeksidir; uç onu ANLAŞILIR bir cümleye çevirir. ⚠ Kuşak İLERLETİLİR: `hreflang` ve dil değiştirici KARDEŞLERDEN doğar, yani bağ kurmak sayfanın çıktısını değiştirir. İlerletmeyen bir sürümde müşteri bağı kurar ve bir saat boyunca hiçbir şey değişmez ("yaptım, olmadı").

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

`POST /api/web/v1/posts/{post}/unpublish` — arşive al.

OturumYol parametresi: page

🔴 `archived`, `draft`tan AYRIDIR: taslak "henüz yayınlanmadı", arşiv "yayındaydı, kaldırıldı". Birleştirmek, eski adresine gelen ziyaretçiye ne olacağı sorusunu cevapsız bırakırdı.

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

`GET /api/web/v1/audit`

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

`POST /api/web/v1/pages/{page}/versions` — yeni sürüm (+ opsiyonel yayın).

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