Usuarios, Asignaciones y Archivado de la API
Centro de Documentación de la API
Crea y consulta usuarios, administra las asignaciones de clientes, proyectos y códigos de cuenta, y resuelve los bloqueos que impiden archivar usuarios.
8. Usuarios
GET /users
| Parámetro | Ubicación | Valor predeterminado | Notas |
|---|---|---|---|
UserList |
query | "" |
ID numéricos separados por comas |
Status |
query | USER_STATUS_ALL |
USER_STATUS_ACTIVE (1), USER_STATUS_ARCHIVED (0) o USER_STATUS_ALL (0,1) |
StartRow |
query | 1 |
La numeración comienza en 1 |
MaxRows |
query | 50 |
Tamaño de página |
Las columnas devueltas incluyen: UserID, LastName, FirstName, FullName, EmailAddress, Access, AdminUserID, EmployeeNumber, Location, Division, Department, JobTitle, UserStatus.
El campo que indica el total de registros para la paginación se escribe
totalrowsfround(nombre heredado).
curl -s "$API_BASE/users?Status=USER_STATUS_ACTIVE&StartRow=1&MaxRows=25" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY"
curl -s "$API_BASE/users?UserList=101,102,103&Status=USER_STATUS_ALL" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY"
{
"errors": [],
"data": {
"users": [ { "UserID": 101, "FullName": "Jane Doe", "UserStatus": "1" } ],
"totalrowsfround": 42,
"startrow": "1",
"maxrows": "25"
}
}
POST /user
Crea un usuario en la empresa del solicitante.
| Parámetro | Obligatorio | Notas |
|---|---|---|
FirstName, LastName, EmailAddress |
Sí | |
PayType |
Sí | HOURLY / PAY_TYPE_HOURLY o SALARY / PAY_TYPE_SALARY |
AccessLevel |
Sí | ADMIN, SUPER o EMP (también se aceptan los nombres de las constantes) |
TimezoneID |
Sí | Obtenido de /server/timezones |
SupervisorID |
Para SUPER/EMP | Usuario al que reporta |
JobTitle, EmployeeType |
No | |
DSTEnabled, SendNotificationEmail |
No | Valores booleanos, predeterminados en false |
EnableHourlyTracking, EnableProjectTracking, EnableExpenseReports |
No | Indicadores de funcionalidades de la aplicación para EMP |
curl -s -X POST "$API_BASE/user" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{
"FirstName": "Jane",
"LastName": "Doe",
"EmailAddress": "jane@example.com",
"PayType": "HOURLY",
"AccessLevel": "EMP",
"TimezoneID": 15,
"SupervisorID": 50,
"SendNotificationEmail": true,
"EnableHourlyTracking": true,
"EnableProjectTracking": true
}'
Una respuesta exitosa incluye UserID, FirstName, LastName, FullName (y normalmente NewUserAdded). Los errores de negocio establecen valores en errorCodes, como CreateUserInvalidPermission, CreateUserLicenseError y CreateUserValidationError.
9. Asignaciones de Usuarios (Clientes, Proyectos y Códigos de Cuenta)
Reglas compartidas para todos los endpoints de asignación:
-
Se requiere acceso de administrador al perfil del usuario seleccionado.
-
PUT/POSTagregan ID sin eliminar las asignaciones existentes. -
DELETEelimina únicamente los ID proporcionados. -
Los ID de solo lectura o no válidos provocan que toda la solicitud falle (no se aplican cambios parciales).
-
Las solicitudes
DELETEsobre colecciones reciben los ID en la cadena de consulta (sin cuerpo de solicitud).
Clientes
| Método | Ruta | Cuerpo / Consulta |
|---|---|---|
PUT |
/user/{UserID}/customer/{CustomerID} |
IsDefault opcional |
DELETE |
/user/{UserID}/customer/{CustomerID} |
— |
POST |
/user/{UserID}/customers |
CustomerID (CSV), DefaultCustomerID opcional |
DELETE |
/user/{UserID}/customers?CustomerID=... |
CSV en la cadena de consulta |
# Asignación individual y establecimiento como predeterminado
curl -s -X PUT "$API_BASE/user/101/customer/10" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{"IsDefault": true}'
# Asignación masiva
curl -s -X POST "$API_BASE/user/101/customers" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{"CustomerID":"10,11,12","DefaultCustomerID":10}'
# Desasignación masiva
curl -s -X DELETE "$API_BASE/user/101/customers?CustomerID=11,12" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY"
Al eliminar el cliente predeterminado del usuario, se restablece el cliente predeterminado de la empresa.
Proyectos
Se utiliza el mismo patrón con ProjectID / DefaultProjectID / IsDefault:
curl -s -X PUT "$API_BASE/user/101/project/200" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{"IsDefault": true}'
curl -s -X POST "$API_BASE/user/101/projects" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{"ProjectID":"200,201,202","DefaultProjectID":200}'
curl -s -X DELETE "$API_BASE/user/101/projects?ProjectID=201,202" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY"
{
"errors": [],
"data": {
"UserID": 101,
"ItemIDList": "200,201,202",
"DefaultItemID": "200"
}
}
Códigos de Cuenta
Los valores predeterminados son independientes para el seguimiento de horas trabajadas, proyectos y gastos. Los ID predeterminados deben estar incluidos en la lista de asignación y estar habilitados para el tipo de seguimiento correspondiente.
| Método | Ruta | Parámetros relevantes |
|---|---|---|
PUT |
/user/{UserID}/accountcode/{AccountCodeID} |
IsDefaultHourly, IsDefaultProject, IsDefaultExpense |
DELETE |
/user/{UserID}/accountcode/{AccountCodeID} |
— |
POST |
/user/{UserID}/accountcodes |
AccountCodeID, DefaultHourlyAccountCodeID, DefaultProjectAccountCodeID, DefaultExpenseAccountCodeID |
DELETE |
/user/{UserID}/accountcodes?AccountCodeID=... |
CSV en la cadena de consulta |
curl -s -X PUT "$API_BASE/user/101/accountcode/30" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{"IsDefaultHourly": true, "IsDefaultExpense": true}'
curl -s -X POST "$API_BASE/user/101/accountcodes" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{
"AccountCodeID": "30,31,32",
"DefaultHourlyAccountCodeID": 30,
"DefaultProjectAccountCodeID": 31,
"DefaultExpenseAccountCodeID": 32
}'
curl -s -X DELETE "$API_BASE/user/101/accountcodes?AccountCodeID=31,32" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY"
10. Archivar Usuarios
PATCH /user/{UserID}/archive
Archiva al usuario. El parámetro opcional DateOfTermination utiliza la fecha y hora UTC actuales de forma predeterminada cuando se omite.
curl -s -X PATCH "$API_BASE/user/101/archive" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{"DateOfTermination": "2026-08-05"}'
errorCodes |
Significado |
|---|---|
ArchiveUserInvalidPermission |
Falta de permisos o acceso al perfil |
ArchiveUserInvalidUserID |
El usuario no pertenece a la empresa |
ArchiveUserPrimaryContactError |
No se puede archivar al contacto principal |
ArchiveUserSelfError |
No puedes archivarte a ti mismo |
ArchiveUserOnclockError |
El usuario tiene un turno de trabajo activo |
ArchiveUserOpenTimerError |
Temporizadores abiertos |
ArchiveUserUnpaidHours |
Horas trabajadas o tiempo de proyecto sin pagar |
ArchiveUserOpenExpenses |
Gastos pendientes |
PATCH /user/{UserID}/archive/resolve
Resuelve únicamente los bloqueos que pueden solucionarse; no archiva al usuario. Todas las políticas tienen SKIP como valor predeterminado (un cuerpo de solicitud vacío no realiza ninguna acción).
| Parámetro | Valores | Valor predeterminado |
|---|---|---|
OnClockAction |
SKIP, FORCE_CLOCK_OUT |
SKIP |
OpenTimerAction |
SKIP, STOP_ALL |
SKIP |
PendingAlertAction |
SKIP, ALLOW, DENY, ALLOW_AND_APPROVE |
SKIP |
UnpaidHourlyAction |
SKIP, ARCHIVE, CLOSE, DELETE |
SKIP |
UnpaidProjectAction |
SKIP, ARCHIVE, DELETE |
SKIP |
OpenExpenseAction |
SKIP, RECONCILE, DELETE |
SKIP |
Orden de resolución: reloj → temporizadores → alertas pendientes → horas trabajadas sin pagar → tiempo de proyecto sin pagar → gastos.
Las acciones destructivas requieren los permisos correspondientes de nómina, facturación o gastos. Los bloqueos que impiden continuar (falta de permisos, contacto principal o intento de archivarse a sí mismo) no se resuelven automáticamente.
curl -s -X PATCH "$API_BASE/user/101/archive/resolve" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-H "apikey: $API_KEY" \
-d '{
"OnClockAction": "FORCE_CLOCK_OUT",
"OpenTimerAction": "STOP_ALL",
"PendingAlertAction": "ALLOW_AND_APPROVE",
"UnpaidHourlyAction": "ARCHIVE",
"UnpaidProjectAction": "ARCHIVE",
"OpenExpenseAction": "RECONCILE"
}'
Consulta data.actions para revisar los resultados de cada bloqueo y luego llama a /archive.