CRM

lc

92 uç · /api/crm/v1/lc

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

DELETE/api/crm/v1/lc/ai-agent-preview/conversations/{id}

Preview delete

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent-preview/conversations/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/articles/ingest

Ingest articles

Oturum
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/articles/ingest" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/articles/uningest

Uningest articles

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

Bakiye + kullanım grafiği + paketler + otomatik yükleme durumu.

Oturum

Tek uç: panel açılışında dört ayrı istek yapmasın (bakiye sayfası her AI ekranının üstünde bir bant olarak da kullanılır).

İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/credits/3ds-return

3DS dönüşü (PUBLIC): banka doğrulamayı bitirince buraya POST eder.

Herkese açık

Neden ayrı bir PUBLIC uç: banka çağrısı kullanıcı oturumu taşımaz ve `payment_id` yalnız bu POST'ta gelir. Tarayıcı tarafında "pencere kapandı → tamamla" varsayımıyla `conversation_id`'yi `payment_id` sanmak iyzico'da HER ZAMAN başarısız olurdu. Dönüş bir **HTML sayfasıdır**: banka bunu iframe/pencere içinde açar; sayfa `postMessage` ile ana pencereye sonucu bildirir ve kendini kapatır. # Panics Yok — tüm hata yolları HTML sayfasıyla kapatılır (bankaya 500 dönmek yeniden deneme fırtınası başlatır).

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits/3ds-return" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/credits/3ds-return

GET karşılığı — bazı bankalar callback'i query-string ile yapar. POST-only bir uç

Herkese açık

bu durumda ödeme alınmış ama kredi yüklenmemiş bırakırdı.

İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits/3ds-return" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/credits/auto-reload

Auto reload

Oturum
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits/auto-reload" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/credits/checkout

Kayıtlı kartla 3DS başlat → banka HTML challenge.

Oturum

Kredi burada YÜKLENMEZ; yalnız ödeme başlatılır (bkz. modül başlığı).

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits/checkout" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/credits/checkout/complete

3DS tamamla → **ödeme başarılıysa** krediyi yükle + faturayı kes.

Oturum

