Skip to content

Consultar Usuarios

Endpoints para consultar información de usuarios, incluyendo listados, búsquedas y consultas específicas.

  • GET /api/v1/users - Listar todos los usuarios
  • GET /api/v1/users/:id - Obtener usuario específico
  • GET /api/v1/users/my/information - Información del usuario autenticado

Obtiene una lista paginada de todos los usuarios del sistema.

  • Método: GET
  • Endpoint: /api/v1/users
  • Autenticación: Requerida (Bearer Token)
  • Permisos: Administrador o usuario con permisos de consulta
  • Paginación: Sí (15 elementos por página por defecto)
Accept: application/json
Authorization: Bearer {token}
ParámetroTipoRequeridoDescripción
pageintegerNoNúmero de página (por defecto: 1)
per_pageintegerNoElementos por página (por defecto: 15)
filtersstringNoFiltros avanzados en formato JSON
CampoDescripciónCondicionesEjemplo
nameNombre del usuarioeq, sw, ew, ct{"field":"name","condition":"sw","value":"Juan"}
last_nameApellido del usuarioeq, sw, ew, ct{"field":"last_name","condition":"ew","value":"Pérez"}
emailEmail del usuarioeq, sw, ew, ct{"field":"email","condition":"ew","value":"@gmail.com"}
created_atFecha de creacióneq, le, ge, bt{"field":"created_at","condition":"le","value":"2025-01-17"}
updated_atFecha de actualizacióneq, le, ge, bt{"field":"updated_at","condition":"ge","value":"2024-01-01"}
statusEstado del usuarioeq{"field":"status","condition":"eq","value":"active"}
Terminal window
GET /api/v1/users
{
"message": "Lista de usuarios",
"status": "OK",
"payload": {
"items": [
{
"uuid": 123456789,
"name": "Juan",
"last_name": "Pérez",
"email": "[email protected]",
"status": "active",
"created_at": "2025-01-17 10:30:00"
},
{
"uuid": 987654321,
"name": "María",
"last_name": "González",
"email": "[email protected]",
"status": "active",
"created_at": "2025-01-16 15:20:00"
}
],
"count": 2,
"current_page": 1,
"per_page": 15,
"total_pages": 1
}
}
Terminal window
GET /api/v1/users?filters=[{"field":"created_at","condition":"le","value":"2025-01-17"},{"field":"email","condition":"sw","value":"admin"}]
Terminal window
GET /api/v1/users?page=2&per_page=10

Obtiene la información detallada de un usuario específico.

  • Método: GET
  • Endpoint: /api/v1/users/:id
  • Autenticación: Requerida (Bearer Token)
  • Permisos: Administrador o el mismo usuario
Accept: application/json
Authorization: Bearer {token}
ParámetroTipoRequeridoDescripción
idintegerID del usuario a consultar
Terminal window
GET /api/v1/users/123456789
{
"message": "Usuario encontrado",
"status": "OK",
"payload": {
"uuid": 123456789,
"name": "Juan",
"last_name": "Pérez",
"email": "[email protected]",
"phone": "+593987654321",
"status": "active",
"created_at": "2025-01-17 10:30:00"
}
}
{
"message": "Usuario no encontrado",
"status": "ERROR"
}

Obtiene la información completa del usuario autenticado, incluyendo empresa y permisos.

  • Método: GET
  • Endpoint: /api/v1/users/my/information
  • Autenticación: Requerida (Bearer Token)
  • Permisos: Usuario autenticado
