Device-User-Sitzungen

Teilen Sie Nomid mit, wer welches Gerät verwendet, wenn Ihre eigene App ihre Benutzer anmeldet, und rufen Sie jede Device-User-Sitzung ab.

Funktionsweise

Verwenden Sie diese Endpunkte, wenn eine Ihrer Apps ihre eigenen Benutzer auf einem verwalteten Gerät authentifiziert. Die App identifiziert das Gerät anhand seiner Seriennummer, beispielsweise über eine Nummer, die ihr in ihrer verwalteten Konfiguration übergeben wurde. Wenn sich ein Benutzer anmeldet, meldet Ihr Backend die Anmeldung mit dieser Seriennummer und Ihrer eigenen ID für den Benutzer und speichert die zurückgegebene loginId. Wenn sich der Benutzer abmeldet, meldet Ihr Backend die Abmeldung.

Die erste Anmeldung einer externalUserId erstellt dafür einen Device-User mit auth EXTERNAL. Spätere Anmeldungen derselben externalUserId verwenden diesen Benutzer wieder, und ein userName, der vom aktuellen Namen abweicht, benennt ihn um. Sie können auch die Anmeldung eines bestehenden Device-Users mit beliebiger Authentifizierung über dessen deviceUserId melden.

GET /device-user-logins gibt die Device-User-Sitzungen des Unternehmens zurück, die neuesten zuerst: diejenigen, die Ihr System meldet, sowie die PIN- und SSO-Anmeldungen, die der Nomid-Agent vom Gerät meldet. loginSource und logoutSource geben an, wer die jeweilige Hälfte einer Sitzung gemeldet hat.

Eine über die API gemeldete Sitzung läuft in Nomid nicht ab: Sie bleibt geöffnet, bis Sie deren Abmeldung melden. Jeder Anmeldeaufruf zeichnet eine neue Sitzung auf, selbst wenn derselbe Benutzer bereits auf diesem Gerät angemeldet ist.

Die API schließt nur Sitzungen, die über die API gemeldet wurden. Eine PIN- oder SSO-Anmeldung im Nomid-Agenten wird durch das Gerät geschlossen.

Voraussetzungen

  • GET /device-user-logins erfordert DEVICES_READ, genau wie die anderen Lesezugriffe für Geräte.
  • Das Melden von An- und Abmeldungen von Device-Usern (POST /device-user-logins und POST /device-user-logins/logout) erfordert DEVICES_COMMAND, die Berechtigung, die Gerätebefehle sendet; ein Schlüssel erhält diese nur zusammen mit DEVICES_READ. Device-User-Sitzungen verfügen über keine eigene Berechtigung.
  • Um eine Anmeldung zu melden, muss das Asset über ein verwaltetes Gerät verfügen, das heißt über ein Gerät, das aktuell in Nomid registriert ist.
  • Der validierte Schlüssel wählt das Unternehmen aus; Anfragen haben keinen Tenant- oder Unternehmensparameter. Die An- und Abmelde-Endpunkte können jedes Asset des Unternehmens adressieren.

Endpunkte

Pfade sind relativ zur Basis-URL der API und erfordern den Header X-API-Key.

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

MethodeEndpunktBerechtigungBeschreibung
GET/device-user-loginsDEVICES_READDevice-User-Sitzungen auflisten, neueste zuerst, mit optionalen Filtern
POST/device-user-loginsDEVICES_COMMANDMelden, dass sich ein von Ihrem System authentifizierter Benutzer auf einem Gerät angemeldet hat; gibt 201 mit der Sitzung zurück
POST/device-user-logins/logoutDEVICES_COMMANDEine Abmeldung melden, anhand der loginId oder anhand von Gerät und Benutzer; gibt die betroffenen Sitzungen zurück

Sitzungen auflisten

Jeder Abfrageparameter ist optional. Ohne Filter gibt der Endpunkt die neuesten Sitzungen des Unternehmens zurück.

ParameterBeschreibung
assetIdNur Sitzungen auf diesem Asset. Nicht zusammen mit serialNumber.
serialNumberNur Sitzungen auf dem Asset mit dieser Seriennummer. Nicht zusammen mit assetId.
deviceUserIdNur Sitzungen des Gerätebenutzers mit dieser Nomid-ID, deviceUser.id in einer Sitzung.
externalUserIdNur Sitzungen des EXTERNAL-Gerätebenutzers mit dieser ID aus Ihrem System.
opentrue gibt nur noch offene Sitzungen zurück: nicht abgemeldet und nicht abgelaufen. Standardwert ist false, wodurch offene und geschlossene Sitzungen zurückgegeben werden.
fromNur Sitzungen, die zu oder nach diesem ISO-8601-Zeitpunkt begonnen haben, wie z. B. 2026-10-01T00:00:00Z.
toNur Sitzungen, die vor diesem ISO-8601-Zeitpunkt begonnen haben. from muss vor to liegen, und beide müssen zwischen 1970 und 9999 liegen.
limitMaximale Anzahl der zurückzugebenden Sitzungen. Standardwert ist 50; ein Wert über 200 gibt 200 zurück.