⚠ Normal akışta bu uç ÇAĞRILMAZ: bankanın POST'u doğrudan [`threeds_return_h`]'e gider ve tamamlamayı orası yapar (`payment_id` yalnız o POST'ta bulunur). Bu uç **elle kurtarma** yoludur: callback kaybolduysa (ağ/edge kesintisi) operatör iyzico panelindeki `paymentId` ile ödemeyi tamamlatabilir. Aynı çift-yükleme koruması burada da işler. Sıra: iyzico onayı → fatura → yükleme. Fatura üretimi patlarsa kredi yine yüklenir (müşteri parayı ödedi; belgesizlik onu cezalandırmamalı) ve hata loglanır.

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits/checkout/complete" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/credits/invoices

Invoices

Oturum
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits/invoices" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/credits/invoices/{id}/pdf

Invoice pdf

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/credits/invoices/<id>/pdf" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/documents

List documents

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

Create document

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

Get document

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/documents/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/crm/v1/lc/ai-agent/documents/{id}

Delete documents

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/documents/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/documents/from-file

CF15 Paket 8: **yüklenmiş bir dosyadan** belge oluştur (PDF · DOCX · metin · HTML).

Oturum

Bu uca kadar "Belgeler" ekranı içeriği kullanıcının **elle yapıştırmasını** istiyordu. ⚠ Dosya bu uca GÖNDERİLMEZ, mevcut `files` hattıyla yüklenir (S3'e presigned PUT, yerel kurulumda `/files/{id}/content`). Sebep: global gövde tavanı **1 MiB** (`MAX_BODY_BYTES`) ve rota-düzeyi bir tavan onu AŞAMAZ — multipart bir uç 1 MiB'ın üstündeki her PDF'i 413 ile reddederdi. Dosya hattının kendi tavanı 25 MiB'dir ve byte'lar uygulamadan hiç geçmez. Metin çıkarımı `ai::extract`tedir; taranmış PDF açıkça reddedilir (sessiz boş belge, kullanıcıyı "AI bunu bilmiyor" diye yanıltırdı).

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/documents/from-file" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/flow-templates

Hazır akışlar — galeri kataloğu. Katalog SUNUCUDADIR (panel yalnız çizer), o

Oturum

yüzden yeni bir şablon eklemek frontend'e hiç dokunmadan yayına girer.

İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/flow-templates" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/flows

List flows

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

Create flow

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

Get flow

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/flows/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/crm/v1/lc/ai-agent/flows/{id}

Update flow

OturumYol parametresi: id
İstek
curl -X PUT "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/flows/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/crm/v1/lc/ai-agent/flows/{id}

Delete flow

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/flows/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/flows/{id}/attachments

Flow eklentileri (attachment byte deposu = CF7-storage/CF14 seam → şimdilik boş).

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/flows/<id>/attachments" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/flows/list

Flows list

Oturum
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/flows/list" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/ingest/website

Ingest website

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

Knowledge

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

CF15 Paket 8: **değişiklik taraması** — kayıtlı web sayfalarını yeniden çeker,

Oturum

içeriği değişenleri yeniden gömülecek işaretler. Değişmeyeni yeniden gömmek para yakmaktır: karşılaştırma içerik üzerinden yapılır (`content_hash` ingest hattında zaten var), bu uç yalnız TAZE içeriği getirip farklıysa yazar.

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/knowledge/refresh" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/preview

Preview

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

List snippets

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

Create snippet

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

Get snippet

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/snippets/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/crm/v1/lc/ai-agent/snippets/{id}

Update snippet

OturumYol parametresi: id
İstek
curl -X PUT "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/snippets/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/crm/v1/lc/ai-agent/snippets/{id}

Delete snippets

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/snippets/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/snippets/ingest

Ingest snippets

Oturum
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/snippets/ingest" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/snippets/uningest

Uningest snippets

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

List tools

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

Create tool

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

Get tool

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/tools/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/crm/v1/lc/ai-agent/tools/{id}

Update tool

OturumYol parametresi: id
İstek
curl -X PUT "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/tools/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/crm/v1/lc/ai-agent/tools/{id}

Delete tool

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/tools/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/tools/list

Tools list

Oturum
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/tools/list" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/tools/test-request

Test request

Oturum
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/tools/test-request" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/webpages

Add webpage

Oturum
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/webpages" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/webpages/{id}/sync

Sync webpage

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/webpages/<id>/sync" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/websites

List websites

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

Create website

Oturum
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/websites" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/crm/v1/lc/ai-agent/websites/{websiteId}

Tekil veya toplu sil (FE `websites/{id}` veya `websites/1,2,3`).

OturumYol parametresi: websiteId
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/websites/<websiteId>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/websites/{websiteId}/discover

CF15 Paket 8: `sitemap.xml` üzerinden site sayfalarını keşfet ve YENİ olanları ekle.

OturumYol parametresi: websiteId

Sitemap yoksa 0 döner — hata değil: sitemap'i olmayan siteler de elle sayfa eklenerek kullanılabilir olmalı.

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/websites/<websiteId>/discover" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agent/websites/{websiteId}/sync

Sync website

OturumYol parametresi: websiteId
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/websites/<websiteId>/sync" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/websites/{websiteId}/webpages

List webpages

OturumYol parametresi: websiteId
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/websites/<websiteId>/webpages" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agent/websites/{websiteId}/webpages/{webpageId}

Get webpage

OturumYol parametresi: websiteIdwebpageId
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/websites/<websiteId>/webpages/<webpageId>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
DELETE/api/crm/v1/lc/ai-agent/websites/{websiteId}/webpages/{webpageId}

Delete webpages

OturumYol parametresi: websiteIdwebpageId
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agent/websites/<websiteId>/webpages/<webpageId>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/ai-agents

List agents

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

Create agent

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

Get agent

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

Update agent

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

Delete agent

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agents/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agents/{id}/activate

Activate agent

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agents/<id>/activate" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agents/{id}/bind

Bind

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agents/<id>/bind" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/ai-agents/{id}/unbind

Unbind

OturumYol parametresi: id
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/ai-agents/<id>/unbind" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/campaign-templates

GET /api/crm/v1/lc/campaign-templates — hazır şablonlar.

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

GET /api/crm/v1/lc/campaigns — kampanya datasource (dashboard).

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

POST /api/crm/v1/lc/campaigns — yeni kampanya.

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

GET /api/crm/v1/lc/campaigns/{id} — tek kampanya.

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

PUT /api/crm/v1/lc/campaigns/{id} — kampanya güncelle.

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

DELETE /api/crm/v1/lc/campaigns/{ids} — kampanya(ları) sil (virgül-ayrık id'ler).

OturumYol parametresi: id
İstek
curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/lc/campaigns/<id>" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/campaigns/{id}/report

GET /api/crm/v1/lc/campaigns/{id}/report — kampanya analitiği.

OturumYol parametresi: id

⚠ Yanıt `{report, campaign}`tır. Kampanyanın kendisi 2026-08-20'ye kadar DÖNMÜYORDU: uç onu yalnız sahiplik kontrolü için okuyup ATIYOR, panel ise `r.data.campaign`ı okuyup başlığa basıyordu. Sonuç: rapor sayfasının `h1`i KALICI bir iskelet çubuğu olarak kalıyor ve sayfa "yüklenmiyor" gibi görünüyordu (kullanıcı raporu, 2026-08-20). Aynı sorgu iki işi görür.

İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/campaigns/<id>/report" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/dashboard/chats/{id}/download-transcript

GET /api/crm/v1/lc/dashboard/chats/{id}/download-transcript — agent transcript indir.

OturumYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/dashboard/chats/<id>/download-transcript" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/reports/campaigns

GET /api/crm/v1/lc/reports/campaigns — kampanya genel bakış raporu.

Oturum
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/reports/campaigns" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/bootstrap

`GET /api/crm/v1/lc/widget/bootstrap` (require_crm_widget). Ziyaretçiyi çöz/oluştur,

Herkese açık

gerekirse widget token'ı `lc_widget` cookie + body (`widgetToken`) ile ver, bootstrap döndür. Anonim (token yok) → yeni ziyaretçi; HMAC-identified (eşleşen token yok) → yeni oturum; dönen ziyaretçi (geçerli token) → reuse + taze per-load sessionId.

İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/bootstrap" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/campaigns

GET /api/crm/v1/lc/widget/campaigns — aktif kampanyalar (widget client-side koşul değerlendirir).

Herkese açık
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/campaigns" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/campaigns/{id}/imp

POST /api/crm/v1/lc/widget/campaigns/{id}/imp — impression beacon (dakika dedupe + interaction).

Herkese açıkYol parametresi: id

Anonim de loglayabilir (user_id opsiyonel); sessionId yoksa no-op (campaigns::log_impression).

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/campaigns/<id>/imp" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/chats

POST /api/crm/v1/lc/widget/chats — müşteri yeni chat (SSE: conversationCreated + endStream).

Herkese açık

Ajanlara ConversationCreated broadcast + Created trigger; bot yanıtı = CF10 seam.

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/chats/{id}/download-transcript

GET /api/crm/v1/lc/widget/chats/{id}/download-transcript — müşteri kendi chat transcript'i.

Herkese açıkYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/download-transcript" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/chats/{id}/mark-as-solved

Widget mark solved

Herkese açıkYol parametresi: id
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/mark-as-solved" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/chats/{id}/messages

GET /api/crm/v1/lc/widget/chats/{id}/messages — ziyaretçinin chat mesajları (eski-mesaj

Herkese açıkYol parametresi: id

sayfalama; ilk sayfa konuşma detayından pre-fill edilir, bu uç yukarı-kaydırma içindir). Ownership (widget_load_owned) → cross-visitor IDOR 404. `{data:[item]}`; FE cursor'a sarar.

İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/messages" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/chats/{id}/messages

POST /api/crm/v1/lc/widget/chats/{id}/messages — müşteri mesajı (SSE: messageCreated +

Herkese açıkYol parametresi: id

endStream). Kilitli→400, reopen=submit_as_customer. Ajanlara newMessage broadcast. HandleLatestUserMessage = no-op (AI kurulu değil → bot yanıtı CF10 seam).

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/messages" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/chats/{id}/messages/{itemId}/feedback

POST /api/crm/v1/lc/widget/chats/{id}/mark-as-solved — ziyaretçi kendi chat'ini kapatır

Herkese açıkYol parametresi: iditemId

(bedesk müşteri close). Ownership → IDOR 404. Kilitli (abuse terminal) kapatılamaz. actor=None → closed_by müşteriye sızmaz (portal_mark_solved deseni). Kapatma durumu yoksa "Solved" üret. CF15 Paket 9 — müşteri bot cevabını değerlendirir (👍/👎 + isteğe bağlı yorum).

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/messages/<itemId>/feedback" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/chats/{id}/messages/{itemId}/sources

CF15 Paket 9 — bot cevabının kaynak kartları.

Herkese açıkYol parametresi: iditemId
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/messages/<itemId>/sources" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/chats/{id}/request-human

CF15 Paket 9 — "insanla görüşmek istiyorum" düğmesi.

Herkese açıkYol parametresi: id

Sınıflandırıcıya bir cümle yazdırmaktan farkı: **niyet açıktır**, LLM çağrısı ve kredi harcanmaz. Bot'a atanmamış (zaten insanda olan) konuşmada no-op.

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/request-human" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/chats/{id}/submit-form-data

POST /api/crm/v1/lc/widget/chats/{id}/submit-form-data — pre/post chat form gönderimi.

Herkese açıkYol parametresi: id
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/<id>/submit-form-data" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/chats/active

GET /api/crm/v1/lc/widget/chats/active — ziyaretçinin açık chat'i (yoksa null).

Herkese açık
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/chats/active" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/conversations

GET /api/crm/v1/lc/widget/conversations — ziyaretçinin konuşmaları (iç alanlar gizli).

Herkese açık
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/conversations" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/conversations/{id}

GET /api/crm/v1/lc/widget/conversations/{id} — konuşma detayı (mesajlar + kuyruk bilgisi).

Herkese açıkYol parametresi: id
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/conversations/<id>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/customer

GET /api/crm/v1/lc/widget/customer — ziyaretçi profili (WidgetCustomerResource).

Herkese açık
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/customer" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/crm/v1/lc/widget/customers/email

PUT /api/crm/v1/lc/widget/customers/email — anonim ziyaretçiye ikincil email ata.

Herkese açık
İstek
curl -X PUT "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/customers/email" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/customers/sync-external-data

POST /api/crm/v1/lc/widget/customers/sync-external-data — dış veri → custom attr senkronu.

Herkese açık
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/customers/sync-external-data" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/file-entries

`POST /api/crm/v1/lc/widget/file-entries` — ZİYARETÇİNİN dosya yüklemesi.

Herkese açık

Ajan ucuyla aynı gövdeyi (`store_upload_response`) paylaşır; ayrılan tek şey KAPI ve KOTA. Ayrı bir uç olmasının sebebi: panelin ucu oturum ister, widget ziyaretçisinin çekirdek oturumu YOKTUR (kimliği widget token'ıdır) — 2026-08-18'e kadar widget de panelin ucuna gidiyor ve 401 alıyordu. 🔴 **Anonim kapıya kotasız yükleme AÇILMAZ.** Buraya ulaşmak için hesap gerekmiyor; sınırsız bırakmak, herhangi birinin kiracının deposunu doldurabilmesi demektir. Üç sınır birden uygulanır: 1. **kimlik**: `require_visitor` — bootstrap'tan geçmiş bir ziyaretçi oturumu şart 2. **hız**: ziyaretçi başına `WIDGET_UPLOAD_LIMIT` / `WIDGET_UPLOAD_WINDOW` 3. **boyut**: `WIDGET_MAX_UPLOAD_BYTES` (panelin tavanından KÜÇÜK — bilinçli)

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/file-entries" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/help-center-data

GET /api/crm/v1/lc/widget/help-center-data — widget içi HC landing (kategori/section/makale).

Herkese açık
İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/help-center-data" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/crm/v1/lc/widget/home-article-list

GET /api/crm/v1/lc/widget/home-article-list — home ekranı için öne çıkan makaleler.

Herkese açık

L2: landing verisinden beslenir (öne çıkan makale seçimi L7'de inceltilir).

İstek
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/home-article-list" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/visits

POST /api/crm/v1/lc/widget/visits — sayfa ziyareti kaydı (5sn dedupe). PageVisitCreated

Herkese açık

broadcast = L5. session_id touch widget gate'inde (resolve_visitor_by_token) yapılır.

İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/visits" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/crm/v1/lc/widget/visits/{id}/change-status

POST /api/crm/v1/lc/widget/visits/{id}/change-status — beacon (ended/active → ended_at).

Herkese açıkYol parametresi: id
İstek
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/lc/widget/visits/<id>/change-status" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
Bu sayfa işine yaradı mı?