customers
31 uç · /api/crm/v1/customers
İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 31 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.
POST /api/crm/v1/customers — panelden ELLE müşteri ekle (IAM-41).
Eski panel formu (havuzun CreateUserDialogı) PAROLA soruyordu ve arkasındaki uç
**hiç yoktu** — form 404 alıyordu (ölçüldü 2026-08-24). Uç artık var ve parola
ALMIYOR: müşterinin portal erişimi paroladan değil sihirli bağlantıdan gelir.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/customers" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}bedesk CustomerProfileController::show — LoadCustomerProfile (users.update yetkisi gate'i
userIdrequire_crm_access + RBAC ile; detaylı izin CF5). Müşteri yoksa 404.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}bedesk CustomerProfileController::update — profil detay/not/tag/email/temel alanları günceller.
userIdcurl -X PUT "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}bedesk CustomersController::destroy — müşteriyi sil (tüm CRM izi).
userIdcurl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/activity-summary" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X PATCH "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/attributes" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET me/push-devices — {available: {ios, android}, devices: [...]}. Mobil, bildirim
userIdanahtarını availablea bakarak çizer (hazır değilse "yakında" DEĞİL, hiç çizmez).
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/channel-profiles" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Kişinin TÜM kimliklerini 24 saat kuralını yok sayarak tazele.
userIdBir kimliğin hatası ötekileri DURDURMAZ; her hata yanıtta kimliğiyle birlikte döner (sessizce "tazelendi" demek, düzeltilmesi gereken bir izin sorununu gizlerdi).
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/channel-profiles/refresh" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /customers/{userId}/channels — yeni görüşmenin ilk mesajı hangi kanallardan
userIdgidebilir (CHAN-09'un kişi hâli; reply-channels konuşmanınkidir, satır şekli AYNI).
options[].is_current = sunucunun channel_account_id verilmezse seçeceği kanal;
default aynı kararın tamamı (kanal · e-posta · yok). Seçici ile gönderim AYNI
fonksiyondan okur (outbound::pick_person_route).
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/channels" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /customers/{userId}/commerce — müşteri profilinin ticari künyesi.
userIdKonuşma ucuyla AYNI karar (commerce::snapshots_for_customer → tek kapı) ve AYNI
sahip-muafiyetsiz izin gerekçesi; kişiyi görebilen temsilci (crm.contacts.view)
ONUN siparişlerini de görür — konuşmanın sağ paneliyle aynı bilgi.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/commerce" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X PATCH "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/contact-identity" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}bedesk CustomerProfileController::conversations — müşterinin konuşmaları (simplePagination).
userIdcurl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/conversations" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}CHAN-08 — kişinin olası kopyaları (telefon son-9 hane · gerçek e-posta).
userId🔴 Yalnız ÖNERİR. Birleştirme temsilcinin kararıdır (POST /customers/merge):
ortak aile/şirket numarası iki farklı insanı aynı kişi gibi gösterebilir.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/duplicate-candidates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/identity-suggestions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X DELETE "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/notes/<noteId>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}POST /api/crm/v1/customers/{userId}/portal-link — ajan, müşteriye portal giriş
userIdbağlantısı gönderir.
Müşteri bağlantıyı /hcden kendisi de isteyebilir; bu uç destek ekibinin
*"portalına giremiyorum"* diyen müşteriye telefonda yardım edebilmesi içindir.
🔴 Bağlantı EKRANDA GÖSTERİLMEZ, yalnız müşterinin e-postasına gider: ekrana
basılan bir giriş bağlantısı, o adrese sahip olmayan birinin de portala
girebilmesi demekti.
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/portal-link" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}GET /customers/{userId}/wa-templates?account= — YENİ görüşmenin şablon seçicisi.
userIdconversations/{id}/wa-templatesin kişi hâli (yanıt şekli AYNI, aynı yardımcıdan):
yeni görüşmede henüz konuşma yoktur, ve öbür iki liste (channels/templates ·
wa-campaigns/templates) ayar/kampanya izni ister — sıradan temsilci pencere kapalı
WhatsApp müşterisine ilk mesajı atamıyordu (mobil 3. tur §1). İzin new-as-agent ile
AYNIDIR: şablonu seçebilen onu gönderebilir de.
account verilmezse hesap new-as-agentin şablonlu gönderimde seçeceği hesaptır
(pick_person_route, şablon kipi) — seçici "şunu göndeririz" deyip gönderim başka
hesaba gitmesin. Kişinin o hesapta kimliği yoksa **422** (CRM-OUT-0005), hesap
kaldırılmış/bağlı değilse 422 (0008/0006); WhatsApp dışı hesap boş liste döner.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/wa-templates" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Bir müşterinin sayfa ziyaretleri (bedesk visits/{userId}) — sidebar paneli.
userIdGET /api/crm/v1/customers/{userId}/web-activity — widget oturum sayısı, ilk ve son
oturum (cihaz · dil · saat dilimi · ilk giriş sayfası · dış referrer · utm) ve ziyaret
sayısı. Sağ panelin "Cihaz ve kaynak" bölümünün tek veri kaynağı.
curl -X GET "https://{slug}.crm.blesyum.app/api/crm/v1/customers/<userId>/web-activity" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}bedesk MergeCustomersController — iki müşteriyi birleştir (mergee → target).
curl -X POST "https://{slug}.crm.blesyum.app/api/crm/v1/customers/merge" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}