Autenticación
Toda interacción con el API (excepto los endpoints de metadata pública)
requiere un Bearer token obtenido con POST /api/v1/auth/login. El token
es opaco para el cliente (un hash de 64 caracteres) y lleva implícita la
empresa del usuario — eso convierte al API en multi-tenant sin que el
cliente tenga que hacer nada extra.
Flujo completo
- Login → obtienes
tokenyexpires_at. - Cada request lleva header
Authorization: Bearer <token>. - Refresh opcional cuando faltan menos de 4 h para expirar.
- Logout invalida el token del lado del servidor.
POST /auth/login
curl -X POST http://localhost/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"usuario": "cb", "password": "1234"}'Respuestas posibles:
| Status | Significado |
|---|---|
| 200 | Login exitoso, data.token disponible. |
| 401 | Usuario o password incorrectos. |
| 422 | Faltan campos requeridos en el body. |
POST /auth/refresh
Idempotente: si al token le quedan más de 4 horas, retorna el mismo; si quedan menos, genera uno nuevo (otras 24h).
curl -X POST http://localhost/api/v1/auth/refresh \
-H "Authorization: Bearer $TOKEN"POST /auth/logout
Invalida el token actual. Con ?all=true cierra todas las sesiones del
usuario en la empresa. Siempre responde 204 (fire-and-forget — no
revela si el token existía o no, por seguridad).
curl -X POST "http://localhost/api/v1/auth/logout?all=true" \
-H "Authorization: Bearer $TOKEN"GET /auth/permissions
Lista módulos, modelos y acciones que el usuario puede ver/ejecutar. Se usa para construir menús dinámicos y filtrar botones de acción. La respuesta está cacheada en Memcached por 300 segundos.
curl http://localhost/api/v1/auth/permissions \
-H "Authorization: Bearer $TOKEN"Si un admin cambia el perfil del usuario y necesitas reflejarlo al instante, llama a:
curl -X POST http://localhost/api/v1/auth/permissions/invalidate \
-H "Authorization: Bearer $TOKEN"