Błędy i limity
MarkdownKody odpowiedzi, ich znaczenie i zalecane działania. Wszystkie błędy mają format JSON i zawierają Request ID.
Pełny przewodnik
Format błędu
Błąd jest zwracany w formacie wywołanego API: obiekt error dla OpenAI, {"type": "error", "error": {...}} dla Anthropic i error z polami status i details dla Gemini. Dlatego SDK rozpoznają je jako zwykłe błędy API.
error.codeierror.reason— klasa błędu z poniższej tabeli; ich wartości są takie same.error.type— standardowa wartość dla danego formatu (na przykładinvalid_request_errorlubserver_error).error.request_id(w Anthropic —request_idna najwyższym poziomie), nagłówekX-Request-IDi końcówka treści komunikatu — identyfikator żądania.- W Gemini klasa znajduje się w
error.details:ErrorInfo.reason— ten sam kod zapisany wielkimi literami (na przykładMODEL_OVERLOADED),domain—ailoot.ai; identyfikator żądania — wRequestInfo.requestId. - W formacie Gemini błąd 5xx, którego nie wolno automatycznie ponawiać, oraz
result_pending_checksą zwracane ze statusem 409 istatusABORTED: dzięki temu Gemini SDK i CLI nie ponawiają ich samodzielnie. Klasa błędu znajduje się wErrorInfo.reason(na przykładMODEL_TIMEOUTlubRESULT_PENDING_CHECK). - Odpowiedź w formacie OpenAI zawiera również pola najwyższego poziomu
codeimessage— dla starszych aplikacji klienckich.
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}{
"type": "error",
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"reason": "invalid_api_key",
"message": "… Nothing was charged. … Request ID: 94ed3e31-4373-41ce-bf8a-0d1ed3f7235e."
},
"request_id": "94ed3e31-4373-41ce-bf8a-0d1ed3f7235e"
}{
"error": {
"code": 401,
"status": "UNAUTHENTICATED",
"message": "The API key is not valid. Nothing was charged. … Request ID: e7aa743b-9d0d-4064-b206-2562609f545b.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "INVALID_API_KEY",
"domain": "ailoot.ai",
"metadata": {
"code": "invalid_api_key",
"reason": "invalid_api_key",
"request_id": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
},
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
]
}
}Kody błędów
| HTTP | Klasa (reason) | Co się stało | Co zrobić |
|---|---|---|---|
| 400 | invalid_request | Żądanie jest nieprawidłowe: błędna treść lub parametr; model nie obsługuje pola, załącznika lub narzędzia z żądania; klucz przekazano w adresie | Popraw żądanie zgodnie z treścią błędu: usuń nieobsługiwane pole, załącznik lub narzędzie; klucz przekazuj w nagłówku. Odrzucenie z powodu nieobsługiwanego pola, załącznika lub narzędzia następuje przed utworzeniem rezerwy — nic nie pobrano |
| 400 | context_length_exceeded | Żądanie przekracza długość kontekstu modelu | Skróć historię lub wybierz model z większym kontekstem |
| 400 | content_policy_violation | Żądanie odrzucono zgodnie z zasadami modelu | Przeformułuj żądanie |
| 401 | invalid_api_key | Brak klucza lub klucz jest nieprawidłowy | Sprawdź, czy przekazano cały klucz |
| 401 | api_key_disabled | Klucz jest wyłączony | Włącz klucz lub utwórz nowy |
| 402 | insufficient_balance, insufficient_quota | Wolne saldo nie wystarcza nawet na minimalną rezerwę (insufficient_quota — ten sam przypadek w formie stosowanej przez OpenAI SDK) | Doładuj saldo lub zmniejsz max_tokens |
| 402 | api_key_quota_exhausted | Wyczerpano całkowity limit wydatków klucza | Zwiększ limit klucza w panelu |
| 402 | payment_disputed | Na koncie jest zadłużenie z tytułu zakwestionowanej płatności | Nowe żądania są wstrzymane do spłaty — skontaktuj się z pomocą techniczną |
| 403 | api_key_expired | Klucz wygasł | Utwórz nowy klucz |
| 403 | account_inactive | Twoje konto jest wyłączone | Skontaktuj się z pomocą techniczną |
| 403 | permission_denied | Klucz nie ma uprawnień do tego żądania (na przykład ze względu na IP) | Sprawdź ograniczenia klucza |
| 404 | model_not_found | Taki model nie istnieje | Porównaj ID z /v1/models |
| 404 | unsupported_endpoint | Model nie działa w tym formacie | Wybierz inny format lub model |
| 404 | not_found | Taka ścieżka lub taki obiekt nie istnieje (na przykład zadanie) | Sprawdź adres i identyfikator |
| 409 | duplicate_request | Operacja z tym samym kluczem idempotencji została już przyjęta i mogła się już zakończyć | Sprawdź wynik pierwszej operacji; nie wysyłaj nowej |
| 409 | not_ready, video_not_ready | Wideo lub inne zadanie nie jest jeszcze gotowe | Sprawdź status później |
| 409, 503 | result_pending_check | Ustalamy wynik żądania. W przypadku zadania wideo jest to flaga result_pending_check: true w odpowiedzi ze statusem; samo zadanie pozostaje w stanie in_progress | Nie wysyłaj żądania ponownie — status pojawi się w historii (GET https://ailoot.ai/api/v1/usage). Nie twórz zadania wideo od nowa: sprawdź je później przez GET /v1/videos/{id} |
| 410 | model_retired | Model wycofano z obsługi | Wybierz nową wersję z GET /v1/models |
| 413 | request_too_large | Treść żądania jest zbyt duża | Zmniejsz pliki lub skróć historię |
| 429 | rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_full | Z Twojego konta wysłano zbyt wiele żądań lub zbyt wiele żądań jednocześnie | Poczekaj (nagłówek Retry-After, zwykle 10 s) i ponów żądanie |
| 429 | usage_limit_reached | Wyczerpano limit wydatków klucza w oknie czasowym (5 godzin, 1 dzień lub 7 dni) | Poczekaj na odnowienie okna lub zwiększ limit klucza |
| 500 | internal_error | Błąd Ailoot | Skontaktuj się z pomocą techniczną, podając Request ID |
| 502 | invalid_model_response, empty_response, incomplete_response | Model zwrócił nieprawidłową, pustą lub niepełną odpowiedź | Znajdź Request ID w historii panelu konta. Jeśli jest tam wynik lub obciążenie, ponowienie utworzy drugie płatne żądanie. Brak wpisu nie potwierdza, że żądanie nie zostało wysłane lub wykonane: nie ponawiaj wysyłki o nieznanym statusie; skontaktuj się z pomocą, podając Request ID. |
| 502 | result_not_delivered | Wynik nie został dostarczony z winy Ailoot; rezerwa lub pobrana kwota zostały zwrócone | Żądanie można wysłać ponownie |
| 503 | model_overloaded | Model jest chwilowo przeciążony | Jeśli X-Should-Retry: true — ponów po Retry-After sekundach; jeśli false — najpierw sprawdź Request ID w historii |
| 503 | model_unavailable | Model jest chwilowo niedostępny | Wybierz inny model. Jeśli X-Should-Retry: true — ponów żądanie po liczbie sekund wskazanej przez Retry-After; jeśli false — najpierw sprawdź Request ID w historii |
| 503 | service_unavailable | Chwilowa awaria po stronie Ailoot | Jeśli X-Should-Retry: true — ponów po Retry-After sekundach; jeśli false — najpierw sprawdź Request ID w historii |
| 503 | charge_not_confirmed | Odpowiedź nie została wydana: nie udało się potwierdzić pobrania opłaty; rezerwa została zwrócona, pieniędzy nie pobrano | Jeśli X-Should-Retry: true — ponów po Retry-After sekundach; jeśli false — najpierw sprawdź Request ID w historii |
| 504 | model_timeout | Model nie odpowiedział na czas; wynik może się jeszcze pojawić | Nie wysyłaj żądania ponownie, dopóki nie sprawdzisz Request ID w historii |
Kody dotyczące odpowiedzi modelu i sprawdzania wyniku (502, 503 i 504) wskazują teraz model lub żądanie: model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmed i result_pending_check. Jeśli Twój kod porównuje error.code z poprzednimi wartościami, zastąp je kodami z tabeli; informacje o powiązaniu dawnych kodów z nowymi poda pomoc techniczna.
Kiedy ponawiać żądanie
- Najpierw sprawdź X-Should-Retry: przy
false,result_pending_checklubmodel_timeoutnie ponawiaj żądania automatycznie. Znajdź Request ID w historii panelu: widać tam wynik i pobraną opłatę. - Ponowienie jest bezpieczne, gdy otrzymasz X-Should-Retry: true: poczekaj
Retry-Aftersekund. W przypadku 5xx sam kod nie wystarcza: wynik mógł już się pojawić. Najpierw sprawdź historię w panelu lub skontaktuj się z pomocą techniczną, podając Request ID. To szczególnie ważne w przypadku obrazów, wideo, muzyki i długich kroków agentów. - Ponowienie nie pomoże: 400, 401, 402, 403, 404 — najpierw popraw żądanie, klucz lub saldo.
Limity
Częstotliwość i liczba jednoczesnych żądań są ograniczone dla całego konta, a nie pojedynczego klucza. Po przekroczeniu limitu otrzymasz 429 rate_limit_exceeded z nagłówkiem Retry-After: 10. Jeśli przeciążony jest sam model — 503 model_overloaded z Retry-After: 30. Jeśli potrzebujesz większej przepustowości, skontaktuj się z pomocą techniczną.
Limity wydatków ustawia się dla klucza: całkowity limit — 402 api_key_quota_exhausted, okna 5 godzin, 1 dzień i 7 dni — 429 usage_limit_reached. Więcej informacji — Klucze i adres API.
Modele NVIDIA: kolejka
Listę modeli można pobrać także przy zerowym saldzie; generowanie wymaga salda wystarczającego na rezerwę. Modele NVIDIA (Nemotron i inne) korzystają ze wspólnej kolejki: przy dużym obciążeniu odpowiedź może nadejść później albo zostanie zwrócony błąd „model jest chwilowo przeciążony” z nagłówkiem Retry-After — ponów żądanie po wskazanym czasie. Ceny są w katalogu, a opłaty pobiera się tak jak dla pozostałych modeli.
Limity rozmiaru zależą od modelu: kontekst (ile tokenów można wysłać) i maksymalna długość odpowiedzi. Są podane w katalogu.
Historia i wydatki
Historia i wydatki · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN
JWT ≠ sk-… · Logowanie i sesje