Die Sitzungen eines Assets umfassen auch diejenigen, die bei früheren Registrierungen derselben Hardware mit derselben Seriennummer erfasst wurden, sodass ein erneut registriertes Gerät seinen Verlauf behält. Ein unbekanntes Asset gibt 404 mit dem Code asset_not_found zurück; eine unbekannte deviceUserId oder externalUserId stimmt mit keiner Sitzung überein und gibt eine leere Liste zurück.

Anmeldung melden

Senden Sie ein Gerätefeld und ein Benutzerfeld. Das Senden von beiden oder keinem eines Paars gibt 400 zurück.

FeldMaximale LängeBeschreibung
serialNumber255Die Seriennummer des Geräts. Entweder dies oder assetId.
assetId255Die ID des Assets. Entweder dies oder serialNumber.
externalUserId100Ihre eigene ID für den Benutzer. Dessen erste Anmeldung erstellt einen Gerätebenutzer mit auth EXTERNAL; spätere Anmeldungen verwenden ihn wieder. Umgebende Leerzeichen werden entfernt und Steuerzeichen werden abgelehnt. Entweder dies oder deviceUserId.
deviceUserId36Die ID eines vorhandenen Nomid-Gerätebenutzers. Entweder dies oder externalUserId.
userName50Optionaler Anzeigename, wird nur zusammen mit externalUserId verwendet. Ein neuer EXTERNAL-Benutzer übernimmt ihn oder seine auf 50 Zeichen gekürzte externalUserId, wenn er fehlt. Eine spätere Anmeldung mit einem anderen userName benennt den Benutzer um.

Bewahren Sie die loginId aus der Antwort auf: Sie ist der Beleg, mit dem genau diese Sitzung abgemeldet wird. Geht eine Anmeldeantwort verloren und Sie senden die Anmeldung erneut, wird eine zweite Sitzung erfasst; eine Abmeldung nach Gerät und Benutzer schließt beide.

Abmeldung melden

Senden Sie entweder loginId oder ein Gerätefeld und ein Benutzerfeld, um jede offene Sitzung zu schließen, die die API für diesen Benutzer auf diesem Gerät geöffnet hat, einschließlich bei früheren Registrierungen derselben Hardware.

FeldMaximale LängeBeschreibung
loginId36Die Quittung, die die Anmeldung zurückgegeben hat. Ein damit gesendetes Geräte- oder Benutzerfeld muss das der Sitzung selbst sein, andernfalls gibt die Anfrage 409 zurück.
serialNumber255Die Seriennummer des Geräts. Nicht zusammen mit assetId.
assetId255Die ID des Assets. Nicht zusammen mit serialNumber.
externalUserId100Ihre eigene ID für den Benutzer. Nicht zusammen mit deviceUserId.
deviceUserId36Die Nomid-ID des Device Users. Nicht zusammen mit externalUserId.

Die Antwort ist 200 mit der Liste der betroffenen Sitzungen. Das Abmelden einer bereits geschlossenen Sitzung ändert nichts und gibt sie unverändert zurück, sodass eine Abmeldung sicher wiederholt werden kann. Eine Abmeldung nach Gerät und Benutzer gibt eine leere Liste zurück, wenn der Benutzer dort keine offene API-Sitzung hat.

Sitzungsfelder

Jeder Endpunkt gibt Sitzungen mit diesen Feldern zurück. Ein Feld ohne Wert wird weggelassen; open ist immer vorhanden. Zeitangaben sind ISO-8601-Zeitpunkte in UTC.

FeldBeschreibung
loginIdDie ID der Sitzung, die Quittung, die sie abmeldet.
deviceUserWer sich angemeldet hat: id (die Nomid-ID), name, auth (PIN, SSO oder EXTERNAL) und bei einem EXTERNAL-Benutzer externalUserId.
assetWo: assetId, serialNumber und name. Wird nur weggelassen, wenn das Gerät zu keinem Asset mehr gehört.
loginAtWann sich der Benutzer angemeldet hat. Wird nur bei einer Abmeldung weggelassen, die das Gerät ohne vorherige Anmeldung gemeldet hat.
logoutAtWann die Sitzung endete. Wird weggelassen, solange sie offen ist.
expiresAtWann die Sitzung von selbst abläuft, falls die Richtlinie einen Ablauf festlegt. Über die API gemeldete Sitzungen haben keinen.
opentrue, solange niemand die Sitzung abgemeldet hat und sie nicht abgelaufen ist.
loginSourceWer die Anmeldung gemeldet hat: DEVICE (der Nomid-Agent auf dem Gerät, eine PIN- oder SSO-Anmeldung) oder API (Ihr System über diese API).
logoutSourceWer die Abmeldung gemeldet hat: DEVICE, API oder EXPIRY, wenn die Sitzung abgelaufen ist. Wird weggelassen, solange die Sitzung offen ist.

