Skip to content

Errores y Códigos HTTP

La API usa códigos de estado HTTP estándar. Todos los errores devuelven un cuerpo JSON con detalles.

Estructura de error

json
{
  "status": "error",
  "message": "Descripción legible del error",
  "error": "CODIGO_INTERNO"   // solo en algunos endpoints
}

Códigos HTTP

CódigoSignificadoCausa típica
200OKPetición exitosa
201CreatedRecurso creado exitosamente
400Bad RequestDatos inválidos o campo requerido ausente
401UnauthorizedToken ausente, inválido o expirado
403ForbiddenSin permisos para esa operación
404Not FoundRecurso no encontrado
409ConflictConflicto de datos (email duplicado, nombre de agencia ya existe)
422Unprocessable EntityError de validación de campos
429Too Many RequestsLímite de peticiones excedido
500Internal Server ErrorError interno del servidor

Errores de validación (422)

json
{
  "status": "error",
  "message": "Validation failure",
  "errors": [
    {
      "field": "email",
      "message": "The email field must be a valid email address",
      "rule": "email"
    },
    {
      "field": "password",
      "message": "The password field must have at least 8 characters",
      "rule": "minLength"
    }
  ]
}

Códigos internos comunes

CódigoDescripción
EMAIL_ALREADY_EXISTSEl email ya está registrado en el sistema
AGENCY_NAME_EXISTSEl nombre de agencia ya está en uso
AGENT_NOT_FOUNDEl agente especificado no existe
PROPERTY_NOT_FOUNDLa propiedad no fue encontrada
UNAUTHORIZED_AGENCYNo eres el administrador de esa agencia

Manejo de errores — Ejemplo

typescript
const response = await fetch('https://api.havi.app/api/agencies', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(payload)
})

if (!response.ok) {
  const error = await response.json()

  if (response.status === 409) {
    console.error('Nombre de agencia ya existe:', error.message)
  } else if (response.status === 401) {
    // Renovar token
    await refreshToken()
  } else {
    console.error('Error:', error.message)
  }
}

Rate Limiting

Los límites se devuelven en los headers de cada respuesta:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 987
X-RateLimit-Reset: 1715600000

Si superas el límite, recibirás un 429 Too Many Requests con el tiempo de espera.

HAVI API · Documentación Oficial