Erros e tratamento de erros
Códigos de status HTTP, formato de resposta de erro e como se recuperar de erros comuns.
Erros e tratamento de erros
O Synapse usa códigos de status HTTP padrão com um formato consistente de resposta de erro. Esta página explica como interpretar e se recuperar de erros.
Formato de resposta de erro
Todos os erros retornam JSON com esta estrutura:
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Mind Key fehlt oder ungültig.",
"docs": "https://synapse.schaefer.zone/docs/getting-started/authentication"
}| Campo | Descrição |
|---|---|
statusCode |
Código de status HTTP |
error |
Nome do status HTTP |
message |
Descrição do erro legível para humanos |
docs |
URL para a documentação relevante (quando aplicável) |
Códigos de status HTTP
200 OK
Sucesso. A requisição foi processada corretamente.
201 Created
Sucesso. Um novo recurso foi criado (ex.: POST /memory).
204 No Content
Sucesso. Sem corpo retornado (ex.: DELETE /memory/:id).
400 Bad Request
A requisição estava malformada. Causas comuns:
- Campos JSON obrigatórios ausentes
- Sintaxe JSON inválida
- Valor de enum inválido (ex.: categoria errada)
{
"statusCode": 400,
"error": "Bad Request",
"message": "category must be one of: identity, preference, fact, project, skill, mistake, context, note, credentials"
}Correção: Confira o corpo da requisição com a documentação da API. Garanta que todos os campos obrigatórios estão presentes e têm valores válidos.
401 Unauthorized
A autenticação falhou. Causas comuns:
- Cabeçalho
Authorizationausente - Mind Key ou JWT inválido
- Uso de Mind Key onde JWT é necessário (ou vice-versa)
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Mind Key fehlt oder ungültig.",
"docs": "https://synapse.schaefer.zone/docs/getting-started/authentication"
}Correção: Verifique seu token. Consulte Autenticação.
403 Forbidden
Você está autenticado, mas não tem permissão para realizar esta ação. Causas comuns:
- Tentativa de excluir o mind de outro usuário
- Tentativa de verificar uma memória com Mind Key (requer JWT)
- Mind desativado
Correção: Verifique se você está usando o tipo correto de token para este endpoint.
404 Not Found
O caminho ou recurso solicitado não existe.
{
"statusCode": 404,
"error": "Not Found",
"message": "Route GET /memory/list not found",
"docs": "https://synapse.schaefer.zone/docs/api/errors"
}Correção: Chame GET /endpoints para ver a lista de endpoints válidos.
Compare sua URL com a lista caractere por caractere.
409 Conflict
A requisição conflita com o estado existente. Causas comuns:
- Tentativa de registrar com um email que já existe
- URL de webhook duplicada
Correção: Use um valor diferente, ou use PUT para atualizar o recurso
existente.
429 Too Many Requests
Você atingiu um limite de taxa. Aplica-se apenas à auth via parâmetro de
consulta ?key= (60/min).
{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded. Use Authorization header for unlimited access."
}Cabeçalhos da resposta:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
Retry-After: 42Correção: Mude para o cabeçalho Authorization: Bearer (sem limite de
taxa), ou aguarde Retry-After segundos.
500 Internal Server Error
Erro de servidor. Isso não deveria acontecer — se acontecer, é um bug.
Correção:
- Faça retry com backoff exponencial (1s, 2s, 4s, 8s)
- Verifique
GET /healthpara ver se o servidor está no ar - Se persistir, relate o erro
503 Service Unavailable
Servidor temporariamente indisponível (ex.: durante deploy, migração de banco).
Correção: Aguarde e tente novamente. Verifique GET /health.
Padrões de recuperação
Retry com backoff exponencial
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")Tratamento de erro de auth
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 rCenários comuns de erro
"Mind Key fehlt oder ungültig"
- Você esqueceu o cabeçalho
Authorization - Você usou
?key=mas a chave está errada - Você está usando um JWT onde uma Mind Key é necessária
"Route not found"
- Você tentou adivinhar um caminho que não existe
- Você usou um verbo errado (ex.:
GET /memoryvsPOST /memory) - Confira
GET /endpointspara caminhos válidos
"Rate limit exceeded"
- Você está usando
?key=e excedeu 60 req/min - Mude para o cabeçalho
Authorization: Bearer