Beispiele

Eine Anmeldung anhand der Seriennummer für einen Benutzer Ihres eigenen Systems melden.

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

Diese Sitzung mit ihrer loginId abmelden.

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

Oder jede offene API-Sitzung des Benutzers auf diesem Gerät schließen.

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

Die Sitzungen eines Geräts seit dem 1. Oktober abrufen. Dies ist eine abgelaufene PIN-Anmeldung auf dem Gerät.

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

Fehler: Eine vom Gerät gemeldete Sitzung

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

Fehler

Die Endpunkte für Device-User-Sitzungen antworten bei 400, 404 und 409 mit application/problem+json und einem code-Member zur Verzweigung; sie senden kein retryable-Member. Zwei Ausnahmen haben keinen code: 401 und 403 sowie ein 400 für einen ungültigen Abfrageparameter von GET /device-user-logins.

StatusCodeBedeutung
400invalid_argumentAnmeldung oder Abmeldung: Der Body fehlt oder ist kein gültiges JSON im dokumentierten Format, es wurde beides oder keines eines Geräte- oder Benutzerpaars übermittelt, bei einer Abmeldung ohne loginId fehlt das Gerät oder der Benutzer, oder externalUserId (über 100 Zeichen) oder userName (über 50 Zeichen) ist zu lang oder enthält Steuerzeichen. Im Detailfeld ist angegeben, was zutrifft.
400-Nur Auflisten: assetId und serialNumber wurden zusammen angegeben, from liegt nicht vor to, from oder to ist kein ISO-8601-Zeitstempel oder liegt außerhalb von 1970 bis 9999, limit liegt unter 1 oder open ist weder true noch false.
401-Der API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403-Dem Schlüssel fehlt DEVICES_READ (Auflisten) oder DEVICES_COMMAND (Anmeldung und Abmeldung).
404asset_not_foundKein Asset mit dieser assetId oder serialNumber im Unternehmen des Schlüssels vorhanden.
404device_user_not_foundKein Device User mit dieser deviceUserId im Unternehmen des Schlüssels vorhanden oder bei einer Abmeldung keiner mit dieser externalUserId, da dieser sich nie über die API angemeldet hat.
404login_not_foundKeine Sitzung mit dieser loginId im Unternehmen des Schlüssels vorhanden.
409no_managed_deviceDem Asset ist kein verwaltetes Gerät zugewiesen, daher kann darauf keine Anmeldung erfasst werden.
409device_user_disabledDer Device User ist deaktiviert.
409device_user_not_externalDer Device User mit dieser externalUserId verfügt nicht mehr über die Authentifizierung EXTERNAL.
409login_device_mismatchDie Sitzung mit dieser loginId fand nicht auf dem mitgesendeten Gerät statt.
409login_user_mismatchDie Sitzung mit dieser loginId gehört nicht zum mitgesendeten Benutzer.
409login_not_reported_by_apiDie Sitzung wurde vom Gerät gemeldet, eine PIN- oder SSO-Anmeldung über den Nomid-Agenten. Das Gerät beendet sie, nicht die API.

Ratenbegrenzungen

Diese Endpunkte unterliegen nicht dem Schreiblimit von 10 Anfragen pro Minute und Schlüssel, das sich Gerätebefehle, Richtlinienänderungen und Bereitstellungs-QR-Codes teilen. Implementieren Sie Ihren Client dennoch so, dass er bei einem 429-Fehler eine Wartezeit einlegt (Backoff).

MCP-Tool

Das schreibgeschützte MCP-Tool list_device_user_logins akzeptiert dieselben Filter als Argumente und erfordert DEVICES_READ. Bei „Sign in with Nomid“ erhält ein Benutzer, der nur bestimmte Richtlinien sehen darf, nur die Sitzungen auf Assets dieser Richtlinien. Das Melden von An- und Abmeldungen ist ausschließlich per REST möglich: Kein MCP-Tool führt dies aus.

list_device_user_loginsDEVICES_READDevice-User-Sitzungen, neueste zuerst, mit den Filtern von GET /device-user-logins: wer sich wann auf welchem Asset angemeldet hat und wer die An- und Abmeldung gemeldet hat. Richtet sich nach dem Richtlinienbereich des Aufrufers. Tool-Fehler, falls das Asset nicht gefunden wird.

MCP-Server

Wählen Sie Ihre Zeit

Wird geladen...
Buchungskalender öffnen