> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flextell.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Uygulamalar (API erişimi)

> API ile Flextell'e bağlanacak uygulamalar için OAuth uygulaması oluşturmayı, gizli anahtarı, scope'ları ve uygulamayı iptal etmeyi anlatır.

Bir yazılım ekibi, ajans veya kendi geliştiriciniz Flextell verilerine API ile bağlanacaksa önce bir **uygulama** kaydetmeniz gerekir. Bu sayfa uygulamanın nasıl oluşturulacağını, gizli anahtarın nasıl saklanacağını ve erişimin nasıl kısıtlanıp kapatılacağını anlatır.

Sayfa menüde **Bağlantılar → Uygulamalar** altındadır. Sayfayı görmek için rolünüzde **OAuth Uygulamaları** grubundan **Görüntüleme** izni olmalıdır.

## Uygulama nedir

Uygulama, Flextell'e kendini tanıtan bir OAuth istemcisidir. Geliştirici bu kayıttaki `Client ID` ve `Client Secret` ile kullanıcıdan izin ister, karşılığında bir `access_token` alır ve API'yi bu token ile çağırır.

* Uygulama klinikte değil, **sizin kullanıcı hesabınızda** durur. Başka bir kullanıcının oluşturduğu uygulamayı listede görmezsiniz; siz oluşturduğunuz uygulamaları yönetirsiniz.
* Panelden veya API'den oluşturulan her uygulama gizli anahtarlı (confidential) bir yetkilendirme kodu istemcisidir. Kod değişimi, gizli anahtarın saklanabildiği bir sunucuda yapılmalıdır; tarayıcıda çalışan saf bir SPA veya mobil uygulama gizli anahtarsız kaydedilemez.
* Uygulamanın erişebileceği alan, seçtiğiniz **scope**'larla sınırlıdır. Uygulama bu scope'ların dışındaki bir izin isteyemez.

Listede şunları görürsünüz:

| Sütun | Açıklama |
| - | - |
| **Uygulama Adı** | Uygulamanın adı. Sıralanabilir. |
| **Client ID** | Uygulamanın kimliği. Tıklayınca kopyalanır (`Client ID kopyalandı`). |
| **Yetkiler** | Seçili scope sayısı (`3 yetki` gibi). |
| **Aktiflik** | `Aktif` veya `Pasif`. İptal edilmiş uygulama `Pasif` görünür. |
| **Oluşturulma Tarihi**, **Güncellenme Tarihi** | Varsayılan sıralama en yeni oluşturulandır. |

Üstteki arama kutusu (**Uygulama adı**) ada göre arar.

## Uygulama oluşturma

Uygulama oluşturmak için rolünüzde **Oluşturma** izni ve seçili klinikte geçerli bir oturum gerekir.

<Tabs>
  <Tab title="Panel">
    <Steps>
      <Step title="Sihirbazı açın">
        **Bağlantılar → Uygulamalar** sayfasında **Uygulama Oluştur**'a tıklayın.
      </Step>

      <Step title="Uygulama bilgilerini girin">
        **Uygulama Bilgileri** adımında alanları doldurun ve **İleri**'ye tıklayın.
      </Step>

      <Step title="İzinleri seçin">
        **İzinler** adımında uygulamanın erişeceği scope'ları işaretleyin. **Tümünü Seç** hepsini işaretler. Arama kutusu scope kodu ve açıklamasında arar. Liste seçili klinik için yüklenir; yüklenemezse `Yetki listesi yüklenemedi.` uyarısı görünür. **İleri**'ye tıklayın.
      </Step>

      <Step title="Kimlik bilgilerini kaydedin">
        **Kimlik Bilgileri** adımında **Client ID** ve **Client Secret** değerlerini kopyalayıp güvenli bir yere kaydedin. Sonra **Bitir**'e tıklayın.
      </Step>
    </Steps>
  </Tab>

  <Tab title="API">
    Önce erişebileceğiniz scope'ları listeleyin. `X-Tenant` başlığı zorunludur.

    ```bash theme={null}
    curl https://app.flextell.ai/api/v1/oauth/scopes \
      -H "Authorization: Bearer <access_token>" \
      -H "X-Tenant: <tenant_id>" \
      -H "Accept: application/json"
    ```

    Sonra uygulamayı oluşturun. `oauth_clients:write` scope'lu bir token ve klinikte `Create:Client` izni gerekir.

    ```bash theme={null}
    curl -X POST https://app.flextell.ai/api/v1/oauth/clients \
      -H "Authorization: Bearer <access_token>" \
      -H "X-Tenant: <tenant_id>" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Örnek Entegrasyon",
        "redirect_uris": ["https://example.com/callback"],
        "post_logout_redirect_uris": ["https://example.com/logged-out"],
        "scopes": ["customers:read", "appointments:read", "account:read"]
      }'
    ```

    Yanıt `201` döner ve `data.secret` alanında gizli anahtarı içerir.
  </Tab>
