Logs / Auditoría
Logs / Auditoría
Prefijo: /api/logs
Requiere Auth: Sí
Permiso requerido: configuracion, *
Módulo de auditoría que registra eventos importantes del sistema: inicios de sesión, cambios de contraseña, cambios de rol, eliminación de ventas, cambios de precio. El endpoint /api/logs/global es exclusivo para Superadmin (rol=3) y permite ver logs de todos los tenants.
GET /api/logs/
Descripción: Lista los logs de auditoría con filtros
Requiere Auth: Sí
Permiso requerido: configuracion, leer
Parámetros query:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
skip | int | ❌ | Registros a saltar |
limit | int | ❌ | Máximo a retornar |
tabla | string | ❌ | Filtrar por tabla afectada |
tipo | string | ❌ | Filtrar por tipo de movimiento |
Respuesta exitosa: 200 OK
Response:
[ { "id": 1, "tipo_movimiento": "LOGIN", "tabla_afectada": "usuarios", "id_referencia": 1, "descripcion": "Login exitoso para soporte@neoapp.com", "valor_anterior": null, "valor_nuevo": null, "usuario": "soporte@neoapp.com", "origen": "API", "tenant_id": "uuid-tenant", "fecha": "2025-01-15", "hora": "10:00:00" }]cURL:
curl "http://localhost/api/logs/?skip=0&limit=20&tabla=usuarios" -H "Authorization: Bearer <token>"Python:
import httpxresp = httpx.get("http://localhost/api/logs/", params={"skip": 0, "limit": 20}, headers={"Authorization": f"Bearer {token}"})logs = resp.json()JavaScript:
const resp = await fetch('http://localhost/api/logs/?skip=0&limit=20', { headers: {'Authorization': `Bearer ${token}`}});const logs = await resp.json();GET /api/logs/{log_id}
Descripción: Obtiene un log por ID
Requiere Auth: Sí
Permiso requerido: configuracion, leer
Respuesta exitosa: 200 OK
Errores: 404 (no encontrado)
cURL:
curl http://localhost/api/logs/1 -H "Authorization: Bearer <token>"POST /api/logs/
Descripción: Crea un nuevo log de auditoría manual
Requiere Auth: Sí
Permiso requerido: configuracion, crear
Respuesta exitosa: 201 Created
cURL:
curl -X POST http://localhost/api/logs/ \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <token>" \ -d '{"tipo_movimiento":"AJUSTE","tabla_afectada":"productos","id_referencia":1,"descripcion":"Ajuste manual de stock"}'GET /api/logs/tabla/{tabla}/ref/{id_referencia}
Descripción: Obtiene logs filtrados por tabla y ID de referencia
Requiere Auth: Sí
Permiso requerido: configuracion, leer
Respuesta exitosa: 200 OK
cURL:
curl http://localhost/api/logs/tabla/ventas/ref/1 -H "Authorization: Bearer <token>"GET /api/logs/global
Descripción: Lista logs de todos los tenants (solo Superadmin rol=3)
Requiere Auth: Sí (rol=3)
Permiso requerido: N/A (solo Superadmin)
Parámetros query:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
skip | int | ❌ | Registros a saltar |
limit | int | ❌ | Máximo a retornar |
tenant_id | UUID | ❌ | Filtrar por tenant |
tabla | string | ❌ | Filtrar por tabla |
tipo | string | ❌ | Filtrar por tipo |
Respuesta exitosa: 200 OK
Errores: 403 (no es Superadmin)
cURL:
curl "http://localhost/api/logs/global?skip=0&limit=50" -H "Authorization: Bearer <token>"