Oran Sınırları
Oran Sınırları
Regvion API, kötü davranışlı bir müşterinin pahalı uç noktaları (semantik arama, AI analizi) tekelleştirmesini engellemek için isteklere oran sınırı uygular. Sınırlar tier bazlıdır; bazı uç noktalar için tier'dan daha sıkı özel sınır vardır.
Nasıl hesaplanır
Her (müşteri, uç nokta) çifti için kayan 60 saniyelik bir sayaç tutulur: dakika, her biri 10 saniyelik altı alt-pencereye (kova) bölünür ve son altı kovanın toplamı değerlendirilir. Sayacı her istek 1 artırır — 429 ile reddedilenler dâhil. Son 60 saniyedeki toplam, tier'ın dakikalık limitini aştığında 429 dönmeye başlar.
- Tier'ın küresel sınırı her uç nokta için temel değerdir ve dakika başına istek sayısıdır.
- Uç nokta override'ı varsa küresel sınırın yerine onu kullanır. Örneğin tier sınırı dakikada 1000 ama semantik arama için dakikada 200 olabilir.
/account/usageyanıtındakibyEndpointlistesi uç nokta başına aylık kotanızı gösterir (monthlyLimit,monthToDate,remaining); oran sınırı override'ları bu yanıtta yer almaz — yürürlükteki dakikalık sınırı her yanıttakiX-RateLimit-Limitbaşlığından okuyun. - Sayaç saat başı ya da başka herhangi bir sabit anda sıfırlanmaz; pencere sürekli kayar — en eski 10 saniyelik kova düştükçe hakkınız kademeli olarak geri gelir. Bekleme süresi için her zaman
Retry-After/X-RateLimit-Resetdeğerini kullanın; tipik olarak saniyeler mertebesindedir.
Yanıt başlıkları
Kimliği doğrulanmış her yanıt (başarılı veya 429) aşağıdaki başlıkları taşır:
Date: Tue, 14 Apr 2026 10:29:37 GMT
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 2026-04-14T10:30:00.0000000Z
X-RateLimit-Limit— bu uç nokta için dakikalık hakkınız.X-RateLimit-Remaining— kayan pencerede şu an için kalan istek sayısı.X-RateLimit-Reset— ISO 8601 formatında (UTC) pencerenin bitiş anı. Unix timestamp değildir — ISO parser kullanın. Bu an saniyeler ötesindedir: başarılı yanıtlarda içinde bulunulan 60 saniyelik pencerenin bitişi (en fazla ~60 sn ileride),429yanıtlarında ise içinde bulunulan 10 saniyelik kovanın bitişi (en fazla ~10 sn ileride). Asla bir sonraki UTC saati değildir.
Oran sınırı durumu yalnızca bu başlıklarda döner; yanıt gövdesindeki meta nesnesinde taşınmaz.
Oran sınırı denetiminden ÖNCE reddedilen yanıtlarda bu başlıklar bulunmaz: 401 (eksik veya geçersiz anahtar), 403 + KEY_EXPIRED (süresi dolmuş anahtar) ve 403 + IP_NOT_ALLOWED (IP reddi) — aynı şekilde /health gibi muaf yollarda da. Buna karşılık 403 + FORBIDDEN (tier bu uç noktaya izin vermiyor) denetimden sonra üretilir: başlıkları taşır ve istek oran sayacınıza işlenir. İstemcinizde başlıkları okumadan önce varlıklarını kontrol edin.
Aylık kota
Dakikalık orandan bağımsız ikinci bir sınır vardır: tier'ınızda bir uç nokta için aylık istek kotası tanımlı olabilir. Kotası tanımlı uç noktalarda her yanıt şu başlıkları da taşır:
X-RateLimit-Month-Limit: 50000
X-RateLimit-Month-Remaining: 12480
X-RateLimit-Month-Reset: 2026-05-01T00:00:00.0000000Z
- Kota her ayın 1'i 00:00 UTC'de sıfırlanır;
X-RateLimit-Month-Resether zaman bir sonraki ay başını gösterir. - Kota dolduğunda yanıt yine
429'dur, ancak gövdedeki kodRATE_LIMIT_EXCEEDEDdeğilQUOTA_EXCEEDED'dır veRetry-Afterayın kalanı kadar — 31 güne varan — olabilir. - Aylık kotası tanımlı olmayan (
null) uç noktalarda bu üç başlık hiç gönderilmez. Kotası0veya negatif tanımlanmış bir uç nokta ise sınırsız sayılır, ancak başlıklar yine de gönderilir — bu durumdaX-RateLimit-Month-Limitboş,X-RateLimit-Month-Remainingise çok büyük bir sayı olur. Başlıkların varlığını kota olduğunun kanıtı saymayın. - Aylık durumunuzu
/account/usageyanıtındakibyEndpointlistesinden (monthlyLimit/monthToDate/remaining) izleyin.
429 yanıtı
429'un iki nedeni vardır; ayrımı yalnızca gövdedeki error.code yapar:
RATE_LIMIT_EXCEEDED— dakikalık oran aşıldı. Hakkınız saniyeler içinde geri gelir; retry edilebilir.QUOTA_EXCEEDED— aylık kota doldu. Ay dönmeden retry anlamsızdır; plan yükseltmesi için[email protected].
HTTP/1.1 429 Too Many Requests
Retry-After: 7
Content-Type: application/json
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again in 7 seconds.",
"retryAfter": 7
},
"meta": { "requestId": "req_..." }
}
Retry-After— standart HTTP başlığı, saniye cinsinden.error.retryAfter— aynı değer JSON gövdesinde, parse kolaylığı için.
Önerilen yeniden deneme stratejisi
Sabit aralık kullanmayın — birden çok client aynı anda geri dönüp tekrar 429 alır. Üstel geri çekilme + jitter (rastgelelik). Aylık kota 429'unu döngünün dışında bırakın; o sınır ay dönmeden temizlenmez:
import time, random, requests
def call_with_backoff(method, url, headers, **kwargs):
for attempt in range(5):
r = requests.request(method, url, headers=headers, **kwargs)
if r.status_code != 429:
return r
# Aylık kota ay dönene kadar açılmaz — retry etmeden çağırana dön.
if r.json().get('error', {}).get('code') == 'QUOTA_EXCEEDED':
return r
wait = int(r.headers.get('Retry-After', 2 ** attempt))
jitter = random.uniform(0, wait * 0.25)
time.sleep(wait + jitter)
raise RuntimeError("Rate limit exceeded")
İyi uygulamalar
- Client tarafında limitleme — token bucket / leaky bucket algoritması ile istek akışını düzleştirin. Sunucuya ulaşmadan kendinizi sınırlayın; 429 üretmek maliyetlidir.
- Batch işler için kuyruk — gece çalışan senkronizasyon işleri için BullMQ, Sidekiq, SQS gibi bir kuyruk kullanın ve worker sayısını tier'ınıza göre ayarlayın.
- Önbelleğe hassas kullanım — aynı sorguyu 5 dakikada iki kez atmayın. Arama sonuçları sunucu tarafında 5 dk önbelleklenir; client tarafında da aynı sürede cache'leyin.
/healthlimitsizdir — uptime monitoring istekleri oran sınırına sayılmaz.