429 Too Many Requests hatası: neden alıyorsunuz, nasıl çözersiniz?

Destek ekibimize en çok gelen hata şüphesiz 429 Too Many Requests. İyi haber: bu hata neredeyse her zaman geçicidir ve birkaç basit alışkanlıkla tamamen ortadan kaldırılabilir. Bu yazıda 429’un neden oluştuğunu, iki farklı türünü ve kalıcı çözümleri anlatıyoruz.

429 aslında iki farklı hatadır

Aldığınız mesajı dikkatli okumak, çözümü doğrudan gösterir:

  • Plan limiti: “Rate limit exceeded” / “Too many requests from this IP” — hesabınızın dakikalık istek (RPM) limitini aştınız.
  • Model yoğunluğu: “The model ‘…’ is temporarily rate limited. Please retry in a few seconds.” — planınızdan bağımsız olarak o model o an yoğun.

Ayrıca “exceeded retry limit, last status: 429” mesajı genelde istemci kütüphanesinin otomatik denemelerini tükettiğini gösterir; yani asıl sorun yine yukarıdaki iki nedenden biridir.

1) Plan RPM limitini aşıyorsanız

Her planın dakikada gönderebileceğiniz istek sayısı (RPM) sınırı vardır. Güncel tablo için fiyatlandırma sayfasına bakın. En sık yapılan hatalar:

  • Tek bir betikten yüzlerce paralel istek göndermek.
  • Birden fazla ajan/tool’u aynı anahtarla aynı anda çalıştırmak (Codex + OpenCode + kendi betiğiniz).
  • Hata alınca beklemeden tekrar denemek — bu, limiti daha da hızlı doldurur (retry fırtınası).

Çözüm: eşzamanlılığı sınırlayın

İstekleri kuyruğa alın. Örnek (Python):

import asyncio, httpx

SEM = asyncio.Semaphore(3)  # aynı anda en fazla 3 istek

async def istek(payload):
    async with SEM:
        r = await client.post("/v1/responses", json=payload)
        if r.status_code == 429:
            await asyncio.sleep(2)   # retry_after varsa onu kullanın
            r = await client.post("/v1/responses", json=payload)
        return r

Çözüm: üstel geri çekilme (exponential backoff)

429 yanıtındaki retry_after değerine mutlaka uyun. Değer yoksa artan bekleme süreleri kullanın:

for attempt in range(5):
    r = istek_gonder()
    if r.status_code != 429:
        break
    bekle = float(r.headers.get("retry-after", 2 ** attempt))
    time.sleep(bekle + random.uniform(0, 0.5))  # jitter

Jitter (küçük rastgele ekleme), aynı anda bekleyen istemcilerin tekrar aynı saniyede yüklenmesini önler.

Çözüm: streaming kullanın

Uzun yanıtları stream: true ile alın. Böylece tek istek daha verimli kullanılır, zaman aşımları ve gereksiz yeniden denemeler azalır.

2) Model geçici olarak yoğunsa

Bu, planınızla ilgili değildir; o modelin kapasitesi anlık olarak doludur. Yapılacaklar:

  • Mesajda verilen bekleme süresi kadar (genelde birkaç saniye) bekleyip tekrar deneyin.
  • Kısa süreliğine eşdeğer başka bir model deneyin — güncel model listesi: noxery.net/tr/models.
  • Aynı anda birden çok istek atıyorsanız sayısını düşürün.

Ne zaman bize ulaşmalısınız?

Tek istek gönderdiğinizde, retry_after süresine uyduğunuzda ve farklı bir model denediğinizde sürekli 429 alıyorsanız bir sorun olabilir. Destek talebi açarken şunları ekleyin:

  • Hata mesajının tamamı ve varsa request id
  • Kullandığınız model adı
  • Yaklaşık istek sıklığınız (örn. “dakikada 5 istek”)

Talebinizi noxery.net/tr/tickets adresinden veya Telegram destek grubumuzdan iletebilirsiniz. Diğer sık karşılaşılan hatalar için 401 rehberimize de göz atın.

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yukarı Çık