Sessões de Device User

Informe ao Nomid quem está usando qual dispositivo quando seu próprio aplicativo autenticar os usuários e consulte todas as sessões de Device User.

Como funciona

Use estes endpoints quando um aplicativo seu autenticar seus próprios usuários em um dispositivo gerenciado. O aplicativo identifica o dispositivo pelo número de série, por exemplo, um passado a ele em sua configuração gerenciada. Quando um usuário faz login, seu back-end relata o login com esse número de série e seu próprio id para o usuário, e armazena o loginId retornado. Quando o usuário faz logout, seu back-end relata o logout.

O primeiro login de um externalUserId cria um Device User com autenticação EXTERNAL para ele. Logins posteriores do mesmo externalUserId reutilizam esse usuário, e um userName diferente do nome atual o renomeia. Você também pode relatar o login de um Device User existente de qualquer tipo de autenticação pelo seu deviceUserId.

GET /device-user-logins retorna as sessões de Device User da empresa, da mais recente para a mais antiga: aquelas que o seu sistema relata e os logins por PIN e SSO que o agente Nomid relata a partir do dispositivo. loginSource e logoutSource indicam quem relatou cada parte de uma sessão.

Uma sessão relatada por meio da API não expira no Nomid: ela permanece aberta até que você relate o respectivo logout. Cada chamada de login registra uma nova sessão, mesmo quando o mesmo usuário já estiver conectado nesse dispositivo.

A API encerra apenas sessões que foram relatadas por meio da API. Um login por PIN ou SSO no agente Nomid é encerrado pelo dispositivo.

Requisitos

  • GET /device-user-logins requer DEVICES_READ, assim como as outras leituras de dispositivos.
  • Relatar logins e logouts de Device User (POST /device-user-logins e POST /device-user-logins/logout) requer DEVICES_COMMAND, a permissão que envia comandos para dispositivos; uma chave só a obtém em conjunto com DEVICES_READ. As sessões de Device User não têm uma permissão própria.
  • Para relatar um login, o ativo precisa ter um dispositivo gerenciado, ou seja, um dispositivo registrado no Nomid no momento.
  • A chave validada seleciona a empresa; as requisições não possuem parâmetros de tenant ou de empresa. Os endpoints de login e logout podem acessar todos os ativos da empresa.

Endpoints

Os caminhos são relativos à URL base da API e exigem o cabeçalho X-API-Key.

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

MétodoEndpointPermissãoDescrição
GET/device-user-loginsDEVICES_READListar sessões de Device User, da mais recente para a mais antiga, com filtros opcionais
POST/device-user-loginsDEVICES_COMMANDRelatar que um usuário autenticado pelo seu sistema fez login em um dispositivo; retorna 201 com a sessão
POST/device-user-logins/logoutDEVICES_COMMANDRelatar um logout, por loginId ou por dispositivo e usuário; retorna as sessões em questão

Listar sessões

Todos os parâmetros de consulta são opcionais. Sem filtros, o endpoint retorna as sessões mais recentes da empresa.

ParâmetroDescrição
assetIdApenas sessões neste ativo. Não usar em conjunto com serialNumber.
serialNumberApenas sessões no ativo com este número de série. Não usar em conjunto com assetId.
deviceUserIdApenas sessões do Usuário do Dispositivo com este ID Nomid, deviceUser.id em uma sessão.
externalUserIdApenas sessões do Usuário do Dispositivo EXTERNAL com este ID do seu sistema.
opentrue retorna apenas as sessões ainda abertas: sem logout e não expiradas. O padrão é false, que retorna sessões abertas e encerradas.
fromApenas sessões iniciadas neste instante ISO-8601 ou após ele, como 2026-10-01T00:00:00Z.
toApenas sessões iniciadas antes deste instante ISO-8601. from deve ser anterior a to, e ambos devem estar entre 1970 e 9999.
limitNúmero máximo de sessões a retornar. O padrão é 50; um valor acima de 200 retorna 200.

As sessões de um ativo incluem aquelas gravadas em registros anteriores do mesmo hardware, com o mesmo número de série, para que um dispositivo registrado novamente mantenha seu histórico. Um ativo desconhecido retorna 404 com o código asset_not_found; um deviceUserId ou externalUserId desconhecido não corresponde a nenhuma sessão e retorna uma lista vazia.

Informar um login

Envie um campo de dispositivo e um campo de usuário. Enviar ambos ou nenhum de um par retorna 400.

CampoTamanho máximoDescrição
serialNumber255O número de série do dispositivo. Este ou assetId.
assetId255O ID do ativo. Este ou serialNumber.
externalUserId100Seu próprio ID para o usuário. Seu primeiro login cria um Usuário do Dispositivo com auth EXTERNAL; logins posteriores o reutilizam. Espaços ao redor são removidos e caracteres de controle são recusados. Este ou deviceUserId.
deviceUserId36O ID de um Usuário do Dispositivo Nomid existente. Este ou externalUserId.
userName50Nome de exibição opcional, usado apenas com externalUserId. Um novo usuário EXTERNAL o assume, ou seu externalUserId truncado em 50 caracteres quando ausente. Um login posterior com um userName diferente renomeia o usuário.

Guarde o loginId da resposta: ele é o comprovante que encerra exatamente esta sessão. Se uma resposta de login for perdida e você enviar o login novamente, uma segunda sessão será registrada; um logout por dispositivo e usuário encerra ambas.

Informar um logout

Envie loginId ou um campo de dispositivo e um campo de usuário para encerrar todas as sessões abertas que a API abriu para aquele usuário naquele dispositivo, inclusive em registros anteriores do mesmo hardware.

