Sesiones de usuarios de dispositivos

Indique a Nomid quién está utilizando qué dispositivo cuando su propia aplicación inicia la sesión de sus usuarios y consulte cada sesión de usuario de dispositivo.

Cómo funciona

Utilice estos endpoints cuando una aplicación suya autentique a sus propios usuarios en un dispositivo administrado. La aplicación identifica el dispositivo por su número de serie, por ejemplo, uno transmitido en su configuración administrada. Cuando un usuario inicia sesión, su backend reporta el inicio de sesión con ese número de serie y su propio id de usuario, y conserva el loginId devuelto. Cuando el usuario cierra sesión, su backend reporta el cierre de sesión.

El primer inicio de sesión de un externalUserId crea un Usuario de dispositivo con auth EXTERNAL. Los inicios de sesión posteriores del mismo externalUserId reutilizan ese usuario, y un userName que difiera de su nombre actual lo renombra. También puede reportar el inicio de sesión de un Usuario de dispositivo existente con cualquier auth mediante su deviceUserId.

GET /device-user-logins devuelve las sesiones de usuarios de dispositivos de la empresa, las más recientes primero: aquellas que reporta su sistema y los inicios de sesión mediante PIN y SSO que el agente de Nomid reporta desde el dispositivo. loginSource y logoutSource indican quién reportó cada mitad de una sesión.

Una sesión reportada a través de la API no caduca en Nomid: permanece abierta hasta que usted reporte su cierre de sesión. Cada llamada de inicio de sesión registra una nueva sesión, incluso si el mismo usuario ya ha iniciado sesión en ese dispositivo.

La API solo cierra las sesiones que se reportaron a través de la API. El dispositivo cierra los inicios de sesión por PIN o SSO en el agente de Nomid.

Requisitos

  • GET /device-user-logins requiere DEVICES_READ, al igual que las demás lecturas de dispositivos.
  • Reportar inicios y cierres de sesión de usuarios de dispositivos (POST /device-user-logins y POST /device-user-logins/logout) requiere DEVICES_COMMAND, el permiso que envía comandos a los dispositivos; una clave solo lo obtiene junto con DEVICES_READ. Las sesiones de usuarios de dispositivos no tienen un permiso propio.
  • Para reportar un inicio de sesión, el activo debe tener un dispositivo administrado, es decir, un dispositivo inscrito en Nomid actualmente.
  • La clave validada selecciona la empresa; las solicitudes no tienen ningún parámetro de tenant o empresa. Los endpoints de inicio y cierre de sesión pueden dirigirse a todos los activos de la empresa.

Endpoints

Las rutas son relativas a la URL base de la API y requieren el encabezado X-API-Key.

https://api.nomid.tech/emm/api/v1

MétodoEndpointPermisoDescripción
GET/device-user-loginsDEVICES_READEnumera las sesiones de usuarios de dispositivos, las más recientes primero, con filtros opcionales
POST/device-user-loginsDEVICES_COMMANDReporta que un usuario autenticado por su sistema inició sesión en un dispositivo; devuelve 201 con la sesión
POST/device-user-logins/logoutDEVICES_COMMANDReporta un cierre de sesión, por loginId o por dispositivo y usuario; devuelve las sesiones afectadas

Listar sesiones

Todos los parámetros de consulta son opcionales. Sin filtros, el endpoint devuelve las últimas sesiones de la empresa.

ParámetroDescripción
assetIdSolo sesiones en este activo. No junto con serialNumber.
serialNumberSolo sesiones en el activo con este número de serie. No junto con assetId.
deviceUserIdSolo sesiones del Device User con este id de Nomid, deviceUser.id en una sesión.
externalUserIdSolo sesiones del Device User EXTERNAL con este id de su sistema.
opentrue devuelve solo las sesiones que siguen abiertas: sin cierre de sesión y no expiradas. El valor predeterminado es false, que devuelve sesiones abiertas y cerradas.
fromSolo sesiones que se hayan iniciado en este instante ISO-8601 o después, como 2026-10-01T00:00:00Z.
toSolo sesiones que se hayan iniciado antes de este instante ISO-8601. from debe ser anterior a to, y ambos deben situarse entre 1970 y 9999.
limitNúmero máximo de sesiones a devolver. El valor predeterminado es 50; un valor superior a 200 devuelve 200.

