Guide
Errori, limiti e tentativi
Leggi le risposte di errore e le intestazioni dei limiti di velocità, riprova in sicurezza e diagnostica i guasti comuni.
Ogni API Felo restituisce un corpo di errore JSON con un codice di errore stabile e un request ID. Leggi prima lo stato HTTP, poi il codice, poi il messaggio.
Struttura dell'errore
Le risposte attuali in produzione usano lo stato HTTP come status:
{
"status": 401,
"code": "UNAUTHORIZED",
"message": "Invalid API Key",
"request_id": "202610221444486982113280416060637185"
}| Campo | Significato |
|---|---|
status | Codice di stato HTTP, ripetuto nel corpo |
code | Codice di errore leggibile dalla macchina |
message | Spiegazione leggibile da una persona |
request_id | Identificatore opaco di questa richiesta; includilo nelle richieste al supporto |
Alcuni esempi di endpoint più vecchi usano status: "error" e una stringa di codice diversa. Basa la logica sullo stato HTTP e su code, non sul testo esatto di message.
Codici comuni
| HTTP | Codice | Cosa significa | Cosa fare |
|---|---|---|---|
| 400 | Codice di convalida specifico dell'endpoint | Un parametro manca o non è valido | Correggi la richiesta; non riprovare senza modifiche |
| 401 | UNAUTHORIZED | Chiave API mancante, non valida, scaduta o revocata | Invia Authorization: Bearer $FELO_API_KEY; ruota la chiave se è revocata |
| 402 | INSUFFICIENT_CREDITS | Crediti di servizio insufficienti | Ricarica in Console Billing, poi riprova |
| 404 | Specifico dell'endpoint | Modello, attività o route sconosciuti | Controlla l'ID del modello o dell'attività e il percorso dell'endpoint |
| 429 | RATE_LIMITED | È stato superato un rate limit | Attendi Retry-After, poi riprova |
| 5xx | CHAT_FAILED, *_FAILED, SERVICE_UNAVAILABLE | Errore upstream o del servizio | Riprova con backoff; contatta il supporto se persiste |
I riferimenti degli endpoint elencano i codici specifici di quell'endpoint. Inizia dagli errori della Chat API o dal riferimento dell'endpoint che stai chiamando.
Endpoint di generazione dei modelli
POST /api/v1/images/generations e POST /api/v1/videos/generations restituiscono gli errori a livello di endpoint nella struttura OpenAI invece che in quella sopra:
{
"error": {
"message": "Model kind does not match this generation endpoint",
"type": "invalid_request_error",
"param": null,
"code": "model_kind_mismatch"
}
}Il request ID si trova nell'header di risposta X-Request-Id, non nel corpo. Una richiesta rifiutata non crea un'attività. Una volta che un'attività esiste, la maggior parte degli errori arriva come stato terminale dell'attività in una risposta 200 anziché come errore HTTP: controlla status per failed o interrupted, poi leggi error.message. Vedi Generazione di immagini e Attività asincrone.
Request ID
I corpi di errore Felo includono request_id. Registralo insieme all'endpoint, allo stato HTTP, al codice di errore, all'ID del modello e all'ID dell'attività. Non registrare mai la chiave API completa.
La Model API accetta anche un header di richiesta facoltativo X-Request-Id. Quando ne invii uno, viene restituito in risposta per la diagnostica, così puoi correlare i tuoi log con una richiesta. Se non ne invii uno, usa il request_id restituito.
Rate limit
/v2/chat è l'unico endpoint Felo con rate limit applicati documentati:
- Per chiave API, finestra di 1 minuto.
- Per utente, finestra di 1 minuto.
- Per utente, finestra di 1 ora.
Gli utenti con un abbonamento Felo a pagamento attivo, compresi gli abbonamenti enterprise, ne sono esenti e non ricevono header X-RateLimit-*. Se lo stato dell'abbonamento non può essere verificato, i limiti si applicano comunque.
| Header | Significato |
|---|---|
X-RateLimit-Limit | Limite della dimensione più restrittiva attualmente in vigore |
X-RateLimit-Remaining | Quota rimanente minima tra le tre dimensioni |
X-RateLimit-Reset | Timestamp Unix in secondi del reset della finestra corrente |
Retry-After | In caso di 429, il ritardo consigliato in secondi |
Gli altri endpoint /v2/** attualmente non hanno rate limit applicati. Le richieste alla Model API possono comunque essere limitate dal provider upstream, cosa che può manifestarsi come 429.
Non inserire limiti numerici nel codice. Leggi gli header di ogni risposta.
Politica di retry
| Situazione | Riprovare? |
|---|---|
| 400, 401, 402, 404 | No. Correggi prima la richiesta, la chiave o il saldo. |
| 429 | Sì, dopo Retry-After o X-RateLimit-Reset. |
| 5xx, timeout, connessioni azzerate | Sì, con backoff esponenziale e jitter. |
| Connessione di streaming caduta a metà risposta | Riprova solo se la tua applicazione tollera una generazione duplicata. |
Ciclo consigliato:
- Riprova solo richieste idempotenti o sicure da ripetere.
- Usa il backoff esponenziale: parti da circa 1 secondo, raddoppia e fermati a 30 secondi.
- Aggiungi jitter casuale, così i client non riprovano tutti insieme.
- Fermati dopo un numero ridotto di tentativi e segnala l'errore.
- In caso di 429, rispetta
Retry-Afterinvece del tuo intervallo.
Sequenza di debug
- Controlla che la chiave sia presente e non revocata.
- Chiama
GET /api/v1/modelscon la stessa chiave per confermare l'autenticazione. - Invia la richiesta valida più piccola all'endpoint di destinazione.
- Aggiungi streaming, strumenti o input di grandi dimensioni uno alla volta.
- Per il lavoro asincrono, controlla lo stato dell'attività prima di inviare di nuovo.