Skip to main content
Bu sayfa, bir kliniğin personelini API’den yönetmeyi anlatır: kullanıcıları listeleme ve oluşturma, rolleri düzenleme, izin kataloğunu okuma ve başka bir kliniğe davet gönderme. Bir kişinin tek bir hesabı vardır; her klinik bu hesaba yalnızca üyelik ve o kliniğe özel roller ekler. Rol ve izinler her zaman X-Tenant ile seçtiğiniz klinik için geçerlidir. Bu yüzden başka bir kliniğe verilen izin, ilk klinikte işe yaramaz.
Panelde aynı işlemler için bkz. Kullanıcılar, Roller ve İzin kataloğu. Asistanlar için bkz. Doktorlar, asistanlar ve odalar.

Endpoint özeti

Taban adres https://app.flextell.ai/api/v1. POST /invitations/preview ve /account/* uçları dışındaki her uç X-Tenant başlığı ister (Klinikler ve X-Tenant). Her çağrıda hem scope hem de kliniğinizdeki izin gerekir (İzinler ve görünürlük). users, roles, permissions ve invitations uçları kurulum kilidine (428 SETUP_REQUIRED) takılmaz. Abonelik kilitleri bu uçlarda da geçerlidir (Erişim kilitleri).

Kullanıcılar

Kullanıcı alanları hesap geneldir: ad, e-posta, parola, telefon, unvan ve is_active kişinin tüm kliniklerinde aynıdır. Bir klinikte yaptığınız düzenleme, kişinin üye olduğu diğer klinikleri de etkiler.

Listeleme

Liste yalnızca X-Tenant ile seçtiğiniz kliniğin üyelerini döndürür. Sayfalama için bkz. Sayfalama, sıralama kuralları için Filtreleme ve sıralama.

Kullanıcı oluşturma ve güncelleme

POST /users her zaman yeni bir hesap açar. email hiçbir canlı hesapta kayıtlı olmamalıdır; zaten Flextell hesabı olan birini başka bir kliniğe davetle ekleyin. PUT /users/{id} aynı alanları kabul eder, hepsi isteğe bağlıdır. password göndermezseniz sistem rastgele bir parola atar ve kullanıcıya parola belirleme e-postası yollar; bağlantı 60 dakika geçerlidir. avatar_url gönderseniz de yok sayılır. Yanıt {"success": true, "data": {...}} biçimindedir; oluşturma 201 döner. Gönderdiğiniz alanlara ek olarak şunları içerir: id, avatar_url, last_login_at, last_login_ip, roles (bu klinikteki {id, name} çiftleri), import_source (yalnızca tekil okumada, yoksa null), created_at, updated_at, deleted_at.

Silme

DELETE /users/{id} kişi başka bir aktif kliniğin de üyesiyse yalnızca bu kliniğin üyeliğini ve bu klinikteki rollerini kaldırır. Başka klinik yoksa hesabın kendisi silinir. Geri alma ya da kalıcı silme endpoint’i yoktur. Randevu, satış ve destek talepleri geçmişte kalır. Silmeden önce GET /users/{id}/deletion-relations ile bu klinikte etkilenecek kayıtlara bakın. Yanıt [{relation, label, count, deleted}] listesidir ve yalnızca en az bir kaydı olan ilişkileri içerir. relation değerleri appointments (Randevular), assistant_appointments (Asistan olduğu randevular), sales (Satışlar) ve tickets (Destek talepleri) olur. deleted her zaman false’tur; geçmiş korunur.

Roller ve izinler

Her klinik 7 sistem rolüyle açılır. API rol adlarını İngilizce anahtarlarıyla döndürür. super_admin bir joker değildir. Her izne açıkça sahiptir.

Rol nesnesi ve listeleme

Rol nesnesi: id, tenant_id, name, is_system, created_at, updated_at. permissions_count liste, tekil okuma, oluşturma ve güncelleme yanıtlarında; permissions ([{id, name}]) tekil okuma, oluşturma ve güncelleme yanıtlarında gelir. GET /roles parametreleri: search (en çok 255 karakter), is_system (true/false), sort_by (name, created_at, updated_at; varsayılan created_at), sort_order (varsayılan desc), per_page (1–100, varsayılan 15) ve page.

Rol oluşturma ve güncelleme

POST /roles ve PUT /roles/{id} şu alanları alır.
  • is_system, tenant_id ve guard_name gönderseniz de yok sayılır; rol her zaman özel rol olarak bu klinikte oluşur.
  • Sistem rollerinin adı değişmez (422, name). İzinleri düzenlenebilir.
  • Sistem rolleri silinemez (403). Özel bir rolü silmek kalıcıdır ve role sahip kullanıcılar rolü hemen kaybeder.
  • API izinsiz rol kabul eder. Panel formu ise en az bir izin ister.

Yetki yükseltme koruması

Sahip olmadığınız bir izni veremezsiniz. Kurallar rol düzenlemede ve rol atamada geçerlidir; super_admin rolüne sahip kullanıcılar bu kuralların dışındadır. Rol atama ihlalleri role_ids alanında 422 döner. Bu mesajlar İngilizce ya da sabit Türkçedir ve Accept-Language ile değişmez. Yalnızca eklenen ya da kaldırılan roller denetlenir; kullanıcının mevcut rollerini aynen yeniden kaydetmek sorun çıkarmaz.

