Ir al contenido

Formato de respuestas y errores

Las lambdas usan los helpers compartidos del layer (shared/response.py). El shape típico:

// Con datos
{ "data": { ... } }
// Con mensaje y datos
{ "message": "Team created successfully", "data": { ... } }
// Operación sin payload de retorno
{ "success": true }

Códigos: 200 (lectura/actualización), 201 (creación), 204 no se usa — las eliminaciones devuelven 200 con mensaje.

{
"error": "Validation failed",
"details": { "field": "email", "message": "Invalid email format" }
}
  • error — mensaje legible (a veces funciona como código, ver catálogo).
  • details — opcional; en errores de validación Pydantic trae la lista de campos inválidos.
Código Cuándo
400 Body/params inválidos (validación)
401 Token faltante, inválido o expirado (lo emite API Gateway, no la Lambda)
402 Límite del plan alcanzado (ver TRIPS_LIMIT_REACHED)
403 Autenticado pero sin permiso: no es miembro del equipo o su rol no alcanza
404 Recurso inexistente o soft-deleted
409 Conflicto de estado (p. ej. transición de status inválida, condición de carrera)
500 Error no controlado — revisar CloudWatch

Códigos estables que el frontend interpreta (en error):

Código HTTP Significado
TRIPS_LIMIT_REACHED 402 El equipo agotó los viajes de su plan Stripe; el frontend muestra upsell de packs/upgrade
Token Expired 401 JWT expirado (gateway response de API Gateway)
Unauthorized 401 Sin token o token inválido (gateway response)
Access Denied 403 Rechazado por el authorizer

401/403 del authorizer y 429 de throttling los genera API Gateway directamente (gateway responses). Traen headers CORS correctos, pero su body tiene shape propio: {"error": "...", "message": "..."}.