Gerätebefehle
Die Endpunkte für Gerätebefehle senden einen Befehl an ein verwaltetes Gerät. Sie erfordern einen API-Schlüssel mit der Berechtigung DEVICES_COMMAND oder DEVICES_COMMAND_DESTRUCTIVE für die vier destruktiven Befehle.
Übersicht
Jeder Aufruf wirkt sich auf genau ein Gerät aus, das durch seine assetId identifiziert wird, bei der es sich um den von GET /assets zurückgegebenen pathName handelt. Es gibt keinen Bulk-Endpunkt. Um mehrere Geräte zu steuern, führen Sie innerhalb des Ratenlimits einen Aufruf pro Gerät aus. Die Endpunkte tun dasselbe wie die MCP-Befehlswerkzeuge.
Der Schlüssel benötigt DEVICES_COMMAND und DEVICES_READ. change-policy benötigt außerdem POLICIES_READ. Die destruktiven Befehle benötigen stattdessen DEVICES_COMMAND_DESTRUCTIVE und DEVICES_READ. Senden Sie den Schlüssel im Header X-API-Key. Die REST-API akzeptiert keinen Authorization-Header.
Das Gerät muss registriert sein (Status ACTIVE, INACTIVE oder SYNCHRONIZING). Einige Befehle funktionieren nur bei einer bestimmten Geräteart, wie in der jeweiligen Beschreibung unten angegeben: Geräte mit Android Management (von Google verwaltet) oder Geräte, die vom Nomid-Agenten (AOSP) verwaltet werden. Jedes andere Gerät erhält 409. Eine Nachricht ist eine Push-Benachrichtigung an den Nomid-Agenten und erfordert ein registriertes Push-Token.
Endpunkte
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| POST | /assets/{assetId}/commands/lock | Den Gerätebildschirm sofort sperren. Nur Geräte mit Android Management. Kein Request-Body. |
| POST | /assets/{assetId}/commands/lost-mode | Das Gerät sperren und eine Nachricht mit optionalen Kontaktdaten auf dessen Sperrbildschirm anzeigen. Nur Geräte mit Android Management. |
| POST | /assets/{assetId}/commands/found | Modus für verlorene Geräte beenden. Wenn sich das Gerät nicht im Modus für verlorene Geräte befand, geschieht nichts und es wird kein Fehler zurückgegeben. Nur Geräte mit Android Management. Kein Request-Body. |
| POST | /assets/{assetId}/commands/message | Eine Nur-Text-Push-Benachrichtigung auf dem Gerät anzeigen. |
| POST | /assets/{assetId}/commands/status-report | Fordern Sie das Gerät auf, jetzt einen aktuellen Statusbericht zu senden. Der Bericht trifft später ein: Lesen Sie ihn mit GET /assets/ASSET_ID aus. Kein Request-Body. |
| POST | /assets/{assetId}/commands/location-update | Fordern Sie das Gerät auf, seinen aktuellen Standort jetzt zu melden. Der Standort trifft später ein: Lesen Sie ihn mit GET /assets/ASSET_ID aus. Kein Request-Body. |
| POST | /assets/{assetId}/commands/sync-policy | Senden Sie dem Gerät seine aktuelle Richtlinie erneut. Nur für Geräte, die vom Nomid-Agenten (AOSP) verwaltet werden: Android Management-Geräte erhalten Richtlinienänderungen automatisch und antworten mit 409. Kein Request-Body. |
| POST | /assets/{assetId}/commands/reboot | Starten Sie das Gerät jetzt neu. Die Person, die es gerade verwendet, wird unterbrochen und ungespeicherte Arbeit kann verloren gehen. Kein Request-Body. |
| POST | /assets/{assetId}/commands/shutdown | Schalten Sie das Gerät jetzt aus. Es kann nicht aus der Ferne wieder eingeschaltet werden. Nur für Geräte, die vom Nomid-Agenten (AOSP) verwaltet werden. Kein Request-Body. |
| POST | /assets/{assetId}/commands/launch-app | Öffnen Sie eine installierte App auf dem Gerät anhand des Paketnamens. Nur für Geräte, die vom Nomid-Agenten (AOSP) verwaltet werden. |
| POST | /assets/{assetId}/commands/clear-app-data | Löschen Sie alle Daten der angegebenen Apps (Konten, Einstellungen und Dateien), als wären sie gerade erst installiert worden. Dies kann nicht rückgängig gemacht werden. Nur für Android Management-Geräte. |
| POST | /assets/{assetId}/commands/change-policy | Verschieben Sie das Gerät in eine andere Richtlinie des Unternehmens. Das Gerät wendet die Apps, Einschränkungen und Einstellungen der neuen Richtlinie an, und alles, was nur in der aktuellen Richtlinie enthalten war, wird entfernt. Erfordert außerdem POLICIES_READ. |
Senden Sie Content-Type: application/json bei den Endpunkten lost-mode, message, launch-app, clear-app-data, change-policy und change-screen-lock-password. Die anderen Endpunkte erwarten keinen Body. Unbekannte Felder werden abgelehnt, und erforderliche Textfelder dürfen nicht leer sein.
Destruktive Befehle
Vier Befehle löschen Daten, entfernen oder ersetzen die Bildschirmsperre oder beenden die Verwaltung des Geräts. Mit einem API-Schlüssel werden sie ausgeführt, sobald die Anfrage akzeptiert wird. Es gibt keinen Genehmigungsschritt im Portal.
Sie erfordern einen API-Schlüssel mit DEVICES_COMMAND_DESTRUCTIVE und DEVICES_READ. Das Unternehmen muss außerdem destruktive Befehle unter „KI-Agent-Zugriff“ im Portal aktivieren. Diese Einstellung ist standardmäßig deaktiviert und erfordert, dass auch Gerätebefehle aktiviert sind. Ohne dies gibt die Anfrage 403 mit dem Code forbidden zurück.
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| POST | /assets/{assetId}/commands/wipe | Entfernen Sie das Gerät aus der Verwaltung und löschen Sie dessen verwaltete Daten. Ein unternehmenseigenes Gerät wird auf die Werkseinstellungen zurückgesetzt: Jede App und alle Daten darauf werden gelöscht. Bei einem Gerät in Privatbesitz mit einem Arbeitsprofil werden nur das Arbeitsprofil und dessen Apps und Daten entfernt; private Apps und Daten bleiben erhalten. Nicht umkehrbar. Kein Request-Body. |
| POST | /assets/{assetId}/commands/reset-screen-lock | Entfernen Sie die Bildschirmsperre des Geräts (PIN, Muster oder Passwort), sodass es ohne Sperre entsperrt werden kann. Nur für Android Management-Geräte. Kein Request-Body. |
| POST | /assets/{assetId}/commands/change-screen-lock-password | Legen Sie ein neues Passwort für die Bildschirmsperre fest. Das Gerät sperrt sich und kann nur mit dem neuen Passwort entsperrt werden. Nur für Android Management-Geräte. |
| POST | /assets/{assetId}/commands/relinquish-ownership | Geben Sie ein unternehmenseigenes Gerät für seinen Benutzer frei. Das Arbeitsprofil und dessen Daten werden entfernt und das Gerät wird nicht mehr verwaltet. Nicht umkehrbar. Kein Request-Body. |
change-screen-lock-password nimmt das neue Passwort in newPassword entgegen. Nomid speichert, gibt zurück oder protokolliert es zu keinem Zeitpunkt.
Request-Bodys
Request-Body für den Modus für verlorene Geräte
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| message | Ja | Auf dem Sperrbildschirm angezeigter Text. Bis zu 4096 Zeichen. |
| phoneNumber | Nein | Auf dem Sperrbildschirm angezeigte Kontakt-Telefonnummer. Bis zu 4096 Zeichen. |
| Nein | Auf dem Sperrbildschirm angezeigte Kontakt-E-Mail-Adresse. Muss eine gültige E-Mail-Adresse sein, bis zu 320 Zeichen. | |
| streetAddress | Nein | Auf dem Sperrbildschirm angezeigte Straßenadresse des Kontakts. Bis zu 4096 Zeichen. |
| organization | Nein | Auf dem Sperrbildschirm angezeigter Organisationsname. Bis zu 4096 Zeichen. |
Request-Body für Nachrichten
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| title | Ja | Benachrichtigungstitel. Bis zu 60 Zeichen. |
| body | Ja | Benachrichtigungstext. Bis zu 500 Zeichen. |
Request-Body zum Starten der App
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| packageName | Ja | Paketname der installierten App, die geöffnet werden soll, z. B. com.example.app. |
Request-Body zum Löschen von App-Daten
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| packageNames | Ja | Array von 1 bis 20 Paketnamen, z. B. com.example.app, deren Daten gelöscht werden. |
Request-Body zum Ändern der Richtlinie
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| policyId | Ja | Die neue Richtlinie, anhand ihrer policyId (der von GET /policies zurückgegebene pathName). |
Request-Body zum Ändern des Passworts der Bildschirmsperre
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| newPassword | Ja | Das neue Passwort für die Bildschirmsperre, 4 bis 128 Zeichen, ohne führende oder nachfolgende Leerzeichen. Es wird niemals gespeichert, zurückgegeben oder protokolliert. |
Beispiel: Eine Nachricht senden
Ersetzen Sie die Asset-ID durch einen pathName aus GET /assets und bewahren Sie den Schlüssel in einer Umgebungsvariable auf.
curl -X POST "https://api.nomid.tech/emm/api/v1/assets/k3x9m2pa/commands/message" \
-H "X-API-Key: $NOMID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Please return this device", "body": "Bring it to the IT desk by 5 pm."}' {
"assetId": "k3x9m2pa",
"type": "NOTIFICATION_MESSAGE",
"status": "SUCCESS",
"createdAt": "2026-10-06T14:30:00Z"
} Eine 200-Antwort bedeutet, dass der Befehl erstellt wurde. Das status-Feld gibt den Zustand des Befehls zum Zeitpunkt der Rückgabe der Anfrage an. Bei einer Nachricht bedeutet SUCCESS, dass der Push zur Zustellung angenommen wurde, nicht, dass der Benutzer ihn gesehen hat. Fragen Sie anschließend mit GET /assets/ASSET_ID/commands nach.
Beispiel: Ein Gerät sperren
curl -X POST "https://api.nomid.tech/emm/api/v1/assets/k3x9m2pa/commands/lock" \
-H "X-API-Key: $NOMID_API_KEY" {
"assetId": "k3x9m2pa",
"type": "LOCK",
"status": "IN_PROGRESS",
"createdAt": "2026-10-06T14:30:00Z"
} lock und lost-mode geben IN_PROGRESS zurück, solange das Gerät den Befehl noch nicht bestätigt hat. Der Befehlsverlauf zeigt SUCCESS an, sobald dies geschieht. Der Endpunkt lock nimmt keinen Body entgegen.
Beispiel: Ein Gerät löschen
curl -X POST "https://api.nomid.tech/emm/api/v1/assets/k3x9m2pa/commands/wipe" \
-H "X-API-Key: $NOMID_API_KEY" {
"assetId": "k3x9m2pa",
"type": "WIPE_COMPANY_DATA",
"status": "IN_PROGRESS"
} Das Löschen eines Android Management-Geräts antwortet mit IN_PROGRESS ohne createdAt. Überprüfen Sie den Befehlsverlauf, um den Vorgang zu verfolgen.
Antworten und was zu tun ist
Die Wiederholungsregeln sind wichtig. Das Wiederholen eines Befehls mit unbekanntem Ausgang kann dazu führen, dass er zweimal zugestellt wird.
| Status | Bedeutung | Was zu tun ist |
|---|---|---|
| 200 | Der Befehl wurde erstellt und in die Warteschlange eingereiht. | Lesen Sie das status-Feld aus. Es bleibt IN_PROGRESS, bis das Gerät den Befehl bestätigt; prüfen Sie daher den Befehlsverlauf auf SUCCESS. Einige Befehle, wie z. B. ein Neustart, das Löschen oder die Eigentumsaufgabe auf einem Gerät mit Android Management, antworten mit IN_PROGRESS ohne createdAt. |
| 202 | UNCONFIRMED. Nomid kann nicht feststellen, ob der Befehl das Gerät erreicht hat, beispielsweise weil beim Anbieter ein Timeout oder ein seiteninterner Fehler aufgetreten ist. Der Body ist das normale Ergebnisobjekt mit dem Status UNCONFIRMED und Hinweisen in detail. Außerhalb der Endpunkte lock, lost-mode, found und message enthält es niemals createdAt. | Nicht erneut senden. Überprüfen Sie zuerst den Befehlsverlauf des Geräts und fragen Sie den Benutzer, bevor Sie den Befehl erneut senden. Bei einer Nachricht kann der Verlauf ERROR anzeigen, selbst wenn die Benachrichtigung angezeigt wurde. Der Befehl wird möglicherweise erst angezeigt, wenn das Gerät ihn bestätigt. |
| 400 | Die Validierung des Anfrage-Bodys ist fehlgeschlagen oder ein Parameter ist ungültig. | Korrigieren Sie die im Array errors oder in detail aufgeführten Felder. Es wurde kein Befehl gesendet. |
| 401 | Der API-Schlüssel fehlt, ist ungültig oder abgelaufen. | Senden Sie einen gültigen Schlüssel im X-API-Key-Header. |
| 403 | Der Schlüssel verfügt nicht über die für den Befehl erforderliche Berechtigung, oder das Unternehmen hat destruktive Befehle nicht aktiviert. | Verwenden Sie einen Schlüssel, der mit DEVICES_COMMAND und DEVICES_READ sowie POLICIES_READ für change-policy oder mit DEVICES_COMMAND_DESTRUCTIVE und DEVICES_READ für einen destruktiven Befehl erstellt wurde. Überprüfen Sie bei destruktiven Befehlen auch die Unternehmenseinstellung unter „Zugriff für KI-Agenten“ im Portal. |
| 404 | Im Unternehmen des Schlüssels existiert kein Asset mit dieser ID. Ein Asset eines anderen Unternehmens gibt ebenfalls 404 zurück. Bei den Endpunkten lock, lost-mode, found und message ist der Body leer. Bei den anderen Endpunkten handelt es sich um Problemdetails mit dem Code not_found, und change-policy gibt dies auch für eine unbekannte Richtlinie zurück. | Gleichen Sie die Asset-ID mit GET /assets und für change-policy die Richtlinien-ID mit GET /policies ab. |
| 409 | Das Gerät kann diesen Befehl nicht annehmen: Es verfügt über kein verwaltetes Gerät, weist einen unzulässigen Status oder einen nicht unterstützten Gerätetyp auf oder hat bei einer Nachricht kein gültiges Push-Token. change-policy gibt auch 409 zurück, wenn das Gerät diese Richtlinie bereits verwendet. Wird auch zurückgegeben, wenn der Anbieter meldet, dass das Gerät nicht mehr verwaltet wird. Nomid markiert das Gerät daraufhin als gelöscht. | Ein erneuter Versuch schlägt auf dieselbe Weise fehl, bis sich der Zustand des Geräts ändert. Wiederholen Sie den Vorgang nicht in einer Schleife. |
| 422 | Der Anbieter hat die Anfrage ausgewertet und sie für dieses Gerät oder diese Nachricht abgelehnt oder gemeldet, dass der Befehl bereits fehlgeschlagen ist. | Wiederholen Sie den Vorgang nicht mit denselben Argumenten. |
| 429 | Das Befehls-Ratenlimit wurde überschritten. Ein Retry-After-Header gibt die Sekunden an, bis das Zeitfenster zurückgesetzt wird. | Warten Sie die Retry-After-Zeit ab und versuchen Sie es dann erneut. |
| 500 | Unerwarteter Fehler. Außerhalb der Endpunkte lock, lost-mode, found und message enthält der Body den Code internal_error und retryable false. Ob der Befehl das Gerät erreicht hat, ist unbekannt. | Nicht sofort erneut senden. Überprüfen Sie zuerst das Asset und dessen Befehlsverlauf. |
| 502 | Android Management hat den Befehl aus einem Grund abgelehnt, der nicht dieses Gerät betrifft. Das Feld retryable gibt an, ob ein erneuter Versuch unternommen werden soll. Nachrichten geben niemals 502 zurück. | Wenn retryable true ist (der Anbieter drosselt oder hat einen vorübergehenden Konflikt gemeldet), versuchen Sie es nach einer kurzen Verzögerung erneut. Wenn es false ist, liegt ein Problem mit der Android Management-Konfiguration des Unternehmens vor: Versuchen Sie es nicht erneut und wenden Sie sich an den Support. |
| 503 | Nicht gesendet. Die Anfrage ist innerhalb von Nomid fehlgeschlagen, bevor etwas versendet wurde. retryable ist immer true. | Sicher für einen erneuten Versuch. Es wurde nichts zugestellt, daher kann ein erneuter Versuch den Befehl nicht duplizieren. |
Fehler-Bodys
Fehler von den Befehls-Endpunkten verwenden application/problem+json (RFC 9457). Bei den Endpunkten lock, lost-mode, found und message geben 401 und 429 ein kleines JSON-Objekt mit error, message und status zurück, 404 hat keinen Body, und nur 502 und 503 fügen ein boolesches retryable-Feld hinzu. Bei den anderen Endpunkten ist jeder Fehler außer 401 eine Problem-Details-Antwort mit einem code-Feld, wie not_found, unsupported, forbidden, invalid_arguments oder rate_limited, und 429, 500, 502 und 503 enthalten ebenfalls retryable. Eine 202-Antwort ist kein Fehler: Sie enthält das normale Ergebnisobjekt.
Beispiel für eine 202-Antwort
HTTP/1.1 202 Accepted
{
"assetId": "k3x9m2pa",
"type": "LOCK",
"status": "UNCONFIRMED",
"detail": "The command's outcome is unknown. Check the device's command history (list_device_commands or GET /api/v1/assets/{assetId}/commands) before retrying; it may only appear once the device acknowledges it."
} Beispiel für eine 503-Antwort
HTTP/1.1 503 Service Unavailable
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Service Unavailable",
"status": 503,
"detail": "Command was not sent; it is safe to retry.",
"instance": "/emm/api/v1/assets/k3x9m2pa/commands/message",
"retryable": true
} Beispiel für eine 404-Antwort von einem anderen Endpunkt als lock, lost-mode, found und message
HTTP/1.1 404 Not Found
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Not Found",
"status": 404,
"detail": "No device found with assetId: k3x9m2pa",
"instance": "/emm/api/v1/assets/k3x9m2pa/commands/reboot",
"code": "not_found"
} Ratenlimit
Befehle sind auf 10 pro Minute pro API-Schlüssel begrenzt, einschließlich destruktiver Befehle. Dasselbe Budget wird über REST oder MCP mit den MCP-Befehlswerkzeugen, mit Richtlinienänderungen (jeder Propose- und Apply-Aufruf) und mit Bereitstellungs-QR-Codes geteilt. Über REST erhalten Anfragen, die das Limit überschreiten, HTTP 429 mit einem Retry-After-Header.
Bei den Endpunkten lock, lost-mode, found und message verbrauchen nur Schlüssel mit DEVICES_COMMAND dieses Budget, und eine Anfrage mit einem ungültigen Body oder einer unbekannten Asset-ID zählt trotzdem, da das Limit vor der Validierung der Anfrage angewendet wird. Die anderen Befehls-Endpunkte, Aufrufe zur Richtlinienänderung und Anfragen für Bereitstellungs-QR-Codes verbrauchen es erst, nachdem die Anfrage die Berechtigungsprüfungen und die Argumentvalidierung bestanden hat.
Audit-Trail
Jeder Befehl wird im Befehlsverlauf des Geräts im Nomid-Portal aufgezeichnet und dem API-Schlüssel zugeordnet, der ihn gesendet hat, nicht einer Person. Der Eintrag zeigt api-key, die Schlüssel-ID und das Schlüsselpräfix. Der von GET /assets/ASSET_ID/commands und vom MCP-Werkzeug list_device_commands zurückgegebene Verlauf enthält nur type, status, createdAt, feedbackAt und outcome, nicht jedoch, wer den Befehl gesendet hat.