Konto
Rozwiązywanie problemów
Rozwiązania typowych problemów z API: uwierzytelnianie, saldo, dostęp do modeli, limity zapytań, timeouty, streaming, CORS i adres bazowy.
Większość problemów objawia się statusem HTTP i polem code w ciele błędu. Znajdź kod poniżej; pełną listę zawiera Błędy. Nieudane żądania (dowolne 4xx lub 5xx) nigdy nie są rozliczane.
{ "error": { "message": "...", "type": "authentication_error", "code": "invalid_api_key" } }
401 invalid_api_key
Klucz jest nieobecny, ma zły format lub został unieważniony.
- Wyślij go jako
Authorization: Bearer sk-api14-.... SDK OpenAI robią to zapiKey/api_key; w curl sprawdź, czy$API14_API_KEYjest faktycznie ustawione w powłoce, z której uruchamiasz polecenie (echo ${API14_API_KEY:0:9}powinno wypisaćsk-api14-). - Uważaj na zbłąkane cudzysłowy lub znaki nowej linii, gdy klucz pochodzi z pliku
.env. - Pozostawiony w środowisku
OPENAI_API_KEYmoże nadpisać klucz, którego chciałeś użyć. Przekaż klucz jawnie, aby to wykluczyć. - Unieważniony klucz przestaje działać natychmiast. Klucze są pokazywane tylko raz, więc jeśli go zgubiłeś, utwórz nowy w kluczach API i unieważnij stary.
Zobacz Uwierzytelnianie.
402 insufficient_balance
Twoje saldo w USD wynosi 0 USD lub (dla wideo) jest niższe niż szacowany koszt zadania. Żądania pozostają zablokowane, dopóki nie doładujesz konta, ponawianie nie pomaga.
- Sprawdź saldo przez
GET /creditslub w Billing. Zobacz Saldo i informacje o kluczu. - Doładuj konto lub włącz automatyczne doładowanie. Plany co miesiąc dodają wliczone zużycie do tego samego salda. Zobacz Ceny i rozliczenia.
- W długich zadaniach traktuj ten kod jako krytyczny i zatrzymaj się, zamiast pozwalać ponowieniom SDK kręcić się w kółko.
403 model_not_allowed lub plan_required
model_not_allowed: klucz ma listę dozwolonych modeli, która nie zawiera tego identyfikatora. Edytuj listę klucza w kluczach API lub użyj klucza bez niej. Przyrostki wariantów się liczą: sprawdź, czy dokładny wysyłany identyfikator jest dozwolony.plan_required: Twój plan nie obejmuje tej kategorii modeli. Standardowe plany obejmują wszystkie kategorie; sprawdź swój plan na stronie cennika.
404 model_not_found lub not_found
model_not_found: identyfikator modelu jest nieznany, wyłączony lub usunięty. Identyfikatory zawierają prefiks dostawcy:openai/gpt-5-mini, a niegpt-5-mini. Dokładny identyfikator sprawdzisz przezGET /modelslubGET /models/{id}(klucz nie jest potrzebny). Zobacz Identyfikatory modeli i warianty.not_found: ścieżka nie istnieje albo zadanie wideo lub identyfikator generacji nie należy do Ciebie. Zwykle oznacza to zły adres bazowy (zobacz niżej). Wyszukiwanie generacji tuż po żądaniu może też zwrócić404przez kilka sekund, zanim rekord się pojawi.
Zły adres bazowy
Adres bazowy to dokładnie:
https://api14.com/api/v1
Typowe błędy:
| Ustawiasz | Skutek |
|---|---|
https://api14.com/v1 lub https://api14.com | Żądania trafiają do strony WWW, a nie do API: odpowiedzi HTML, 404 lub błędy CORS w przeglądarce. |
https://api14.com/api/v1/chat/completions jako baza | SDK dopisuje ścieżkę ponownie. Ustaw tylko bazę. |
https://api.openai.com/v1 (domyślny) | Twój klucz api14 jest odrzucany przez OpenAI. Ustaw bazowy adres URL w kodzie lub przez OPENAI_BASE_URL. |
Osobliwości bibliotek: ruby-openai sam dodaje v1, więc jego uri_base to https://api14.com/api (Ruby); openai-go oczekuje końcowego ukośnika, https://api14.com/api/v1/ (Go).
429 rate_limited
Przekroczono limit zapytań na minutę dla Twojego klucza lub planu (Free 5, Pro 100, Team 3,000, Enterprise 3,000+). Odpowiedź zawiera Retry-After: 60.
- Poczekaj na
Retry-Afteri ponów z wykładniczym opóźnieniem oraz jitterem. Oficjalne SDK OpenAI już to robią (domyślnie dwa ponowienia; zwiększmaxRetries/max_retries). - Przy pracy masowej rozkładaj żądania w czasie zamiast wysyłać je wszystkie naraz i umieszczaj kilka elementów w jednym żądaniu. Zobacz Przewodnik: przetwarzanie wsadowe.
- 429 może też pochodzić od dostawcy, zwłaszcza w wariantach
:free. Użyj zapasowych modeli lub routingu dostawców, aby rozłożyć obciążenie.
429 daily_limit_reached
Klucz osiągnął dzienny limit wydatków w USD. Ponawianie nie pomaga do następnego dnia UTC. Zwiększ lub usuń limit w kluczach API, jeśli ruch jest oczekiwany. Upewnij się, że Twoja logika ponowień odróżnia ten kod od rate_limited, w przeciwnym razie zadania będą ponawiać bez sensu. Zobacz Limity zapytań.
Timeouty
Duże modele, modele z rozumowaniem i długie wyjścia mogą trwać minuty.
- Sprawdź limit czasu klienta. SDK dla Node i Pythona domyślnie ustawiają 10 minut; inne klienty HTTP często mają krótsze wartości domyślne.
- Strumieniuj długie generacje. Tokeny zaczynają napływać w ciągu sekund, a limity czasu bezczynnych połączeń w proxy i load balancerach przestają być problemem. Zobacz Streaming.
- Ustaw
max_tokensi, dla modeli z rozumowaniem, niższy poziom rozumowania. - Jeśli przekazujesz żądania przez własny serwer, obowiązują także limity czasu jego proxy (na przykład
proxy_read_timeoutw nginx, domyślnie 60 sekund). - Timeout po Twojej stronie nie anuluje generacji u dostawcy, która może zostać rozliczona. Sprawdź to przez Wyszukiwanie generacji z identyfikatorem żądania.
Streaming się rozłącza lub kończy wcześniej
- Sprawdź
finish_reasonw ostatnim fragmencie."length"oznacza osiągnięciemax_tokens;"error"oznacza, że dostawca zawiódł w trakcie strumienia, a fragment zawiera obiekterror. Ponów lub dodaj zapasowe modele. - Proxy i platformy serverless czasem buforują lub ucinają odpowiedzi SSE. Wyłącz buforowanie (
X-Accel-Buffering: now nginx) i sprawdź maksymalny czas odpowiedzi platformy. - Jeśli parsujesz strumień samodzielnie, ignoruj linie komentarzy zaczynające się od
:(keep-alive) i zakończ nadata: [DONE]. - Wcześniejsze zamknięcie połączenia nie anuluje rozliczenia: dostawca może i tak dokończyć generację.
Błędy CORS i aplikacje przeglądarkowe
Nigdy nie umieszczaj klucza API w kodzie przeglądarki ani aplikacji mobilnej. Każdy może go odczytać ze strony i wydać Twoje saldo. Wywołuj api14 z własnego backendu i udostępniaj przeglądarce tylko własny endpoint:
// server.js (Node / Express)
app.post("/api/chat", async (req, res) => {
const stream = await client.chat.completions.create({
model: "openai/gpt-5-mini",
messages: req.body.messages, // validate and limit this input
stream: true,
});
for await (const chunk of stream) res.write(chunk.choices[0]?.delta?.content ?? "");
res.end();
});
Błąd CORS w przeglądarce podczas developmentu to zwykle zły adres bazowy (żądanie trafiło do strony WWW zamiast do API) albo niestandardowy nagłówek żądania, którego preflight API nie dopuszcza; przeniesienie wywołania na serwer rozwiązuje oba przypadki.
Problemy z wersjami SDK
- Python
openaiponiżej 1.0 używaopenai.ChatCompletion.createiopenai.api_base. Zaktualizuj przezpip install -U openaii użyj klientaOpenAI(base_url=..., api_key=...). - Brak
chat.completions.parse: starsze wydania 1.x/4.x mają tylkoclient.beta.chat.completions.parse. Zaktualizuj pakiet. - Błędy nieznanego parametru z SDK dla pól bramki (
provider,models,reasoning,plugins): przekazuj je przezextra_bodyw Pythonie lub równoważną opcję dodatkowego ciała w innych SDK. Zobacz Zgodność z SDK OpenAI. - Błąd
400od dostawcy z jego komunikatem: parametr nie jest obsługiwany przez ten model lub dostawcę. Sprawdźsupported_parametersmodelu w Modelach lub dodajprovider: { "require_parameters": true }.