Flextell, tüm API çağrılarını sizin (kullanıcının) kimliği üzerinden sınırlar. Bir pencereyi aştığınızda 429 Too Many Requests yanıtı alırsınız.
Limitler
| Uç grubu | Limit |
|---|
Genel API (/api/v1/*) | Kullanıcı başına dakikada 60 istek (yapılandırılabilir) |
| Hassas hesap işlemleri — parola değiştirme, 2FA aç/kapat, oturum sonlandırma | Dakikada 5 istek |
2FA doğrulama (/v1/account/two-factor/confirm) | Dakikada 3 istek |
Genel API limiti Flextell’in tarafında yapılandırılabilir bir değerdir (varsayılan: 60/dk). Yüksek hacimli entegrasyonlarınız için limit yükseltilmesini istemek üzere destek ekibiyle iletişime geçebilirsiniz. Hassas ve 2FA limitleri güvenlik nedeniyle sabittir.
Kim sınırlanır?
Rate limit, authentice olmuş kullanıcının ID’si üzerinden uygulanır — client_id üzerinden değil. Yani aynı kullanıcı birden fazla uygulamaya yetki verirse, kullanıcının toplam istekleri sınırlanır, her uygulama ayrı kota almaz.
Henüz oturum açmamış isteklerde (ör. OAuth token değişimi) limit IP başına uygulanır.
429 yanıtı
{
"message": "Too many requests."
}
Yanıtla birlikte gelen header’lar:
| Header | Anlam |
|---|
X-RateLimit-Limit | Pencerenizde izin verilen toplam istek sayısı |
X-RateLimit-Remaining | Pencerede kalan istek kotası |
Retry-After | Yeniden denemeden önce beklemeniz gereken saniye sayısı |
Doğru yeniden deneme (retry) örüntüsü
429 aldığınızda:
Retry-After header’ını okuyun.
- O kadar saniye bekleyin.
- Aynı isteği tekrar deneyin.
Eğer Retry-After yoksa exponential backoff kullanın: 1s, 2s, 4s, 8s... en fazla birkaç deneme.
async function withRetry(fn, maxAttempts = 5) {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
const res = await fn();
if (res.status !== 429) {
return res;
}
const retryAfter = Number(res.headers.get("Retry-After")) || 2 ** attempt;
await new Promise((r) => setTimeout(r, retryAfter * 1000));
}
throw new Error("Rate limit: giving up after max attempts");
}
429 aldığınızda sonsuz döngüde yeniden denemeyin. Bir üst sınır koyun ve kullanıcıya bilgilendirme gösterin.
Limiti zorlamamak için
- Batch okuyun. 50 hastayı
GET /customers ile bir kerede çekin, 50 ayrı GET /customers/{id} atmaktan vazgeçin.
- Cache’leyin. Nadiren değişen veriler (doktorlar, tedaviler, tenant listesi) için saatlerce cache makul.
- Webhook / realtime kullanın. Yeni mesaj veya randevu değişikliği için polling yerine Realtime kanallarını dinleyin.
- Paralelliği sınırlayın. Bir seferde en fazla 5–10 eşzamanlı istek yeterli olacaktır.
İpucu: kendi rate-limit monitoringiniz
Her yanıtta X-RateLimit-Remaining değerini loglayıp düşüşleri izleyin. Eşik (ör. < 10) altına düşerse ilgili entegrasyonu geçici olarak yavaşlatın.