Accept: application/json
Authorization: Bearer {token}
Terminal window
GET /api/v1/users/my/information
{
"message": "Información del usuario",
"status": "OK",
"payload": {
"user": {
"uuid": 123456789,
"name": "Juan",
"last_name": "Pérez",
"email": "[email protected]",
"phone": "+593987654321",
"status": "active"
},
"company": {
"uuid": 987654321,
"name": "Empresa Ejemplo",
"ruc": "0123456789001",
"address": "Dirección de la empresa"
},
"management": {
"uuid": 555666777,
"permissions": ["create_documents", "view_reports"]
}
}
}
Terminal window
# Listar usuarios
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/users" \
-H "Accept: application/json" \
-H "Authorization: Bearer {token}"
# Obtener usuario específico
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/users/123456789" \
-H "Accept: application/json" \
-H "Authorization: Bearer {token}"
# Mi información
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/users/my/information" \
-H "Accept: application/json" \
-H "Authorization: Bearer {token}"
# Con filtros
curl -X GET "https://dev-facturacion.e-dinky.test/api/v1/users?filters=[{\"field\":\"email\",\"condition\":\"ew\",\"value\":\"@gmail.com\"}]" \
-H "Accept: application/json" \
-H "Authorization: Bearer {token}"
CondiciónDescripciónEjemplo
eqIgual a{"field":"status","condition":"eq","value":"active"}
swComienza con{"field":"name","condition":"sw","value":"Juan"}
ewTermina con{"field":"email","condition":"ew","value":"@gmail.com"}
ctContiene{"field":"name","condition":"ct","value":"Car"}
leMenor o igual{"field":"created_at","condition":"le","value":"2025-01-17"}
geMayor o igual{"field":"created_at","condition":"ge","value":"2024-01-01"}
btEntre valores{"field":"created_at","condition":"bt","value":["2024-01-01","2025-01-17"]}
[
{"field":"status","condition":"eq","value":"active"},
{"field":"created_at","condition":"ge","value":"2025-01-01"}
]
[
{"field":"email","condition":"ew","value":"@empresa.com"}
]
[
{"field":"created_at","condition":"bt","value":["2024-01-01","2024-12-31"]}
]
CódigoDescripciónAcción
200Consulta exitosaProcesar datos
201Usuario encontradoMostrar información
400Parámetros inválidosRevisar filtros
401Token inválidoRenovar autenticación
403Sin permisosVerificar permisos
404Usuario no encontradoVerificar ID
422Filtros inválidosCorregir formato
500Error del servidorReintentar más tarde
// Implementar paginación progresiva
const loadUsersPage = async (page, perPage = 15) => {
const response = await getUsers(page, perPage);
const { items, current_page, total_pages } = response.payload;
console.log(`Página ${current_page} de ${total_pages}`);
// Cargar siguiente página si existe
if (current_page < total_pages) {
const nextPage = await loadUsersPage(page + 1, perPage);
return [...items, ...nextPage];
}
return items;
};
// Implementar cache para consultas frecuentes
class UserService {
private $cache;
public function getUsers($filters = [], $page = 1) {
$cacheKey = 'users_' . md5(json_encode($filters) . $page);
if ($this->cache->has($cacheKey)) {
return $this->cache->get($cacheKey);
}
$users = $this->apiCall('/api/v1/users', $filters, $page);
$this->cache->put($cacheKey, $users, 300); // 5 minutos
return $users;
}
}
// Manejo robusto de errores
const safeGetUser = async (userId) => {
try {
const user = await getUserById(userId);
return { success: true, data: user };
} catch (error) {
if (error.response?.status === 404) {
return { success: false, error: 'Usuario no encontrado' };
}
if (error.response?.status === 403) {
return { success: false, error: 'Sin permisos para ver este usuario' };
}
return { success: false, error: 'Error del servidor' };
}
};
// Implementar búsqueda inteligente
function smartUserSearch($query) {
$filters = [];
// Si parece un email
if (filter_var($query, FILTER_VALIDATE_EMAIL)) {
$filters[] = ['field' => 'email', 'condition' => 'eq', 'value' => $query];
}
// Si es numérico, buscar por ID
elseif (is_numeric($query)) {
return getUserById($query);
}
// Buscar en nombre y apellido
else {
$filters[] = ['field' => 'name', 'condition' => 'ct', 'value' => $query];
$filters[] = ['field' => 'last_name', 'condition' => 'ct', 'value' => $query];
}
return searchUsers($filters);
}
// Obtener estadísticas de usuarios
const getUserStats = async () => {
const [activeUsers, inactiveUsers, recentUsers] = await Promise.all([
searchUsers([{field: 'status', condition: 'eq', value: 'active'}]),
searchUsers([{field: 'status', condition: 'eq', value: 'inactive'}]),
searchUsers([{field: 'created_at', condition: 'ge', value: '2025-01-01'}])
]);
return {
active: activeUsers.length,
inactive: inactiveUsers.length,
recent: recentUsers.length
};
};
// Buscar usuarios de una empresa específica
function getUsersByCompany($companyId) {
$filters = [
['field' => 'account_id', 'condition' => 'eq', 'value' => $companyId],
['field' => 'status', 'condition' => 'eq', 'value' => 'active']
];
return searchUsers($filters);
}
// Exportar todos los usuarios a CSV
const exportUsersToCSV = async () => {
let allUsers = [];
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await getUsers(page, 100);
allUsers = [...allUsers, ...response.payload.items];
hasMore = page < response.payload.total_pages;
page++;
}
const csv = allUsers.map(user =>
`${user.name},${user.last_name},${user.email},${user.status}`
).join('\n');
return 'Nombre,Apellido,Email,Estado\n' + csv;
};
  • 📄 Paginación: Todos los listados están paginados por defecto
  • 🔍 Filtros: Sistema avanzado de filtros disponible
  • 🔐 Permisos: Verificar permisos antes de consultar
  • Performance: Usar paginación para grandes volúmenes
  • 💾 Cache: Implementar cache para consultas frecuentes
  • 🔄 Tiempo real: Los datos se actualizan en tiempo real
  • 📊 Estadísticas: Usar para generar reportes y dashboards
  • 🚫 Privacidad: Respetar permisos de acceso a información
  • 📱 Responsive: Adaptar paginación según dispositivo
  • 🔗 Enlaces: Usar IDs para navegación entre usuarios