> ## 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.

# Oran sınırları

> İstek sınırlarını, 429 yanıtını ve tekrar deneme önerilerini anlatır.

Flextell API'si, her kullanıcıyı ve her uygulamayı aşırı yükten korumak için dakika başına istek sınırı uygular. Sınırı aşarsanız API `429` yanıtı döndürür ve beklemeniz gereken süreyi bildirir. Bu sayfa sınırları, yanıtın biçimini ve önerilen tekrar deneme yöntemini anlatır.

## Genel sınır

`/api/v1` altındaki kimliği doğrulanmış her istek **dakikada 300 istek** sınırına tabidir.

| Özellik | Değer |
| - | - |
| Sınır | 300 istek / dakika |
| Sayaç anahtarı | Kullanıcı ve OAuth uygulaması çifti |
| Sayacın başladığı an | Kimlik doğrulama başarılı olduktan sonra |

<Info>
  Sayaç, kullanıcı ve OAuth uygulaması (`client`) başına ayrı tutulur. Aynı kullanıcı panelden ve sizin uygulamanızdan istek gönderiyorsa her ikisinin sayacı bağımsızdır. Farklı kullanıcıların sayaçları da birbirinden bağımsızdır.
</Info>

Genel sınır, kimlik doğrulama başarılı olduktan sonra sayılır; kimliği doğrulanamayan istek `401` alır. Kimlik doğrulama için [Kimlik doğrulama genel bakış](/api/kimlik-dogrulama/genel-bakis) sayfasına bakın.

### Sınır başlıkları

Sınır uygulanan her yanıt, kalan kotanızı bildiren başlıklar taşır.

| Başlık | Ne zaman | Açıklama |
| - | - | - |
| `X-RateLimit-Limit` | Her yanıtta | Geçerli pencere için izin verilen istek sayısı |
| `X-RateLimit-Remaining` | Her yanıtta | Pencerede kalan istek sayısı |
| `Retry-After` | Yalnızca `429` yanıtında | Yeniden denemeden önce beklenecek süre (saniye) |
| `X-RateLimit-Reset` | Yalnızca `429` yanıtında | Sınırın sıfırlanacağı an (Unix zamanı) |

<Warning>
  Bu başlıklar tarayıcıdaki başka bir kaynaktan (cross-origin) JavaScript ile **okunamaz**; API bunları CORS ile açığa çıkarmaz. Tarayıcıdan çağırıyorsanız `429` durum kodunu temel alın. Sunucu tarafı istemcilerde başlıkların hepsi okunabilir.
</Warning>

## Özel sınırlar

Bazı endpoint'ler genel sınırın yanında daha sıkı bir sınıra da tabidir. Her iki sınır da geçerlidir; hangisi önce dolarsa `429` onun için döner.

| Endpoint | Sınır | Sayaç anahtarı |
| - | - | - |
| `GET /api/v1/statistics/*` | 60 istek / dakika | Klinik ve kullanıcı |
| `GET /api/v1/sales/export` | 10 istek / saat | Klinik ve kullanıcı |
| `GET /api/v1/customer-balances/export` | 10 istek / saat | Klinik ve kullanıcı |
| `PUT /api/v1/account/password`, `POST /api/v1/account/two-factor`, `POST /api/v1/account/two-factor/disable`, `POST /api/v1/account/two-factor/recovery-codes/regenerate`, `POST /api/v1/account/browser-sessions/logout`, `DELETE /api/v1/account` | 5 istek / dakika | Kullanıcı |
| `POST /api/v1/account/two-factor/confirm` | 3 istek / dakika | Kullanıcı |
| `POST /api/v1/invitations`, `POST /api/v1/invitations/{id}/resend`, `POST /api/v1/invitations/preview`, `POST /api/v1/account/invitations/resolve` | 10 istek / dakika (dördü ortak sayaç) | Kullanıcı; kimliksiz isteklerde IP |

<Note>
  Dışa aktarma sınırı saatliktir. Dışa aktarma endpoint'lerini döngüde çağırmayın; saatte en çok 10 çağrıya göre planlayın.
</Note>

### Herkese açık yüzeyler

Kimlik doğrulaması gerektirmeyen veya token yerine gizli anahtar kullanan yüzeylerin sınırları ayrıdır ve genel 300/dakika sınırından bağımsızdır.

