Konto
Limity zapytań
Liczba żądań na minutę w zależności od planu, limity RPM i dzienne limity w USD dla kluczy oraz obsługa błędu 429 z ponowieniami.
Limity zapytań chronią twoje saldo i usługę. Limity liczone są w żądaniach na minutę (RPM) dla każdego klucza API, a klucze mogą dodatkowo mieć dzienny limit wydatków w USD.
Limity według planu
| Plan | Żądania na minutę |
|---|---|
| Free | 5 |
| Pro | 100 |
| Team | 3,000 |
| Enterprise | 3,000+ |
Przejdź na wyższy plan na stronie z cennikiem, aby podnieść limit.
Limity dla kluczy
Podczas tworzenia lub edycji klucza w sekcji Klucze API możesz ustawić:
| Limit | Efekt |
|---|---|
| Limit RPM | Ogranicza liczbę żądań na minutę dla tego klucza. Obowiązuje niższa z wartości: limit klucza lub limit planu. |
| Dzienny limit w USD | Gdy klucz wyda tego dnia (UTC) tę kwotę, kolejne żądania zwracają 429 daily_limit_reached aż do następnego dnia. |
| Lista dozwolonych modeli | Z tym kluczem można używać tylko wymienionych identyfikatorów modeli; pozostałe zwracają 403 model_not_allowed. |
Okno RPM trwa jedną minutę i jest liczone osobno dla każdego klucza, więc oddzielne klucze dla oddzielnych aplikacji nie dzielą limitu, ale każdy klucz nadal podlega limitowi twojego planu.
Nagłówki limitów
Każda odpowiedź generowania (udana lub z błędem) mówi, gdzie jesteś, więc możesz zwolnić przed osiągnięciem limitu:
| Nagłówek | Znaczenie |
|---|---|
X-RateLimit-Limit | Dozwolone żądania w bieżącym oknie jednej minuty dla tego klucza. |
X-RateLimit-Remaining | Pozostałe żądania w oknie. |
X-RateLimit-Reset | Sekundy do wyzerowania okna. |
Klienci w przeglądarce też mogą je odczytać (są w Access-Control-Expose-Headers).
Skoki ruchu i współbieżność
Żądania ponad limit nie są od razu odrzucane: czekają w kolejce i startują, gdy tylko zwolni się minutowe okno. Na konto działa jednocześnie do 10 żądań, reszta czeka, aż któreś się zakończy. Przed startem szacowany maksymalny koszt żądania jest rezerwowany z salda razem z kosztem żądań już trwających, więc równoległe żądania nigdy nie wydadzą więcej, niż masz. Żądanie, które nie może wystartować w ciągu 60 sekund, zwraca 429 (rate_limited lub concurrency_limit) z Retry-After; jeśli jego koszt nie mieści się już w saldzie, zwraca 402 insufficient_balance.
Bezpieczne ponawianie z Idempotency-Key
Po błędzie sieci możesz nie wiedzieć, czy żądanie dotarło. Wyślij nagłówek Idempotency-Key (unikalny ciąg do 120 znaków, na przykład UUID) i ponów z tym samym kluczem: jeśli pierwsze żądanie zostało już wysłane do modelu, ponowienie zwróci 409 idempotency_conflict zamiast wykonać i naliczyć zadanie dwa razy. Jeśli pierwsze nie dotarło do modelu, klucz jest zwalniany i ponowienie działa normalnie. Klucz można użyć raz na konto w ciągu 24 godzin.
curl https://api14.com/api/v1/images/generations \
-H "Authorization: Bearer $API14_KEY" \
-H "Idempotency-Key: 6f1c2a3e-order-1842" \
-H "Content-Type: application/json" \
-d '{"model": "black-forest-labs/flux-3-image", "prompt": "a red bicycle"}'
Gdy osiągniesz limit
Zbyt wiele żądań
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{
"error": {
"message": "Rate limit of 5 requests per minute exceeded.",
"type": "rate_limit_error",
"code": "rate_limited"
}
}
Odczekaj liczbę sekund podaną w Retry-After, a następnie ponów żądanie. Oficjalne SDK OpenAI automatycznie ponawiają odpowiedzi 429 z backoffem (domyślnie dwa razy; można to skonfigurować przez maxRetries / max_retries).
Dzienny limit wydatków
{
"error": {
"message": "This API key reached its daily spend limit.",
"type": "rate_limit_error",
"code": "daily_limit_reached"
}
}
Ponawianie nic nie da aż do następnego dnia UTC. Jeśli to oczekiwany ruch, podnieś lub usuń dzienny limit klucza w sekcji Klucze API.
Limity upstream
Dostawcy mają własne limity, które są surowsze dla wariantów modeli :free. Gdy dostawca ograniczy żądanie, jego 429 jest przekazywany do ciebie. Użyj modeli zapasowych lub routingu dostawców, aby rozłożyć obciążenie między dostawców.
Obsługa limitów w kodzie
- Respektuj
Retry-Afteri ponawiaj z wykładniczym backoffem i jitterem. - Odróżniaj
rate_limited(ponów później) oddaily_limit_reachediinsufficient_balance(ponawianie nie pomoże). - Kolejkuj zadania w tle zamiast odpalać je wszystkie naraz.
- Strumieniuj długie odpowiedzi: jedno strumieniowane żądanie liczy się jako jedno żądanie.
import time
from openai import OpenAI, RateLimitError
client = OpenAI(base_url="https://api14.com/api/v1", api_key="sk-api14-...", max_retries=0)
for attempt in range(5):
try:
r = client.chat.completions.create(model="openai/gpt-5-mini", messages=[{"role": "user", "content": "Hi"}])
break
except RateLimitError as e:
if e.code == "daily_limit_reached":
raise
time.sleep(int(e.response.headers.get("retry-after", 2 ** attempt)))
Wszystkie kody statusu znajdziesz w sekcji Błędy.