Errori e gestione degli errori
Codici di stato HTTP, formato delle risposte di errore e come riprendersi dai problemi più comuni.
Errori e gestione degli errori
Synapse utilizza codici di stato HTTP standard con un formato di risposta di errore coerente. Questa pagina spiega come interpretare gli errori e come riprendersi.
Formato della risposta di errore
Tutti gli errori restituiscono JSON con questa struttura:
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Mind Key fehlt oder ungültig.",
"docs": "https://synapse.schaefer.zone/docs/getting-started/authentication"
}| Campo | Descrizione |
|---|---|
statusCode |
Codice di stato HTTP |
error |
Nome dello stato HTTP |
message |
Descrizione dell'errore leggibile dall'umano |
docs |
URL alla documentazione pertinente (quando applicabile) |
Codici di stato HTTP
200 OK
Successo. La richiesta è stata elaborata correttamente.
201 Created
Successo. Una nuova risorsa è stata creata (es. POST /memory).
204 No Content
Successo. Nessun corpo restituito (es. DELETE /memory/:id).
400 Bad Request
La richiesta era malformata. Cause comuni:
- Campi JSON obbligatori mancanti
- Sintassi JSON non valida
- Valore enum non valido (es. categoria errata)
{
"statusCode": 400,
"error": "Bad Request",
"message": "category must be one of: identity, preference, fact, project, skill, mistake, context, note, credentials"
}Soluzione: Verifichi il corpo della richiesta rispetto alla documentazione API. Si assicuri che tutti i campi obbligatori siano presenti e abbiano valori validi.
401 Unauthorized
Autenticazione fallita. Cause comuni:
- Header
Authorizationmancante - Mind Key o JWT non valido
- Uso di una Mind Key dove è richiesto un JWT (o viceversa)
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Mind Key fehlt oder ungültig.",
"docs": "https://synapse.schaefer.zone/docs/getting-started/authentication"
}Soluzione: Verifichi il suo token. Veda Autenticazione.
403 Forbidden
È autenticato ma non autorizzato a eseguire questa azione. Cause comuni:
- Tentativo di eliminare la mente di un altro utente
- Tentativo di verificare una memoria con una Mind Key (richiede JWT)
- La mente è disabilitata
Soluzione: Verifichi se sta usando il tipo di token corretto per questo endpoint.
404 Not Found
Il percorso o la risorsa richiesta non esiste.
{
"statusCode": 404,
"error": "Not Found",
"message": "Route GET /memory/list not found",
"docs": "https://synapse.schaefer.zone/docs/api/errors"
}Soluzione: Chiami GET /endpoints per vedere la lista degli endpoint
validi. Confronti la sua URL con la lista carattere per carattere.
409 Conflict
La richiesta è in conflitto con lo stato esistente. Cause comuni:
- Tentativo di registrazione con un'email già esistente
- URL webhook duplicato
Soluzione: Usi un valore diverso, oppure usi PUT per aggiornare la
risorsa esistente.
429 Too Many Requests
Ha raggiunto un limite di traffico. Si applica solo all'autenticazione tramite
parametro query ?key= (60/min).
{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded. Use Authorization header for unlimited access."
}Header di risposta:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
Retry-After: 42Soluzione: Passi all'header Authorization: Bearer (nessun limite), oppure
attenda Retry-After secondi.
500 Internal Server Error
Errore del server. Non dovrebbe accadere — se accade, è un bug.
Soluzione:
- Riprovi con backoff esponenziale (1s, 2s, 4s, 8s)
- Verifichi con
GET /healthse il server è attivo - Se persiste, segnali l'errore
503 Service Unavailable
Il server è temporaneamente non disponibile (es. durante il deployment, migrazione del database).
Soluzione: Attenda e riprovi. Verifichi GET /health.
Modelli di recupero
Riprova con backoff esponenziale
import time
import requests
def call_with_retry(url, max_retries=3):
for attempt in range(max_retries):
try:
r = requests.get(url, headers={"Authorization": f"Bearer {KEY}"})
if r.status_code == 429:
wait = int(r.headers.get("Retry-After", 60))
time.sleep(wait)
continue
if r.status_code >= 500:
time.sleep(2 ** attempt)
continue
return r
except requests.RequestException:
time.sleep(2 ** attempt)
raise Exception(f"Failed after {max_retries} retries")Gestione errori di autenticazione
def safe_call(url, key):
r = requests.get(url, headers={"Authorization": f"Bearer {key}"})
if r.status_code == 401:
# Mind Key invalid — alert user
raise AuthError("Mind Key invalid or expired")
return rScenari di errore comuni
"Mind Key fehlt oder ungültig"
- Ha dimenticato l'header
Authorization - Ha usato
?key=ma la chiave è errata - Sta usando un JWT dove è richiesta una Mind Key
"Route not found"
- Ha indovinato un percorso che non esiste
- Ha usato un verbo sbagliato (es.
GET /memoryvsPOST /memory) - Verifichi
GET /endpointsper i percorsi validi
"Rate limit exceeded"
- Sta usando
?key=e ha superato 60 req/min - Passi all'header
Authorization: Bearer