| Yüzey | Sınır | Sayaç anahtarı |
| - | - | - |
| `POST /api/v1/integrations/inbound/{uuid}` ([Gelen lead webhook'u](/api/webhooklar/gelen-lead-webhooku)) | 120 istek / dakika | Bağlantı `uuid` değeri |
| `GET` ve `POST /api/v1/public/forms/{token}` ([Herkese açık hasta formları](/api/webhooklar/herkese-acik-hasta-formlari)) | 60 istek / dakika, tüm token'lar için toplam | IP adresi |
| `POST /api/v1/public/forms/{token}` | Ayrıca 10 istek / dakika | IP adresi |
| Web sitesi widget'ı: `/widget/{token}/config` | 60 istek / dakika | Token ve IP |
| Web sitesi widget'ı: `/widget/{token}/session` | 10 istek / dakika | Token ve IP |
| Web sitesi widget'ı: `/widget/{token}/message` | 20 istek / dakika | Token ve IP |

Widget ayrıntıları için [Web sitesi widget'ı](/api/webhooklar/web-sitesi-widgeti) sayfasına bakın. Widget yolları `/api` altında değildir; bu yüzden aşağıdaki hata gövdesi yerine standart bir `429` yanıtı döner.

<Tip>
  Hasta formu sayfasını kendi sitenizden sunuyorsanız IP başına 60 istek / dakika sınırı, aynı IP'yi paylaşan tüm ziyaretçilerin toplamıdır. Yoğun bir ofis ağı arkasındaki ziyaretçiler bu sınıra birlikte takılabilir.
</Tip>

## 429 yanıtı

Sınır aşıldığında API, standart hata zarfıyla `429 Too Many Requests` döndürür. `error_code` her zaman `TOO_MANY_REQUESTS` olur.

```http theme={null}
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 0
Retry-After: 23
X-RateLimit-Reset: 1791890000
```

```json theme={null}
{
  "success": false,
  "error_code": "TOO_MANY_REQUESTS",
  "message": "Too many requests."
}
```

| Sınır | `message` |
| - | - |
| Genel sınır, `statistics`, herkese açık formlar | `Too many requests.` |
| Dışa aktarma | `Too many export requests. Please try again later.` |
| Hesap güvenliği (şifre, iki adımlı doğrulama vb.) | `Too many attempts. Please try again later.` |
| İki adımlı doğrulama onayı | `Too many two-factor authentication attempts.` |
| Davet endpoint'leri, gelen webhook | `Accept-Language: tr` ile `Çok fazla istek gönderildi. Lütfen daha sonra tekrar deneyin.` |

<Note>
  `message` metnine göre karar vermeyin; metin sınırdan sınıra ve dile göre değişir. Hata türünü `error_code` ile, bekleme süresini `Retry-After` ile belirleyin. Diğer hata kodları için [Hata kodları](/api/istekler/hata-kodlari) sayfasına bakın.
</Note>

Kimlik doğrulama tamamlanmadan veya klinik belirlenmeden önce üretilen `429` yanıtlarında `meta` bloğu bulunmaz. Hata zarfının genel yapısı [Hatalar](/api/istekler/hatalar) sayfasında anlatılır.

## Tekrar deneme

Önerilen yöntem şudur.

<Steps>
  <Step title="429 aldığınızı tanıyın">
    Yalnızca HTTP durum kodu `429` olan yanıtlarda yeniden deneyin. `4xx` hatalarının geri kalanı isteğin kendisindeki bir sorunu gösterir; aynı isteği tekrarlamak sonucu değiştirmez.
  </Step>

  <Step title="Retry-After kadar bekleyin">
    `Retry-After` başlığındaki saniye kadar bekleyin. Dakika başına sınırlarda bu değer en çok 60 saniyedir. Süre dolduktan sonra sıradaki istek başarılı olur.
  </Step>

  <Step title="Başlık yoksa geri çekilin">
    `Retry-After` okunamıyorsa (ör. tarayıcıda) üstel geri çekilme kullanın: 1, 2, 4, 8 saniye gibi artan aralıklarla deneyin ve deneme sayısına bir üst sınır koyun.
  </Step>
</Steps>

Sınıra hiç ulaşmamak için şunları yapın.

* `X-RateLimit-Remaining` değerini izleyin; sıfıra yaklaşınca istek hızınızı düşürün.
* İstekleri bir kuyruk üzerinden, dakikada 300'ün altında bir hızla gönderin.
* Aynı veriyi tekrar tekrar çekmeyin. Listeleri [sayfalama](/api/istekler/sayfalama) ile makul sayfa boyutlarında alın ve değişmeyen kaynakları önbelleğe alın.
* Hata alan `POST` isteklerini yeniden gönderirken çift kayıt oluşmaması için [Idempotency](/api/istekler/idempotency) sayfasındaki kurallara uyun.

<Warning>
  Toplu veri çekme veya senkronizasyon işlerinde `429` aldığınızda aynı anda birden fazla istekle yeniden denemeyin. Eşzamanlı yeniden denemeler sınırı yeniden aşar ve yeni `429` yanıtlarına yol açar.
</Warning>


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