OpenAI'den gelen 429, beş üst sınırdan birini aştığınız anlamına gelir — ilk iş, düzeltmeler zıt yönlere işaret ettiği için hangisi olduğunu belirlemektir. Bu sayfa her limitin neyi ölçtüğünü, yanıt başlıklarından cevabın nasıl okunacağını, hataları gerçekten durduran yeniden deneme mantığını ve doğru geri çekilme yeterli olmadığında ne yapılacağını kapsar.
30 Eylül 2026 doğrulaması, OpenAI'nin hız limitleri belgeleriyle karşılaştırılarak yapıldı.
Her biri tetiklenebilen beş limit
| Metrik | Ölçtüğü şey | Genellikle ne zaman sorun olur |
|---|---|---|
| RPM | Dakika başına istek | Çok sayıda küçük çağrı — sınıflandırma, yerleştirmeler, ajan döngüleri |
| TPM | Dakika başına token | Az sayıda büyük çağrı — büyük alınmış bağlam içeren RAG, uzun belgeler |
| RPD | Günlük istek | Free ve düşük seviyeler; günlük kotayı bitiren toplu iş |
| TPD | Günlük token | Aynı durum, token cinsinden ölçülür |
| IPM | Dakika başına görüntü | Görüntü oluşturma iş yükleri |
Hangisi önce tükenirse hatayı o tetikler; bu nedenle “token limitine yaklaşmadık” demek hız limitini elemek için yeterli değildir — TPM'den çok uzakta olup RPM'ye tam olarak dayanmış olabilirsiniz. Limitler anahtar başına değil, kuruluş ve model başına uygulanır: ek anahtar üretmek ek kota üretmez.
429 nasıl görünür?
HTTP/1.1 429 Too Many Requests
retry-after: 12
x-ratelimit-limit-requests: 500
x-ratelimit-remaining-requests: 0
x-ratelimit-reset-requests: 12s
x-ratelimit-limit-tokens: 200000
x-ratelimit-remaining-tokens: 143820
x-ratelimit-reset-tokens: 17s
{
"error": {
"message": "Rate limit reached for gpt-5.4 in organization org-... on requests per min (RPM).",
"type": "requests",
"code": "rate_limit_exceeded"
}
}İhtiyacınız olan her şey o yanıttadır. Gövde boyutu (“requests per min (RPM)”) adlandırır; başlıklar ise tam üst sınırı, kalan miktarı ve ne zaman yenileneceğini verir.
| Üstbilgi | Anlam |
|---|---|
retry-after | Yeniden denemeden önce beklenecek minimum saniye |
x-ratelimit-limit-requests | Limit tükenmeden önce izin verilen maksimum istek sayısı |
x-ratelimit-remaining-requests | Tükenmeden önce kalan istekler |
x-ratelimit-limit-tokens | İzin verilen maksimum token sayısı |
x-ratelimit-remaining-tokens | Kalan tokenler |
x-ratelimit-reset-requests / -reset-tokens | Her sayacın sıfırlanmasına kalan süre — bağımsız olarak sıfırlanırlar |
Kullanım seviyeleri
Üst sınırlarınız, birikimli harcama arttıkça OpenAI'nin otomatik olarak yükselttiği kullanım seviyeniz tarafından belirlenir:
| Kademe | Yeterlilik | Aylık kullanım limiti |
|---|---|---|
| Ücretsiz | İzin verilen coğrafyada kullanıcı | 100 $ / ay |
| Seviye 1 | 5 $ ödendi | 100 $ / ay |
| Seviye 2 | 50 $ ödendi | 500 $ / ay |
| Seviye 3 | 100 $ ödendi | 1.000 $ / ay |
| Seviye 4 | 250 $ ödendi | 5.000 $ / ay |
| Seviye 5 | 1.000 $ ödendi | 200.000 $ / ay |
Model başına RPM ve TPM sayıları burada kasıtlı olarak verilmemiştir. Modelden modele değişir, modeller piyasaya çıktıkça değişir ve hesap başına ayarlanabilir; bu nedenle üçüncü taraf bir sayfada yayımlanan herhangi bir tablo, üzerinde tarih bulunan bir tahmindir. Kendi hesabınız için iki yetkili kaynak OpenAI kontrol panelindeki limitler sayfası ve verdiğiniz her yanıttaki x-ratelimit-* başlıklarıdır. Başlıkları okuyun.
Çözüm: Retry-After'a uyun, ardından jitter kullanın
OpenAI'nin belgelenmiş önerisi, yanıt bir Retry-After taşıyorsa bunu izleyerek jitter'lı üstel geri çekilme uygulamaktır. Her iki yarı da önemlidir. Başlık olmadan çok erken yeniden deneyebilirsiniz; jitter olmadan aynı anda başarısız olan her istemci aynı anda yeniden dener ve birlikte başarısız olur — tek bir kötü saniyeyi kötü bir dakikaya çeviren bir izdiham.
import random, time
import openai
client = openai.OpenAI()
def call_with_backoff(fn, *, max_attempts=6, base=0.5, cap=30.0):
"""Retry 429s: honour Retry-After when present, jittered backoff otherwise."""
for attempt in range(max_attempts):
try:
return fn()
except openai.RateLimitError as err:
if attempt == max_attempts - 1:
raise
# The server's own answer beats any formula you invent.
retry_after = (err.response.headers or {}).get("retry-after")
if retry_after:
delay = float(retry_after)
else:
# Full jitter: sleep a random point in [0, 2^n * base], capped.
# Without the randomness every client that failed at the same
# instant retries at the same instant and fails again together.
delay = random.uniform(0, min(cap, base * 2**attempt))
time.sleep(delay)
resp = call_with_backoff(lambda: client.responses.create(
model="gpt-5.4",
input="Summarise this changelog in three bullets.",
))TypeScript'te aynı biçim:
import OpenAI from "openai";
const client = new OpenAI();
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
export async function callWithBackoff<T>(
fn: () => Promise<T>,
{ maxAttempts = 6, baseMs = 500, capMs = 30_000 } = {},
): Promise<T> {
for (let attempt = 0; ; attempt++) {
try {
return await fn();
} catch (err) {
const status = (err as { status?: number }).status;
if (status !== 429 || attempt === maxAttempts - 1) throw err;
const retryAfter = (err as { headers?: Headers }).headers?.get("retry-after");
const delay = retryAfter
? Number(retryAfter) * 1000
: Math.random() * Math.min(capMs, baseMs * 2 ** attempt);
await sleep(delay);
}
}
}
const resp = await callWithBackoff(() =>
client.responses.create({ model: "gpt-5.4", input: "Hello" }),
);Resmi SDK'lar 429'ları sizin için zaten yeniden dener; bu nedenle çoğu uygulamanın buna yalnızca çağrıları kendi HTTP istemcisine sardığında veya farklı davranış istediğinde ihtiyacı olur — arka plan işleri için daha uzun bir üst sınır ya da 12 saniye beklemenin hatadan daha kötü olduğu kullanıcıya dönük bir istek için anında başarısızlık.
Bozulmadan önce izleyin
Sayaçlar yalnızca hatalarda değil, her yanıtta bulunur. Kalan değerleri günlüğe kaydetmek, hız sınırlamasını bir olaydan göstergeye dönüştürür — bir lansman limiti tüketmeden günler önce kapasitenin azaldığını görebilirsiniz.
# Log the remaining counters on every response, not just on failures.
# By the time you see a 429 the useful signal is already an hour old.
resp = client.responses.with_raw_response.create(model="gpt-5.4", input="…")
h = resp.headers
log.info(
"openai_quota model=%s req_left=%s tok_left=%s reset_req=%s reset_tok=%s",
"gpt-5.4",
h.get("x-ratelimit-remaining-requests"),
h.get("x-ratelimit-remaining-tokens"),
h.get("x-ratelimit-reset-requests"),
h.get("x-ratelimit-reset-tokens"),
)
parsed = resp.parse() # the normal response objectBunun yanında edinmeye değer iki alışkanlık: 429 sayısına değil, x-ratelimit-remaining-tokens limitin belirli bir oranının altına düştüğünde uyarı verin ve yalnızca yeniden denemelere değil, zamanlamalara da jitter ekleyin. Her şeyi :00 anında çalıştıran bir cron kendi ani yükünü yaratır.
Geri çekilme çözüm olmadığında
Doğru geri çekilme ani yükleri düzeltir. Üst sınırınızın üzerindeki sürekli talep için hiçbir şey yapmaz; bu durumda yeniden denemeler yalnızca hatayı geciktirir. Yaklaşık çaba sırasına göre yapısal çözümler:
- Çıktıyı sınırlayın. Akıl yürütme tokenleri faturalandırılır ve çıktı olarak sayılır; bu nedenle sınırsız üretim TPM'yi tüketmenin en hızlı yoludur.
- Alınan bağlamı azaltın. TPM üst sınırında, alınan parçaları yarıya indirmek aktarım kapasitenizi ücretsiz olarak iki katına çıkarır.
- Modeli doğru boyutlandırın. Bir sınıflandırma adımı öncü bir modele ihtiyaç duymaz ve küçük modellerin ayrı bütçesi vardır.
- İş yüklerini ayırın. Toplu işler ile gecikmeye duyarlı trafiğin tek bir kuruluş düzeyindeki üst sınır için yarışması, bu sorunun en yaygın şekilde kendi kendine yaratılan biçimidir.
- Seviyeyi yükseltin. Seviyeler birikimli harcamayla yükselir; dolayısıyla bu çoğu zaman zaten gerçekleşmektedir.
Yükü model aileleri arasında dağıtma
Listedeki son madde, ağ geçidinin değerini gösterdiği yerdir. Kunavo, çeşitli model aileleri arasında bir OpenAI uyumlu API sunar — aynı SDK, aynı çağrı biçimi, tek anahtar — böylece bir iş yükünü doymuş bir üst sınırdan taşımak ikinci bir entegrasyon yerine model dizesini değiştirmek anlamına gelir:
from openai import OpenAI
client = OpenAI(
api_key="sk-kn-...",
base_url="https://api.kunavo.com/v1",
)
# Same SDK, same call shape — the model string chooses the family.
client.chat.completions.create(
model="gpt-5-6-terra", # or claude-sonnet-5, claude-haiku-4-5, …
messages=[{"role": "user", "content": "Hello"}],
)Somut olarak: üretim trafiğinizle yarışan toplu özetleme işi, 1 milyon başına $0,70 / $3,50 fiyatla claude-haiku-4-5 üzerinde çalışabilir; gecikmeye duyarlı yol ise gpt-5-6-terra ($0,70 / $4,20) veya claude-sonnet-5 ($1,40 / $7,00) üzerinde kalır. Farklı aile, farklı kuyruk.
Bunun ne yaptığını ve ne yapmadığını açıkça bilin. Tek hesap-tek model darboğazını ortadan kaldırır ve başarısızlık durumunda geçiş yapabileceğiniz bir yer sağlar. Kapasite üretmez: toplam hacminiz gerçekten herhangi bir seviyenin izin verdiğini aşıyorsa yanıt yine seviyeyi yükseltmek veya daha az iş yapmaktır. Her modelin ücretleri fiyatlandırma sayfasında, Anthropic limitleri için eşdeğer yol haritası ise Claude API 429 rate_limit_error sayfasındadır.
Sık sorulan sorular
OpenAI API'sinin hız limitleri nelerdir?
OpenAI aynı anda beş boyutu ölçer — RPM (dakika başına istek), TPM (dakika başına token), RPD (günlük istek), TPD (günlük token) ve IPM (dakika başına görüntü) — ve bunlardan herhangi biri aşılır aşılmaz HTTP 429 döndürür. Gerçek üst sınırlar kullanım seviyenize ve belirli modele bağlıdır; bu nedenle hesabınız için yetkili sayılar OpenAI kontrol panelindeki kuruluşunuzun limitler sayfasında ve her yanıttaki x-ratelimit-* başlıklarındadır; yayımlanmış herhangi bir tabloda değil.
OpenAI kullanım seviyeleri nelerdir?
30 Eylül 2026 itibarıyla OpenAI, her biri birikimli harcamayla açılan ve aylık kullanım limiti taşıyan altı seviye belgeliyor: Ücretsiz (desteklenen coğrafyalarda kullanılabilir, ayda 100 $), 5 $ ödeme sonrasında Seviye 1 (ayda 100 $), 50 $ ödeme sonrasında Seviye 2 (ayda 500 $), 100 $ ödeme sonrasında Seviye 3 (ayda 1.000 $), 250 $ ödeme sonrasında Seviye 4 (ayda 5.000 $) ve 1.000 $ ödeme sonrasında Seviye 5 (ayda 200.000 $). Seviye yükseltme, harcama biriktikçe otomatik gerçekleşir.
OpenAI'den gelen 429 rate_limit_exceeded hatasını nasıl düzeltirim?
Yanıt bir Retry-After başlığı taşıyorsa buna uyun; taşımıyorsa üstel geri çekilme ve rastgele jitter ile yeniden deneyin — OpenAI'nin belgelenmiş kendi önerisi budur. Resmi SDK'lar zaten otomatik olarak yeniden dener; el yapımı bir HTTP istemcisi bunu uygulamalıdır. Doğru geri çekilmeden sonra 429'lar sürüyorsa ani yük değil, gerçekten kotayı aşıyorsunuz demektir ve çözüm yapısaldır: daha küçük partiler kullanın, maksimum çıktı tokenini sınırlayın, zamanlanmış işleri dakikaya yayın veya daha yüksek bir seviyeye geçin.
Gerçekte hangi hız limitine ulaştım?
Başlıkları okuyun. x-ratelimit-remaining-requests sıfırsa istek limitine, x-ratelimit-remaining-tokens sıfırsa token limitine ulaştınız. İkisi bağımsız olarak sıfırlanır — x-ratelimit-reset-requests ve x-ratelimit-reset-tokens her birinin ne zaman yenileneceğini gösterir. Mesaj gövdesi de boyutu belirtir. Aralarında tahmin yürütmek zaman kaybettirir; çünkü çözümler zıttır: istek limitleri kuyruklama, token limitleri ise daha küçük prompt'lar gerektirir.
Hız limitleri anahtar başına mı, kuruluş başına mı uygulanır?
Kuruluş ve model başına uygulanır, anahtar başına değil. Ek API anahtarları oluşturmak ek kota yaratmaz; bu nedenle yoğun bir üretim iş yüküyle aynı kuruluştaki toplu iş aynı üst sınır için yarışır — ve iş yüklerini ayırmak anahtar eklemekten daha önemlidir.
Bir ağ geçidi OpenAI hız limitlerine yardımcı olabilir mi?
Bir hesabın model başına üst sınırının darboğaz olduğu hata durumunda yardımcı olur; çünkü ağ geçidi aynı anahtar ve SDK arkasında işi farklı bir model ailesine taşımanıza olanak tanır — toplu özetleme işi gecikmeye duyarlı trafiğinizle aynı kuyrukta beklemek zorunda kalmaz. Sıfırdan kapasite yaratmaz: toplam hacim gerçekten tek bir seviyenin izin verdiğinden yüksekse yanıt yine seviyeyi yükseltmek veya işi azaltmaktır.
Yepyeni bir hesapta neden hız sınırlamasına takılıyorum?
Free ve Tier 1 hesaplarında, daha yüksek seviyelerde bulunmayan günlük üst sınırlar (RPD ve TPD) vardır; bu nedenle mütevazı bir test betiği bir günlük hakkı öğleden sonra tüketebilir. Tier 1, 5 $ birikimli ödeme ile açılır.
429 bana bir maliyete neden olur mu?
Hayır — reddedilen istek işlenmez ve ücretlendirilmez. Maliyeti, gecikme ve yeniden deneme mantığınızın bu gecikmeyle yaptığı şeydir.
Daha fazla API anahtarı bana daha yüksek aktarım kapasitesi sağlar mı?
Hayır. Limitler kuruluş ve model başınadır. Ek anahtarlar ilişkilendirme ve iptal için faydalıdır, kapasite için değil.
429'u kendim yakalamalı mıyım, yoksa SDK'nın işlemesine mi izin vermeliyim?
Yaygın durumda SDK'nın işlemesine izin verin; varsayılan davranış size uygun olmadığında kendiniz yakalayın: hızlıca başarısız olması gereken kullanıcıya dönük bir istek veya varsayılandan çok daha uzun bir üst sınırı kaldırabilecek arka plan işi.
Gerçekte kota tükenmesi olan 429'lar ne olacak?
Aylık kullanım limitinin tükenmesi de 429 olarak görünür ve hiçbir geri çekilme bunu temizlemez — mesaj gövdesi ikisini ayırt eder. Başlıklardaki sayaçlar sağlıklıysa ancak yine de reddediliyorsanız, yeniden deneme koduna dokunmadan önce faturalandırmayı kontrol edin.