Las sesiones de un activo incluyen las registradas en inscripciones anteriores del mismo hardware, con el mismo número de serie, por lo que un dispositivo reinscrito conserva su historial. Un activo desconocido devuelve un 404 con el código asset_not_found; un deviceUserId o externalUserId desconocido no coincide con ninguna sesión y devuelve una lista vacía.

Notificar un inicio de sesión

Envíe un campo de dispositivo y un campo de usuario. Enviar ambos o ninguno de un par devuelve 400.

CampoLongitud máximaDescripción
serialNumber255El número de serie del dispositivo. Este o assetId.
assetId255El id del activo. Este o serialNumber.
externalUserId100Su propio id para el usuario. Su primer inicio de sesión crea un Device User con autenticación EXTERNAL; los inicios de sesión posteriores lo reutilizan. Se eliminan los espacios circundantes y se rechazan los caracteres de control. Este o deviceUserId.
deviceUserId36El id de un Device User de Nomid existente. Este o externalUserId.
userName50Nombre para mostrar opcional, utilizado solo con externalUserId. Un nuevo usuario EXTERNAL lo toma, o su externalUserId cortado a 50 caracteres cuando está ausente. Un inicio de sesión posterior con un userName diferente cambia el nombre del usuario.

Conserve el loginId de la respuesta: es el comprobante que cierra exactamente esta sesión. Si se pierde una respuesta de inicio de sesión y vuelve a enviarlo, se registrará una segunda sesión; un cierre de sesión por dispositivo y usuario cerrará ambas.

Notificar un cierre de sesión

Envíe loginId, o un campo de dispositivo y un campo de usuario para cerrar todas las sesiones abiertas que la API haya abierto para ese usuario en ese dispositivo, incluidas las de inscripciones anteriores del mismo hardware.

CampoLongitud máximaDescripción
loginId36El comprobante devuelto por el inicio de sesión. Cualquier campo de dispositivo o usuario enviado con él debe ser el de la propia sesión, o de lo contrario la solicitud devuelve 409.
serialNumber255El número de serie del dispositivo. No junto con assetId.
assetId255El id del activo. No junto con serialNumber.
externalUserId100Su propio id para el usuario. No junto con deviceUserId.
deviceUserId36El id de Nomid del Device User. No junto con externalUserId.

La respuesta es 200 con la lista de sesiones afectadas. Cerrar una sesión que ya está cerrada no cambia nada y la devuelve tal como está, por lo que el cierre de sesión se puede reintentar de forma segura. Un cierre de sesión por dispositivo y usuario devuelve una lista vacía cuando el usuario no tiene ninguna sesión de API abierta allí.

Campos de sesión

Cada endpoint devuelve sesiones con estos campos. Si un campo no tiene valor, se omite; open siempre está presente. Las horas son instantes ISO-8601 en UTC.

CampoDescripción
loginIdEl id de la sesión, el comprobante que la cierra.
deviceUserQuién inició sesión: id (el id de Nomid), name, auth (PIN, SSO o EXTERNAL) y, para un usuario EXTERNAL, externalUserId.
assetDónde: assetId, serialNumber y name. Se omite únicamente cuando el dispositivo ya no pertenece a ningún activo.
loginAtCuándo inició sesión el usuario. Se omite únicamente en el caso de un cierre de sesión que el dispositivo notificó sin un inicio de sesión.
logoutAtCuándo finalizó la sesión. Se omite mientras esté abierta.
expiresAtCuándo expira la sesión por sí sola, si la política establece una caducidad. Las sesiones notificadas a través de la API no tienen ninguna.
opentrue mientras nadie haya cerrado la sesión y esta no haya expirado.
loginSourceQuién notificó el inicio de sesión: DEVICE (el agente de Nomid en el dispositivo, un inicio de sesión mediante PIN o SSO) o API (su sistema, a través de esta API).
logoutSourceQuién notificó el cierre de sesión: DEVICE, API o EXPIRY cuando la sesión expiró. Se omite mientras la sesión esté abierta.