CampoTamanho máximoDescrição
loginId36O comprovante retornado pelo login. Um campo de dispositivo ou usuário enviado com ele deve ser o da própria sessão, ou a requisição retornará 409.
serialNumber255O número de série do dispositivo. Não pode ser usado junto com assetId.
assetId255O id do ativo. Não pode ser usado junto com serialNumber.
externalUserId100Seu próprio id para o usuário. Não pode ser usado junto com deviceUserId.
deviceUserId36O id Nomid do Device User. Não pode ser usado junto com externalUserId.

A resposta é 200 com a lista de sessões em questão. Encerrar uma sessão que já está fechada não altera nada e a retorna como está; portanto, o logout pode ser repetido com segurança. Um logout por dispositivo e usuário retorna uma lista vazia quando o usuário não tiver nenhuma sessão de API aberta nele.

Campos da sessão

Todos os endpoints retornam sessões com estes campos. Um campo sem valor é omitido; open está sempre presente. Os horários são instantes ISO-8601 em UTC.

CampoDescrição
loginIdO id da sessão, o comprovante usado para encerrá-la.
deviceUserQuem fez login: id (o id Nomid), name, auth (PIN, SSO ou EXTERNAL) e, para um usuário EXTERNAL, externalUserId.
assetOnde: assetId, serialNumber e name. Omitido apenas quando o dispositivo não pertencer mais a nenhum ativo.
loginAtQuando o usuário fez login. Omitido apenas para um logout que o dispositivo relatou sem um login.
logoutAtQuando a sessão foi encerrada. Omitido enquanto ela estiver aberta.
expiresAtQuando a sessão expira por conta própria, se a política definir uma expiração. Sessões relatadas por meio da API não têm nenhuma.
opentrue enquanto ninguém tiver encerrado a sessão e ela não tiver expirado.
loginSourceQuem relatou o login: DEVICE (o agente Nomid no dispositivo, um login por PIN ou SSO) ou API (seu sistema, por meio desta API).
logoutSourceQuem relatou o logout: DEVICE, API ou EXPIRY quando a sessão expirou. Omitido enquanto a sessão estiver aberta.

Exemplos

Relate um login por número de série para um usuário do seu próprio 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"
}

Encerre essa sessão com seu 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"
  }
]

Ou feche todas as sessões de API abertas do usuário nesse 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"}'

Leia as sessões de um dispositivo desde 1º de outubro. Esta é um login por PIN no dispositivo que expirou.

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"
  }
]

Erro: uma sessão relatada pelo 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"
}

Erros

Os endpoints de sessão do Device User respondem a 400, 404 e 409 com application/problem+json e um membro code para ramificação; eles não enviam um membro retryable. Duas exceções não têm code: 401 e 403, e um 400 para um parâmetro de consulta inválido de GET /device-user-logins.

StatusCódigoSignificado
400invalid_argumentLogin ou logout: o corpo está ausente ou não é um JSON válido no formato documentado, ambos ou nenhum do par de dispositivo ou usuário foi enviado, um logout sem loginId não contém o dispositivo ou o usuário, ou externalUserId (mais de 100 caracteres) ou userName (mais de 50 caracteres) é longo demais ou contém caracteres de controle. O detalhe indica qual.
400-Apenas listagem: assetId e serialNumber juntos, from não anterior a to, from ou to não sendo um instante ISO-8601 ou fora do intervalo de 1970 a 9999, um limite abaixo de 1 ou open não sendo true ou false.
401-A chave de API está ausente, inválida, expirada ou revogada.
403-A chave não possui DEVICES_READ (listar) ou DEVICES_COMMAND (login e logout).
404asset_not_foundNenhum ativo com este assetId ou serialNumber na empresa da chave.
404device_user_not_foundNenhum Device User com este deviceUserId na empresa da chave ou, em um logout, nenhum com este externalUserId porque nunca fez login por meio da API.
404login_not_foundNenhuma sessão com este loginId na empresa da chave.
409no_managed_deviceO ativo não possui um dispositivo gerenciado, portanto nenhum login pode ser registrado nele.
409device_user_disabledO Device User está desativado.
409device_user_not_externalO Device User com este externalUserId não possui mais autenticação EXTERNAL.
409login_device_mismatchA sessão com este loginId não ocorreu no dispositivo enviado com ele.
409login_user_mismatchA sessão com este loginId não pertence ao usuário enviado.
409login_not_reported_by_apiA sessão foi informada pelo dispositivo, um login por PIN ou SSO no agente Nomid. O dispositivo a encerra, não a API.

Limites de taxa

Esses endpoints não fazem parte do limite de gravação de 10 solicitações por minuto por chave compartilhado por comandos de dispositivo, alterações de política e códigos QR de provisionamento. De qualquer forma, programe seu cliente para recuar em caso de 429.

Ferramenta MCP

A ferramenta MCP somente leitura list_device_user_logins aceita os mesmos filtros como argumentos e precisa de DEVICES_READ. Com o Sign in with Nomid, um usuário que vê apenas algumas políticas obtém apenas as sessões em ativos dessas políticas. Informar logins e logouts é somente REST: nenhuma ferramenta MCP faz isso.

list_device_user_loginsDEVICES_READSessões de Device User, da mais recente para a mais antiga, com os filtros de GET /device-user-logins: quem fez login em qual ativo, quando e quem informou o login e o logout. Segue o escopo de política do chamador. Erro de ferramenta se o ativo não for encontrado.

Servidor MCP

Escolha o seu horário

Carregando...
Abrir calendário de agendamento