</Tabs>

### Alanlar

| Alan | Zorunlu | Kural |
| - | - | - |
| **Uygulama Adı** (`name`) | Evet | En fazla 255 karakter. |
| **Yönlendirme URI'leri** (`redirect_uris`) | Evet | 1 ile 20 adres. Her biri geçerli bir `http` veya `https` adresi, en fazla 2048 karakter. Örnek: `https://example.com/callback`. |
| **Çıkış Sonrası Yönlendirme URI'leri** (`post_logout_redirect_uris`) | Hayır | En fazla 20 adres, aynı kurallar. Oturum kapatıldıktan sonra dönülecek adreslerdir. |
| **İzinler** (`scopes`) | Evet | En az bir scope. Geçersiz veya kapalı bir scope `OAUTH_SCOPE_INVALID` (422) döndürür. |

<Note>
  Yönlendirme adresleri yetkilendirme sırasında birebir eşleşmelidir. `myapp://callback` gibi özel uygulama şemaları kabul edilmez. `localhost:3000` gibi tek etiketli adresler kabul edilir.
</Note>

`openid`, `profile`, `email` ve `phone` scope'ları her uygulama için zaten açıktır; listeye eklemezsiniz.

Geliştiricinin kullanıcıdan nasıl izin alacağı ve token'ı nasıl değiştireceği için [Yetkilendirme kodu ve PKCE](/api/kimlik-dogrulama/yetkilendirme-kodu-ve-pkce) sayfasına bakın.

## Gizli anahtarı saklama

`Client Secret` yalnızca oluşturma yanıtında bir kez gösterilir. Flextell yalnızca özetini tutar, bu yüzden sonradan okunamaz.

<Warning>
  Pencereyi kapatmadan önce `Client Secret` değerini şifre yöneticisi gibi güvenli bir yere kaydedin. Gizli anahtarı e-postayla, sohbet uygulamasıyla veya kaynak koduyla paylaşmayın.
</Warning>

Anahtarı kaybettiyseniz veya sızdığından şüphelenirseniz yenisini üretin. Bu işlem şu an yalnızca API ile yapılır ve rolünüzde **Güncelleme** izni gerekir:

```bash theme={null}
curl -X POST https://app.flextell.ai/api/v1/oauth/clients/<client_id>/secret \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>" \
  -H "Accept: application/json"
```

Yanıt 40 karakterlik yeni anahtarı bir kez döndürür. Eski anahtar token uç noktasında çalışmaz. Daha önce verilmiş token'lar süresi dolana kadar geçerli kalır.

Sızıntı durumunda anahtarı yenilemenin yanında, uygulamaya verilmiş tüm erişim token'larını `DELETE /api/v1/oauth/clients/<client_id>/tokens` ile iptal edebilirsiniz (rolde **Erişimi kaldırma** izni gerekir). Bu çağrı uygulamayı aktif bırakır.

## Scope'ları güncelleme

Bir uygulamanın scope listesini sonradan değiştirebilirsiniz. Gerekli izin **Kapsamları güncelleme**'dir.

<Steps>
  <Step title="Menüyü açın">
    Uygulamanın satırındaki menüden **Yetkileri Güncelle**'yi seçin.
  </Step>

  <Step title="Scope'ları düzenleyin">
    Mevcut seçimle açılan listede scope'ları işaretleyin veya kaldırın.
  </Step>

  <Step title="Kaydedin">
    **Güncelle**'ye tıklayın. `Uygulama yetkileri güncellendi` bildirimi görünür.
  </Step>
</Steps>

Aynı işlemi API ile de yapabilirsiniz. Gönderdiğiniz liste mevcut listenin yerine geçer:

```bash theme={null}
curl -X PUT https://app.flextell.ai/api/v1/oauth/clients/<client_id>/scopes \
  -H "Authorization: Bearer <access_token>" \
  -H "X-Tenant: <tenant_id>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"scopes": ["customers:read", "account:read"]}'
```

<Note>
  Değişiklik yeni yetkilendirmelere hemen uygulanır. Kaldırdığınız bir scope'u isteyen yetkilendirme `invalid_scope` hatası alır. Uygulamanın hâlihazırda aldığı access token'lar kendi scope'larını süreleri dolana kadar korur (5 dakika). Token yenilemede kaldırılan scope'lar sessizce çıkarılır.
</Note>

Uygulamanın adını veya yönlendirme adreslerini değiştirmek için satır menüsünden **Düzenle**'yi kullanın. Bu pencere scope'ları içermez; **Kaydet** sonrası `Uygulama güncellendi` görünür. Gönderilen adres listesi eskisinin yerine geçer.

## İptal ve yeniden etkinleştirme

Bir uygulamanın erişimini silmeden kapatmak için iptal edin. Rolünüzde **Erişimi kaldırma** izni gerekir.

<Steps>
  <Step title="İptal edin">
    Satır menüsünden **İptal Et**'i seçin ve onay penceresinde yeniden **İptal Et**'e tıklayın.
  </Step>

  <Step title="Sonucu kontrol edin">
    `<Ad> uygulaması iptal edildi` bildirimi görünür ve **Aktiflik** sütunu `Pasif` olur.
  </Step>
</Steps>

<Info>
  **İptal Et** burada uygulamanın erişimini kaldırır; pencereyi kapatmaz. Pencereyi kapatmak için **Vazgeç**'i kullanın.
</Info>

İptal edilen uygulamanın tüm access token'ları geçersiz olur. Uygulama yeni yetkilendirme başlatamaz, token yenileyemez ve API çağrıları `401` döner. Uygulama kaydı, scope'ları ve `Client ID` yerinde kalır.

Erişimi geri vermek için satır menüsünden **Etkinleştir**'i seçin. Bu işlem rolünüzde **Aktifleştirme** izni ister ve `<Ad> uygulaması etkinleştirildi` bildirimini gösterir. Zaten iptal edilmiş bir uygulamayı tekrar iptal etmeye çalışırsanız `Bu uygulamanın erişimi zaten kaldırılmış.`, aktif bir uygulamayı etkinleştirmeye çalışırsanız `Bu uygulama zaten aktif.` mesajını alırsınız.

## Uygulamayı silme

Artık kullanılmayan bir uygulamayı silin. Rolünüzde **Silme** izni gerekir.

<Steps>
  <Step title="Silmeyi başlatın">
    Satır menüsünden **Sil**'i seçin. Birden fazla uygulamayı satırların başındaki kutularla seçip üstteki **Sil** ile de silebilirsiniz.
  </Step>

  <Step title="Onaylayın">
    Onay penceresinde silmeyi onaylayın. `<Ad> uygulaması silindi` bildirimi görünür.
  </Step>
</Steps>

<Warning>
  Silme kalıcıdır. Uygulama; access token'ları, refresh token'ları ve yetkilendirme kodlarıyla birlikte silinir ve bu uygulamayı kullanan tüm entegrasyonlar anında çalışmaz hâle gelir. Geçici olarak kapatmak istiyorsanız silmek yerine iptal edin.
</Warning>

## İlgili sayfalar

<CardGroup cols={2}>
  <Card title="Uygulama oluşturma (API)" icon="code" href="/api/kimlik-dogrulama/uygulama-olusturma">
    Geliştiriciler için adım adım kayıt ve ilk token.
  </Card>

  <Card title="Scope listesi" icon="list-checks" href="/api/kimlik-dogrulama/scopelar">
    Her scope'un açtığı endpoint'ler ve gerekli izinler.
  </Card>

  <Card title="Uygulama endpoint'leri" icon="server" href="/api/kaynaklar/oauth-uygulamalari">
    Uygulamaları API ile yönetmenin tüm çağrıları.
  </Card>

  <Card title="Roller" icon="shield" href="/panel/sistem/roller">
    OAuth Uygulamaları izinlerini rollere verme.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.