Ejemplos

Notificar un inicio de sesión por número de serie para un usuario de su propio sistema.

curl -X POST "https://api.nomid.tech/emm/api/v1/device-user-logins" \
  -H "X-API-Key: $NOMID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"serialNumber": "R58N123ABCD", "externalUserId": "emp-1042", "userName": "Ana Souza"}'
HTTP/1.1 201 Created

{
  "loginId": "5f0c2a8e-3b1d-4e7a-9c64-2d8f1b7e0a93",
  "deviceUser": {
    "id": "b2e47c19-8a3f-4d65-a0e1-6c9d2f5b8e74",
    "name": "Ana Souza",
    "auth": "EXTERNAL",
    "externalUserId": "emp-1042"
  },
  "asset": {
    "assetId": "k3x9m2pa",
    "serialNumber": "R58N123ABCD",
    "name": "Warehouse scanner 12"
  },
  "loginAt": "2026-10-29T11:02:41.518204Z",
  "open": true,
  "loginSource": "API"
}

Cerrar esa sesión con su loginId.

curl -X POST "https://api.nomid.tech/emm/api/v1/device-user-logins/logout" \
  -H "X-API-Key: $NOMID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"loginId": "5f0c2a8e-3b1d-4e7a-9c64-2d8f1b7e0a93"}'
HTTP/1.1 200 OK

[
  {
    "loginId": "5f0c2a8e-3b1d-4e7a-9c64-2d8f1b7e0a93",
    "deviceUser": {
      "id": "b2e47c19-8a3f-4d65-a0e1-6c9d2f5b8e74",
      "name": "Ana Souza",
      "auth": "EXTERNAL",
      "externalUserId": "emp-1042"
    },
    "asset": {
      "assetId": "k3x9m2pa",
      "serialNumber": "R58N123ABCD",
      "name": "Warehouse scanner 12"
    },
    "loginAt": "2026-10-29T11:02:41.518204Z",
    "logoutAt": "2026-10-29T19:30:05.204117Z",
    "open": false,
    "loginSource": "API",
    "logoutSource": "API"
  }
]

O cerrar todas las sesiones de API abiertas del usuario en ese dispositivo.

curl -X POST "https://api.nomid.tech/emm/api/v1/device-user-logins/logout" \
  -H "X-API-Key: $NOMID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"serialNumber": "R58N123ABCD", "externalUserId": "emp-1042"}'

Consultar las sesiones de un dispositivo desde el 1 de octubre. Esta es un inicio de sesión mediante PIN en el dispositivo que expiró.

curl "https://api.nomid.tech/emm/api/v1/device-user-logins?serialNumber=R58N123ABCD&from=2026-10-01T00:00:00Z&limit=20" \
  -H "X-API-Key: $NOMID_API_KEY"
HTTP/1.1 200 OK

[
  {
    "loginId": "e91d4b7a-0c2f-4a58-8b13-7f6e5d4c3b2a",
    "deviceUser": {
      "id": "4c8a1e2f-6b3d-4f70-9e15-0a2b3c4d5e6f",
      "name": "Shift 2 operator",
      "auth": "PIN"
    },
    "asset": {
      "assetId": "k3x9m2pa",
      "serialNumber": "R58N123ABCD",
      "name": "Warehouse scanner 12"
    },
    "loginAt": "2026-10-28T14:00:09.731552Z",
    "logoutAt": "2026-10-28T22:00:09.731552Z",
    "expiresAt": "2026-10-28T22:00:09.731552Z",
    "open": false,
    "loginSource": "DEVICE",
    "logoutSource": "EXPIRY"
  }
]

