Usuarios
Usuarios
Prefijo: /api/usuarios
Requiere Auth: Sí
Permiso requerido: usuarios, *
Módulo de gestión de usuarios del sistema. La política de contraseñas exige: mínimo 8 caracteres, al menos una mayúscula, un número y un carácter especial. Los usuarios nuevos se crean con password_must_change: true.
Nota: Los usuarios utilizan soft delete — al eliminar se marcan como eliminados sin borrarse físicamente.
GET /api/usuarios/
Descripción: Lista los usuarios del tenant con paginación
Requiere Auth: Sí
Permiso requerido: usuarios, leer
Respuesta exitosa: 200 OK
Response:
[ { "id": 1, "nombre": "Juan Pérez", "correo": "juan@miempresa.com", "rol": 1, "tenant_id": "uuid-tenant", "fecha_registro": "2025-01-01", "password_must_change": false, "terminal_id": "TIENDA01-CAJA1" }]cURL:
curl "http://localhost/api/usuarios/?skip=0&limit=10" -H "Authorization: Bearer <token>"Python:
import httpxresp = httpx.get("http://localhost/api/usuarios/", headers={"Authorization": f"Bearer :token"})usuarios = resp.json()JavaScript:
const resp = await fetch('http://localhost/api/usuarios/', { headers: {'Authorization': `Bearer $:token`}});const usuarios = await resp.json();GET /api/usuarios/:usuario_id
Descripción: Obtiene un usuario por ID
Requiere Auth: Sí
Permiso requerido: usuarios, leer
Respuesta exitosa: 200 OK
Errores: 404 (no encontrado)
cURL:
curl http://localhost/api/usuarios/1 -H "Authorization: Bearer <token>"POST /api/usuarios/
Descripción: Crea un nuevo usuario en el tenant. Opcionalmente se le asigna una terminal (terminal_id, el codigo de la tabla terminales) que el POS usará en sus logins. La terminal debe existir en el tenant (400 si no existe).
Requiere Auth: Sí
Permiso requerido: usuarios, crear
Request:
{ "nombre": "Nuevo Usuario", "correo": "nuevo@miempresa.com", "password": "Passw0rd!", "rol": 2, "terminal_id": "TIENDA01-CAJA1"}Respuesta exitosa: 201 Created
Errores: 400 (terminal inexistente en el tenant), 409 (correo ya existe en el tenant)
cURL:
curl -X POST http://localhost/api/usuarios/ \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <token>" \ -d '{"nombre":"Nuevo Usuario","correo":"nuevo@miempresa.com","password":"Passw0rd!","rol":2,"terminal_id":"TIENDA01-CAJA1"}'Python:
import httpxresp = httpx.post("http://localhost/api/usuarios/", json={"nombre": "Nuevo Usuario", "correo": "nuevo@miempresa.com", "password": "Passw0rd!", "rol": 2, "terminal_id": "TIENDA01-CAJA1"}, headers={"Authorization": f"Bearer :token"})usuario = resp.json()JavaScript:
const resp = await fetch('http://localhost/api/usuarios/', { method: 'POST', headers: {'Content-Type': 'application/json', 'Authorization': `Bearer $:token`}, body: JSON.stringify({nombre: 'Nuevo Usuario', correo: 'nuevo@miempresa.com', password: 'Passw0rd!', rol: 2, terminal_id: 'TIENDA01-CAJA1'})});PUT /api/usuarios/:usuario_id
Descripción: Actualiza un usuario (nombre, correo, rol, password, terminal_id). Si se envía terminal_id, la terminal debe existir en el tenant (400 si no existe); para desasignar, enviar terminal_id: null.
Requiere Auth: Sí
Permiso requerido: usuarios, actualizar
Respuesta exitosa: 200 OK
Errores: 400 (terminal inexistente en el tenant), 404 (no encontrado)
cURL:
curl -X PUT http://localhost/api/usuarios/1 \ -H "Content-Type: application/json" \ -H "Authorization: Bearer <token>" \ -d '{"nombre":"Juan Actualizado","rol":1,"terminal_id":"TIENDA01-CAJA1"}'DELETE /api/usuarios/:usuario_id
Descripción: Elimina (soft delete) un usuario
Requiere Auth: Sí
Permiso requerido: usuarios, eliminar
Respuesta exitosa: 204 No Content
Errores: 404 (no encontrado)
cURL:
curl -X DELETE http://localhost/api/usuarios/1 -H "Authorization: Bearer <token>"