Account
Errori
Elenco dei codici di errore restituiti dal gateway api14 nel formato di errore di OpenAI, con la causa di ciascuno e come risolverlo.
Gli errori usano il formato di errore di OpenAI, quindi gli SDK ufficiali li trasformano nelle loro normali eccezioni (APIError, RateLimitError, AuthenticationError e così via). Basa la tua logica su code; message è una spiegazione leggibile in inglese.
{
"error": {
"message": "This request may cost up to $0.0123 but your balance is $0.0040. Add funds at /pricing.",
"type": "insufficient_quota",
"code": "insufficient_balance"
}
}
Le richieste non riuscite non vengono addebitate. Qualsiasi risposta con stato 4xx o 5xx non costa nulla.
Codici di errore del gateway
| Stato | code | type | Significato |
|---|---|---|---|
| 400 | model_required | invalid_request_error | Il campo model è mancante. |
| 400 | invalid_json | invalid_request_error | Il corpo non è un oggetto JSON. |
| 400 | invalid_body | invalid_request_error | Impossibile leggere il corpo multipart. |
| 400 | max_tokens_too_large | invalid_request_error | Una richiesta di prova dal playground ha chiesto troppi token di output. |
| 401 | invalid_api_key | authentication_error | La chiave è mancante, malformata o revocata. |
| 402 | insufficient_balance | insufficient_quota | Il tuo saldo in USD è $0 o inferiore al costo massimo stimato della richiesta (input, limite di output, immagini o durata del video). La richiesta non viene inviata. |
| 403 | model_not_allowed | permission_error | La lista di modelli consentiti della chiave non include questo modello. |
| 403 | plan_required | permission_error | Il tuo piano non include questa categoria di modelli. |
| 404 | model_not_found | not_found_error | L'id del modello è sconosciuto, disattivato o rimosso. |
| 404 | not_found | not_found_error | Endpoint sconosciuto, oppure un job video o una generazione che non ti appartiene. |
| 413 | payload_too_large | invalid_request_error | Il corpo della richiesta supera il limite di dimensione (25 MB per impostazione predefinita). |
| 429 | rate_limited | rate_limit_error | Superato il limite di richieste al minuto. Viene restituito con Retry-After: 60. |
| 429 | daily_limit_reached | rate_limit_error | La chiave ha raggiunto il suo limite di spesa giornaliero in USD. |
| 409 | idempotency_conflict | api_error | Una richiesta con questa Idempotency-Key è già stata inviata. Usa una nuova chiave per un’altra richiesta. Limiti di frequenza. |
| 403 | site_not_allowed | permission_error | Solo widget: il sito della pagina non è tra i siti consentiti del widget. Widget. |
| 429 | widget_daily_limit | rate_limit_error | Solo widget: il widget, o tutti i widget insieme, hanno raggiunto il limite di spesa giornaliero in USD. |
| 429 | visitor_daily_limit | rate_limit_error | Solo widget: questo visitatore ha raggiunto il limite giornaliero di richieste impostato nei controlli dei widget. |
| 502 | upstream_unavailable | api_error | Impossibile raggiungere il provider upstream. |
| 4xx/502 | content_unavailable | variabile | Non è stato ancora possibile recuperare il contenuto di un video (lo stato rispecchia quello dell'upstream, 502 se assente). |
| 503 | maintenance | service_unavailable | Modalità manutenzione, gli endpoint di generazione sono sospesi, gli endpoint GET continuano a funzionare. |
| 503 | not_configured | service_unavailable | Il gateway non è ancora configurato. |
Errori dell'upstream
Gli errori restituiti dal provider upstream, ad esempio un parametro non valido per un modello specifico, il superamento della lunghezza del contesto, un rifiuto per policy sui contenuti o un 429 del provider stesso, vengono inoltrati con il codice di stato originale e lo stesso formato { error: {... } }.
Cosa fare
| Stato | Riprovare? | Azione |
|---|---|---|
| 400 | No | Correggi il corpo della richiesta. |
| 401 | No | Controlla la chiave e l'header Authorization: Bearer. Vedi Autenticazione. |
| 402 | No | Aggiungi fondi o attiva la ricarica automatica. |
| 403 | No | Usa un modello consentito, modifica la lista di modelli consentiti della chiave o passa a un piano superiore. |
| 404 | No | Controlla l'id del modello nella pagina dei modelli. |
| 413 | No | Invia un corpo più piccolo, oppure passa i file tramite URL invece che in base64. |
| 429 | Più tardi | rate_limited: attendi il Retry-After. daily_limit_reached: attendi il giorno UTC successivo o aumenta il limite della chiave. Vedi Limiti di frequenza. |
| 502 | Sì | Riprova con backoff, oppure aggiungi dei fallback di modello. |
| 503 | Sì | Riprova più tardi. |
Gestire gli errori nel codice
import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://api14.com/api/v1', apiKey: process.env.API14_API_KEY })
try {
await client.chat.completions.create({ model: 'openai/gpt-5-mini', messages: [{ role: 'user', content: 'Hi' }] })
} catch (err) {
if (err instanceof OpenAI.APIError) {
console.error(err.status, err.code, err.message)
if (err.code === 'insufficient_balance') {
// prompt the user to add funds
}
} else {
throw err
}
}
from openai import OpenAI, APIStatusError
client = OpenAI(base_url="https://api14.com/api/v1", api_key="sk-api14-...")
try:
client.chat.completions.create(model="openai/gpt-5-mini", messages=[{"role": "user", "content": "Hi"}])
except APIStatusError as e:
print(e.status_code, e.code, e.message)
Gli errori che si verificano dopo l'inizio di uno stream arrivano all'interno dello stream stesso. Vedi Streaming.