Error: una sesión notificada por el dispositivo

HTTP/1.1 409 Conflict
Content-Type: application/problem+json

{
  "type": "about:blank",
  "title": "Conflict",
  "status": 409,
  "detail": "The login was reported by the device, not through the API",
  "instance": "/emm/api/v1/device-user-logins/logout",
  "code": "login_not_reported_by_api"
}

Errores

Los endpoints de sesión de Device User responden 400, 404 y 409 con application/problem+json y un miembro code para bifurcar; no envían ningún miembro retryable. Dos excepciones no tienen code: 401 y 403, y un 400 por un parámetro de consulta no válido de GET /device-user-logins.

EstadoCódigoSignificado
400invalid_argumentInicio o cierre de sesión: falta el cuerpo o no es un JSON válido con la estructura documentada, se enviaron ambos o ninguno de los pares de dispositivo o usuario, a un cierre de sesión sin loginId le falta el dispositivo o el usuario, o externalUserId (más de 100 caracteres) o userName (más de 50 caracteres) es demasiado largo o tiene caracteres de control. El detalle indica cuál.
400-Solo al listar: assetId y serialNumber juntos, from no es anterior a to, from o to no es un instante ISO-8601 o está fuera del rango de 1970 a 9999, un límite inferior a 1, u open no es true o false.
401-La clave de API falta, no es válida, ha caducado o se ha revocado.
403-La clave carece de DEVICES_READ (listar) o DEVICES_COMMAND (iniciar y cerrar sesión).
404asset_not_foundNo hay ningún activo con este assetId o serialNumber en la empresa de la clave.
404device_user_not_foundNo hay ningún Device User con este deviceUserId en la empresa de la clave o, al cerrar sesión, ninguno con este externalUserId porque nunca inició sesión a través de la API.
404login_not_foundNo hay ninguna sesión con este loginId en la empresa de la clave.
409no_managed_deviceEl activo no tiene ningún dispositivo administrado, por lo que no se puede registrar ningún inicio de sesión en él.
409device_user_disabledEl Device User está deshabilitado.
409device_user_not_externalEl Device User con este externalUserId ya no tiene autenticación EXTERNAL.
409login_device_mismatchLa sesión con este loginId no se produjo en el dispositivo enviado con ella.
409login_user_mismatchLa sesión con este loginId no pertenece al usuario enviado.
409login_not_reported_by_apiLa sesión fue notificada por el dispositivo, un inicio de sesión mediante PIN o SSO en el agente de Nomid. El dispositivo la cierra, no la API.

Límites de frecuencia

Estos puntos de conexión no forman parte del límite de escritura de 10 solicitudes por minuto por clave que comparten los comandos de dispositivo, los cambios de política y los códigos QR de aprovisionamiento. De todos modos, diseñe su cliente para que aplique un tiempo de espera ante un 429.

Herramienta MCP

La herramienta MCP de solo lectura list_device_user_logins admite los mismos filtros como argumentos y necesita DEVICES_READ. Con Sign in with Nomid, un usuario que solo ve algunas políticas únicamente obtiene las sesiones en activos de esas políticas. La notificación de inicios y cierres de sesión solo se realiza mediante REST: ninguna herramienta MCP lo hace.

list_device_user_loginsDEVICES_READSesiones de Device User, las más recientes primero, con los filtros de GET /device-user-logins: quién inició sesión en qué activo, cuándo y quién notificó el inicio y el cierre de sesión. Sigue el alcance de la política del emisor. Error de herramienta si no se encuentra el activo.

Servidor MCP

Elija su horario

Cargando...
Abrir el calendario de reservas