Rol atama

PUT /users/{id}/roles kullanıcının bu klinikteki rollerini role_ids ile tamamen değiştirir. role_ids alanı zorunludur; boş dizi bu klinikteki tüm rolleri kaldırır. Yalnızca bu kliniğin rolleri kabul edilir; diğer kliniklerdeki roller etkilenmez.

İzin kataloğu ve kendi izinleriniz

GET /permissions atanabilir izinleri modül ve gruba göre döndürür:
İzin adı Fiil:Konu biçimindedir. label Accept-Language ile yerelleşir; module_label ve group_label her zaman Türkçedir. Yalnızca klinik rollerine atanabilen izinler döner. Kendi izinlerinizi görmek için X-Tenant ile GET /account/roles çağırın (Hesap). Scope’lar için bkz. Scope’lar.

Davetler

Mevcut bir Flextell hesabını başka bir kliniğe eklemenin tek yolu davettir. Davet bir e-posta adresine ve tek bir role bağlıdır. POST /invitations gövdesi: Sistem şu sırayla denetler ve ilk hatada durur: e-posta zaten bu kliniğin üyesi mi, boş kullanıcı kotası var mı, rol bu kliniğe ait ve atanabilir mi, aynı e-posta için süresi dolmamış bekleyen başka davet var mı. Davet 7 gün geçerlidir ve e-postayla gider. E-postada Daveti görüntüle düğmesi ve 8 karakterli Davet kodu bulunur. Kod ve bağlantı anahtarı API yanıtında dönmez.
  • Bekleyen davetler kullanıcı kotasında yer ayırmaz. Kota yalnızca oluşturma, yeniden gönderme ve kabul anında denetlenir.
  • Rol, davet edenin sahip olduğu izinlerle sınırlıdır. Yalnızca super_admin biri super_admin olarak davet edebilir.
  • Davet oluşturma, yeniden gönderme, önizleme ve çözümleme birlikte dakikada 10 istekle sınırlıdır (Oran sınırları).
  • Kliniğinizden çıkarılmış bir üyeyi yeniden davet edebilirsiniz.
  • Bu API yeni hesap oluşturmaz. Davet edilen kişinin önce bir Flextell hesabı olmalıdır.
Davet nesnesi: id, email, tenant ({id, name}), role_id, role_name (örneğin doctor), status, expires_at, processed_at, created_at. GET /invitations en yeni davetten başlar. status, created_at_from, created_at_to, expires_at_from, expires_at_to, per_page ve page ile filtrelenir.
  • Yeniden gönderme: POST /invitations/{id}/resend yalnızca bekleyen (süresi dolmuş olanlar dahil) davetler için çalışır. Kodu ve bağlantıyı yeniler, eskileri geçersiz kılar, süreyi 7 gün sıfırlar. Rol aynı kalır.
  • İptal: DELETE /invitations/{id} yalnızca bekleyen davetleri cancelled yapar. E-posta gitmez, kayıt geçmişte kalır.

Daveti kabul etme

Bu bölüm davet edilen kişinin tarafıdır. Bu çağrılar klinik adına değil, kendi hesabı adına yapılır ve X-Tenant istemez.
1

Daveti bulun

E-postadaki bağlantıda token (64 küçük harfli onaltılık karakter) bulunur. POST /invitations/preview bu token ile, oturum açmadan davetin hangi klinik ve e-posta için olduğunu gösterir. Giriş yapmış kişi 8 karakterli kodla POST /account/invitations/resolve çağırabilir ya da GET /account/invitations ile kendi davetlerini listeleyebilir. Çözümleme daveti tüketmez.
2

Kabul edin

POST /account/invitations/{id}/accept çağırın. E-postanız doğrulanmışsa gövde gerekmez. Doğrulanmamışsa e-postayla gelen code ya da token değerini gönderin; kabul e-postanızı da doğrulanmış yapar.
3

Sonucu okuyun

Yanıt, katıldığınız kliniğin bilgisini setup_required alanıyla birlikte döndürür. Davetteki rol, o klinikteki önceki rollerinizin yerine geçer. Diğer kliniklerdeki üyelik ve rolleriniz değişmez.
Daveti reddetmek için aynı gövdeyle POST /account/invitations/{id}/reject çağırın; yanıtta status değeri rejected olur. Başkasına ait bir davet ya da var olmayan bir id, aynı şekilde 404 INVITATION_INVALID döndürür. Kabul için hesabınızda name dolu olmalıdır, kullanıcı kotasında yer olmalıdır ve davetteki rol hâlâ var olmalıdır.

Kurallar ve hatalar

Hata zarfı ve genel kodlar için bkz. Hata kodları. Kota kuralı: yalnızca kliniğin aktif kullanıcıları sayılır. Pasif kullanıcı oluşturmak ve kullanıcıyı pasife almak hiçbir zaman engellenmez. PUT /users/{id} ile aktifleştirmede kota hatası USER_LIMIT_REACHED kodu yerine errors.is_active alanında VALIDATION_FAILED olarak döner.