Polecenia urządzeń
Punkty końcowe poleceń urządzeń wysyłają polecenie do jednego zarządzanego urządzenia. Wymagają klucza API z uprawnieniem DEVICES_COMMAND lub DEVICES_COMMAND_DESTRUCTIVE w przypadku czterech poleceń destrukcyjnych.
Przegląd
Każde wywołanie dotyczy dokładnie jednego urządzenia, identyfikowanego przez jego assetId, który jest wartością pathName zwracaną przez GET /assets. Nie ma punktu końcowego do operacji zbiorczych. Aby wysłać polecenie do kilku urządzeń, wykonaj jedno wywołanie na urządzenie w ramach limitu żądań. Punkty końcowe działają tak samo jak narzędzia poleceń MCP.
Klucz wymaga uprawnień DEVICES_COMMAND i DEVICES_READ. change-policy wymaga również POLICIES_READ. Polecenia destrukcyjne wymagają zamiast tego DEVICES_COMMAND_DESTRUCTIVE i DEVICES_READ. Wyślij klucz w nagłówku X-API-Key. Interfejs REST API nie akceptuje nagłówka Authorization.
Urządzenie musi być zarejestrowane (stan ACTIVE, INACTIVE lub SYNCHRONIZING). Niektóre polecenia działają tylko na jednym typie urządzeń, zgodnie z poniższymi opisami: urządzenia z Android Management (zarządzane przez Google) lub urządzenia zarządzane przez agenta Nomid (AOSP). W przypadku każdego innego urządzenia zwracany jest kod 409. Wiadomość jest powiadomieniem push wysyłanym do agenta Nomid i wymaga zarejestrowanego tokenu push.
Punkty końcowe
| Metoda | Punkt końcowy | Opis |
|---|---|---|
| POST | /assets/{assetId}/commands/lock | Natychmiast zablokuj ekran urządzenia. Tylko urządzenia Android Management. Brak treści żądania. |
| POST | /assets/{assetId}/commands/lost-mode | Zablokuj urządzenie i wyświetl komunikat, z opcjonalnymi danymi kontaktowymi, na jego ekranie blokady. Tylko urządzenia Android Management. |
| POST | /assets/{assetId}/commands/found | Zakończ tryb utracony. Jeśli urządzenie nie było w trybie utraconym, nic się nie dzieje i żaden błąd nie jest zwracany. Tylko urządzenia Android Management. Brak treści żądania. |
| POST | /assets/{assetId}/commands/message | Wyświetl powiadomienie push w postaci zwykłego tekstu na urządzeniu. |
| POST | /assets/{assetId}/commands/status-report | Zażądaj od urządzenia natychmiastowego wysłania nowego raportu o stanie. Raport nadejdzie później: odczytaj go za pomocą GET /assets/ASSET_ID. Brak treści żądania. |
| POST | /assets/{assetId}/commands/location-update | Zażądaj od urządzenia natychmiastowego zgłoszenia bieżącej lokalizacji. Lokalizacja nadejdzie później: odczytaj ją za pomocą GET /assets/ASSET_ID. Brak treści żądania. |
| POST | /assets/{assetId}/commands/sync-policy | Wyślij urządzeniu ponownie jego bieżące zasady. Tylko urządzenia zarządzane przez agenta Nomid (AOSP): urządzenia Android Management otrzymują zmiany zasad automatycznie i zwracają kod 409. Brak treści żądania. |
| POST | /assets/{assetId}/commands/reboot | Uruchom ponownie urządzenie teraz. Praca osoby, która go używa, zostanie przerwana, a niezapisane dane mogą zostać utracone. Brak treści żądania. |
| POST | /assets/{assetId}/commands/shutdown | Wyłącz urządzenie teraz. Nie można go włączyć ponownie zdalnie. Tylko urządzenia zarządzane przez agenta Nomid (AOSP). Brak treści żądania. |
| POST | /assets/{assetId}/commands/launch-app | Otwórz zainstalowaną aplikację na urządzeniu według nazwy pakietu. Tylko urządzenia zarządzane przez agenta Nomid (AOSP). |
| POST | /assets/{assetId}/commands/clear-app-data | Usuń wszystkie dane podanych aplikacji (konta, ustawienia i pliki), tak jakby dopiero zostały zainstalowane. Działania nie można cofnąć. Tylko urządzenia Android Management. |
| POST | /assets/{assetId}/commands/change-policy | Przenieś urządzenie do innych zasad firmy. Urządzenie zastosuje aplikacje, ograniczenia i ustawienia nowych zasad, a wszystko, co znajdowało się wyłącznie w bieżących zasadach, zostanie usunięte. Wymaga również uprawnienia POLICIES_READ. |
Przesyłaj Content-Type: application/json wraz z punktami końcowymi lost-mode, message, launch-app, clear-app-data, change-policy oraz change-screen-lock-password. Pozostałe punkty końcowe nie przyjmują treści. Nieznane pola są odrzucane, a wymagane pola tekstowe nie mogą być puste.
Polecenia destrukcyjne
Cztery polecenia usuwają dane, zdejmują lub zmieniają blokadę ekranu bądź kończą zarządzanie urządzeniem. W przypadku użycia klucza API są one wykonywane natychmiast po zaakceptowaniu żądania. W portalu nie ma etapu zatwierdzania.
Wymagają one klucza API z uprawnieniami DEVICES_COMMAND_DESTRUCTIVE oraz DEVICES_READ. Firma musi również włączyć polecenia destrukcyjne w sekcji dostępu agenta AI w portalu. To ustawienie jest domyślnie wyłączone i wymaga także włączenia poleceń urządzeń. Bez tego żądanie zwraca kod 403 z błędem forbidden.
| Metoda | Punkt końcowy | Opis |
|---|---|---|
| POST | /assets/{assetId}/commands/wipe | Usuń urządzenie z zarządzania i wyczyść jego zarządzane dane. Urządzenie firmowe zostanie przywrócone do ustawień fabrycznych: wszystkie aplikacje i dane na nim zostaną usunięte. Na urządzeniu prywatnym z profilem służbowym usuwany jest tylko profil służbowy oraz jego aplikacje i dane; prywatne aplikacje i dane pozostają nienaruszone. Działanie nieodwracalne. Brak treści żądania. |
| POST | /assets/{assetId}/commands/reset-screen-lock | Usuń blokadę ekranu urządzenia (PIN, wzór lub hasło), aby można je było odblokować bez niej. Tylko urządzenia Android Management. Brak treści żądania. |
| POST | /assets/{assetId}/commands/change-screen-lock-password | Ustaw nowe hasło blokady ekranu. Urządzenie zablokuje się i tylko nowe hasło je odblokuje. Tylko urządzenia Android Management. |
| POST | /assets/{assetId}/commands/relinquish-ownership | Przekaż urządzenie firmowe jego użytkownikowi. Profil służbowy i jego dane zostaną usunięte, a urządzenie przestanie być zarządzane. Działanie nieodwracalne. Brak treści żądania. |
Polecenie change-screen-lock-password przyjmuje nowe hasło w newPassword. Nomid nigdy go nie przechowuje, nie zwraca ani nie zapisuje w dziennikach.
Treści żądań
Treść żądania trybu utraconego
| Pole | Wymagane | Opis |
|---|---|---|
| message | Tak | Tekst wyświetlany na ekranie blokady. Do 4096 znaków. |
| phoneNumber | Nie | Numer telefonu kontaktowego wyświetlany na ekranie blokady. Do 4096 znaków. |
| Nie | Adres e-mail do kontaktu wyświetlany na ekranie blokady. Musi być prawidłowym adresem e-mail, do 320 znaków. | |
| streetAddress | Nie | Adres do kontaktu wyświetlany na ekranie blokady. Do 4096 znaków. |
| organization | Nie | Nazwa organizacji wyświetlana na ekranie blokady. Do 4096 znaków. |
Treść żądania wiadomości
| Pole | Wymagane | Opis |
|---|---|---|
| title | Tak | Tytuł powiadomienia. Do 60 znaków. |
| body | Tak | Treść powiadomienia. Maksymalnie 500 znaków. |
Treść żądania uruchomienia aplikacji
| Pole | Wymagane | Opis |
|---|---|---|
| packageName | Tak | Nazwa pakietu zainstalowanej aplikacji do otwarcia, na przykład com.example.app. |
Treść żądania wyczyszczenia danych aplikacji
| Pole | Wymagane | Opis |
|---|---|---|
| packageNames | Tak | Tablica od 1 do 20 nazw pakietów, na przykład com.example.app, których dane mają zostać wyczyszczone. |
Treść żądania zmiany zasad
| Pole | Wymagane | Opis |
|---|---|---|
| policyId | Tak | Nowe zasady według parametru policyId (wartość pathName zwracana przez GET /policies). |
Treść żądania zmiany hasła blokady ekranu
| Pole | Wymagane | Opis |
|---|---|---|
| newPassword | Tak | Nowe hasło blokady ekranu, od 4 do 128 znaków, bez spacji początkowych i końcowych. Nigdy nie jest przechowywane, zwracane ani rejestrowane. |
Przykład: wyślij wiadomość
Zastąp identyfikator zasobu (asset id) wartością pathName z GET /assets i przechowuj klucz w zmiennej środowiskowej.
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"
} Odpowiedź 200 oznacza, że polecenie zostało utworzone. Pole status określa stan polecenia w momencie zwrócenia żądania. W przypadku wiadomości SUCCESS oznacza, że powiadomienie push zostało zaakceptowane do doręczenia, a nie, że użytkownik je wyświetlił. Sprawdź dalsze informacje za pomocą GET /assets/ASSET_ID/commands.
Przykład: zablokuj urządzenie
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"
} Blokada i tryb utracony (lost mode) zwracają IN_PROGRESS, dopóki urządzenie nie potwierdzi polecenia. Gdy to nastąpi, historia poleceń pokazuje SUCCESS. Punkt końcowy lock nie przyjmuje treści żądania.
Przykład: wyczyszczenie urządzenia
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"
} Wyczyszczenie urządzenia zarządzanego przez Android Management odpowiada statusem IN_PROGRESS bez pola createdAt. Sprawdź historię poleceń, aby śledzić postęp.
Odpowiedzi i dalsze kroki
Zasady ponawiania mają znaczenie. Ponowienie próby wykonania polecenia, którego wynik jest nieznany, może spowodować jego dwukrotne doręczenie.
| Status | Znaczenie | Co zrobić |
|---|---|---|
| 200 | Polecenie zostało utworzone i dodane do kolejki. | Odczytaj pole status. Ma ono wartość IN_PROGRESS, dopóki urządzenie nie potwierdzi polecenia, dlatego sprawdź historię poleceń pod kątem statusu SUCCESS. Niektóre polecenia, takie jak ponowne uruchomienie, wyczyszczenie danych lub zrzeczenie się prawa własności na urządzeniu z Android Management, odpowiadają IN_PROGRESS bez createdAt. |
| 202 | UNCONFIRMED. Nomid nie jest w stanie stwierdzić, czy polecenie dotarło do urządzenia, na przykład dlatego, że upłynął limit czasu dostawcy lub wystąpił błąd po jego stronie. Treść to standardowy obiekt wynikowy ze statusem UNCONFIRMED i wskazówkami w polu detail. Poza punktami końcowymi lock, lost-mode, found i message nigdy nie zawiera createdAt. | Nie wysyłaj ponownie. Najpierw sprawdź historię poleceń urządzenia i zapytaj użytkownika przed ponownym wysłaniem. W przypadku wiadomości historia może pokazywać ERROR, nawet jeśli powiadomienie zostało wyświetlone. Polecenie może pojawić się dopiero wtedy, gdy urządzenie je potwierdzi. |
| 400 | Treść żądania nie przeszła walidacji lub parametr jest nieprawidłowy. | Popraw pola wymienione w tablicy errors lub w detail. Żadne polecenie nie zostało wysłane. |
| 401 | Brak klucza API, klucz jest nieprawidłowy lub wygasł. | Prześlij prawidłowy klucz w nagłówku X-API-Key. |
| 403 | Klucz nie ma uprawnień wymaganych przez polecenie lub – w przypadku polecenia destrukcyjnego – firma nie włączyła poleceń destrukcyjnych. | Użyj klucza utworzonego z uprawnieniami DEVICES_COMMAND i DEVICES_READ, a także POLICIES_READ dla change-policy, bądź z DEVICES_COMMAND_DESTRUCTIVE i DEVICES_READ dla polecenia destrukcyjnego. W przypadku poleceń destrukcyjnych sprawdź również ustawienie firmowe w sekcji AI agent access w portalu. |
| 404 | W firmie powiązanej z kluczem nie istnieje zasób o tym identyfikatorze. Zasób z innej firmy również zwraca 404. W punktach końcowych lock, lost-mode, found i message treść odpowiedzi jest pusta. W pozostałych punktach końcowych jest to obiekt problem details z kodem not_found; change-policy zwraca go również w przypadku nieznanej polityki. | Sprawdź identyfikator zasobu za pomocą GET /assets, a w przypadku change-policy identyfikator polityki za pomocą GET /policies. |
| 409 | Urządzenie nie może przyjąć tego polecenia: brak zarządzanego urządzenia, nieodpowiedni status, nieobsługiwany typ urządzenia lub – w przypadku wiadomości – brak prawidłowego tokenu push. change-policy zwraca również kod 409, gdy urządzenie korzysta już z tej polityki. Zwracany również wtedy, gdy dostawca zgłosi, że urządzenie nie jest już zarządzane. Nomid oznacza wówczas urządzenie jako usunięte. | Ponowienie próby zakończy się takim samym błędem, dopóki stan urządzenia się nie zmieni. Nie ponawiaj prób w pętli. |
| 422 | Dostawca przetworzył żądanie i odrzucił je dla tego urządzenia lub wiadomości, albo zgłosił, że polecenie już zakończyło się niepowodzeniem. | Nie ponawiaj próby z tymi samymi argumentami. |
| 429 | Przekroczono limit szybkości poleceń. Nagłówek Retry-After podaje liczbę sekund do zresetowania okna. | Poczekaj na czas określony w Retry-After, a następnie spróbuj ponownie. |
| 500 | Nieoczekiwany błąd. Poza punktami końcowymi lock, lost-mode, found i message treść odpowiedzi zawiera kod internal_error oraz retryable o wartości false. To, czy polecenie dotarło do urządzenia, jest nieznane. | Nie wysyłaj ponownie od razu. Najpierw sprawdź zasób i jego historię poleceń. |
| 502 | Usługa Android Management odrzuciła polecenie z powodu niezwiązanego z tym urządzeniem. Pole retryable informuje, czy należy ponowić próbę. Wiadomości nigdy nie zwracają 502. | Jeśli retryable ma wartość true (dostawca ogranicza przepustowość lub zgłosił tymczasowy konflikt), ponów próbę po krótkim opóźnieniu. Jeśli ma wartość false, konfiguracja usługi Android Management w firmie ma problem: nie ponawiaj próby i skontaktuj się z pomocą techniczną. |
| 503 | Nie wysłano. Żądanie zakończyło się niepowodzeniem wewnątrz Nomid, zanim cokolwiek zostało wysłane. retryable ma zawsze wartość true. | Można bezpiecznie ponowić próbę. Nic nie zostało dostarczone, więc ponowna próba nie zduplikuje polecenia. |
Treści błędów
Błędy z punktów końcowych poleceń używają application/problem+json (RFC 9457). W punktach końcowych lock, lost-mode, found i message kody 401 oraz 429 zwracają mały obiekt JSON z polami error, message i status, 404 nie ma treści, a tylko 502 i 503 dodają logiczne pole retryable. W pozostałych punktach końcowych każdy błąd oprócz 401 jest obiektem szczegółów problemu z polem code, takim jak not_found, unsupported, forbidden, invalid_arguments lub rate_limited, a 429, 500, 502 i 503 zawierają również retryable. Odpowiedź 202 nie jest błędem: zawiera standardowy obiekt wyniku.
Przykładowa odpowiedź 202
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."
} Przykładowa odpowiedź 503
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
} Przykładowa odpowiedź 404 z punktu końcowego innego niż lock, lost-mode, found i 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"
} Limit szybkości
Polecenia są ograniczone do 10 na minutę na klucz API, wliczając polecenia destrukcyjne. Ten sam budżet jest współdzielony z narzędziami poleceń MCP, ze zmianami zasad (każde wywołanie propose i apply) oraz z kodami QR do aprowizacji, za pośrednictwem REST lub MCP. W przypadku REST żądania przekraczające limit otrzymują HTTP 429 z nagłówkiem Retry-After.
W punktach końcowych lock, lost-mode, found i message tylko klucze z uprawnieniem DEVICES_COMMAND zużywają ten budżet, a żądanie z nieprawidłową treścią lub nieznanym identyfikatorem zasobu nadal się liczy, ponieważ limit jest stosowany przed walidacją żądania. Pozostałe punkty końcowe poleceń, wywołania zmian zasad i żądania kodów QR do aprowizacji zużywają go dopiero po pomyślnym przejściu kontroli uprawnień i walidacji argumentów.
Ścieżka audytu
Każde polecenie jest rejestrowane w historii poleceń urządzenia w portalu Nomid i przypisywane do klucza API, który je wysłał, a nie do osoby. Wpis pokazuje api-key, identyfikator klucza i prefiks klucza. Historia zwracana przez GET /assets/ASSET_ID/commands oraz przez narzędzie MCP list_device_commands zawiera tylko type, status, createdAt, feedbackAt i outcome, bez informacji o tym, kto wysłał polecenie.