Richtlinienänderungen
Einstellungen einer Android-Richtlinie ändern, eine Richtlinie als Kopie einer anderen erstellen oder eine Richtlinie auf eine frühere Version zurücksetzen. Jede Änderung wird überprüft, bevor sie angewendet wird.
So funktioniert es
Jede Änderung erfolgt in zwei Schritten. Zuerst schlagen Sie sie vor: Die API erfasst einen Vorschlag und gibt dessen Änderungsliste zurück, mit dem aktuellen und neuen Wert jeder Einstellung, den Auswirkungen und dem Zeitpunkt, zu dem der Vorschlag abläuft. An der Richtlinie ändert sich vorerst nichts. Anschließend wenden Sie den Vorschlag anhand seiner proposalId an, nachdem die zuständige Person die Änderungsliste überprüft hat.
Nur der API-Schlüssel, der einen Vorschlag erstellt hat, kann ihn lesen oder anwenden. Bei einer OAuth-Verbindung können dies nur dieselbe Verbindung und derselbe Benutzer. Ein Vorschlag läuft 10 Minuten nach seiner Erstellung ab; das Feld expiresAt gibt den genauen Zeitpunkt an.
Nur Android-Richtlinien können auf diese Weise geändert werden. Von Nomid verwaltete Richtlinien können dies nicht. Das Erstellen einer Richtlinie erfordert außerdem, dass das Unternehmen mit Android Enterprise verbunden ist.
Voraussetzungen
- Ein API-Schlüssel mit der Berechtigung POLICIES_WRITE (Richtlinienänderungen), kombiniert mit POLICIES_READ. Nur ein Portal-Benutzer mit der Berechtigung zum Bearbeiten von Richtlinien kann einen Schlüssel mit POLICIES_WRITE erstellen. Erforderlich für die vier POST-Endpunkte und die MCP-Tools für Richtlinienänderungen.
- Die Unternehmenseinstellung „Richtlinienänderungen“ unter „KI-Agenten-Zugriff“ im Portal muss aktiviert sein. Sie ist standardmäßig deaktiviert. Solange sie deaktiviert ist, gibt jeder Vorschlags- und Anwendungsaufruf den Status 403 zurück. Das Lesen von Einstellungen, Revisionen und Vorschlägen erfordert lediglich POLICIES_READ.
- MCP-Clients, die sich statt mit einem API-Schlüssel über „Mit Nomid anmelden“ verbinden, benötigen den Scope mcp:policies:write.
Endpunkte
Alle Pfade sind relativ zur API-Basis-URL und erfordern den X-API-Key-Header. Anfragetexte sind im JSON-Format.
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /policies/{policyId}/settings | Die bearbeitbaren Einstellungen der Richtlinie, jeweils mit aktuellem Wert, zulässigen Werten, Gruppe und der Angabe, ob eine Änderung schwerwiegende Auswirkungen hat. Gibt außerdem die Richtlinienversion, deviceCount und die Information zurück, ob die Richtlinie bearbeitbar ist. |
| GET | /policies/{policyId}/revisions | Die gespeicherten Revisionen der Richtlinie, die neuesten zuerst, mit Angabe darüber, wann und von wem sie jeweils gespeichert wurden. limit ist optional, von 1 bis 100, Standardwert 20. |
| GET | /policy-proposals/{proposalId} | Ein von diesem Schlüssel erstellter Vorschlag mit seiner Änderungsliste und seinem Status: PENDING, EXECUTING, SUCCEEDED, FAILED, UNCONFIRMED oder EXPIRED. |
| POST | /policies/{policyId}/changes | Schlagen Sie Einstellungsänderungen für eine bestehende Richtlinie vor. Gibt 201 mit dem Vorschlag zurück. |
| POST | /policies | Schlagen Sie eine neue Richtlinie als Kopie einer bestehenden vor, mit optionalen Einstellungsänderungen. Ohne Änderungen wird die Richtlinie dupliziert. Gibt 201 mit dem Vorschlag zurück. |
| POST | /policies/{policyId}/rollbacks | Schlagen Sie vor, die Richtlinie auf eine frühere Revision zurückzusetzen. Gibt 201 mit dem Vorschlag zurück. |
| POST | /policy-proposals/{proposalId}/apply | Wenden Sie einen ausstehenden Vorschlag an. Gibt 200 mit dem Vorschlag und dessen Ergebnis zurück: policyId, displayName, version und einen Portallink. |
Request-Bodys
Einstellungen ändern
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| changes | Ja | Array von Objekten mit setting (eine Einstellungs-ID) und value (einer der zulässigen Werte). Jede Einstellung darf höchstens einmal vorkommen. Bei Werten wird die Groß-/Kleinschreibung nicht berücksichtigt. |
Eine Richtlinie erstellen
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| fromPolicyId | Ja | Die zu kopierende Richtlinie anhand ihrer Richtlinien-ID (pathName). Die Kopie übernimmt deren Apps, Einstellungen und Einschränkungen. |
| displayName | Ja | Name der neuen Richtlinie, wie er im Portal angezeigt wird, maximal 50 Zeichen. |
| changes | Nein | Einstellungsänderungen, die auf die Kopie angewendet werden sollen, im selben Format wie oben. Lassen Sie dies weg, um die Richtlinie zu duplizieren. Kein Gerät verwendet die neue Richtlinie, bis Sie Geräte dorthin verschieben. |
Eine Richtlinie zurücksetzen
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| revision | Ja | Die Revisionsnummer, die wiederhergestellt werden soll, aus dem Revisionen-Endpunkt. Beschreibung, Tags und Gruppe der Richtlinie bleiben unverändert. Ihr Name wird auf den Namen der Revision zurückgesetzt, wenn sie sich unterscheiden, und die Änderungsliste zeigt dies an. |
Einen Vorschlag anwenden
| Feld | Erforderlich | Beschreibung |
|---|---|---|
| confirmation | Für HOHE Auswirkungen | Erforderlich, wenn für den Vorschlag requiresConfirmation auf true gesetzt ist: der Name der Richtlinie, eingegeben von der Person, die die Änderung genehmigt. Beim Abgleich wird die Groß-/Kleinschreibung sowie umgebende Leerzeichen ignoriert. |
Der Vorschlag
Jeder Vorschlags-Endpunkt sowie die Get- und Apply-Endpunkte geben den Vorschlag zurück. Die nützlichsten Felder:
| Feld | Beschreibung |
|---|---|
| proposalId | Die ID, mit der der Vorschlag gelesen oder angewendet werden kann. |
| status | PENDING bis zur Anwendung und EXECUTING, während die Anwendung läuft: Keines von beiden ist endgültig. Danach SUCCEEDED oder FAILED, UNCONFIRMED, wenn ein unerwarteter Fehler das Ergebnis unklar gelassen hat, oder EXPIRED, sobald expiresAt überschritten ist. |
| impact | NORMAL oder HIGH. Siehe Auswirkung und Bestätigung. |
| requiresConfirmation | True bei einem Vorschlag mit der Auswirkung HIGH: Das Anwenden erfordert das Feld confirmation. |
| fields | Die Änderungsliste. Jeder Eintrag enthält label (Name der Einstellung), value (der neue Wert) und previousValue (der aktuelle Wert). |
| summary | Ein Satz, der die Änderung beschreibt, einschließlich der Anzahl der Geräte, die die Richtlinie verwenden. |
| target | Die Richtlinie, die durch den Vorschlag geändert wird: kind, id und name. |
| expiresAt | Wann der Vorschlag abläuft. Danach kann er nicht mehr angewendet werden. |
| result | Nur bei Antworten auf Anwenden: die Richtlinie im aktuellen Zustand mit policyId, displayName, version, einer Nachricht und portalUrl. |
Auswirkung und Bestätigung
Ein Vorschlag hat die Auswirkung HIGH, wenn die Richtlinie mindestens ein Gerät umfasst und mindestens eine der folgenden Bedingungen zutrifft:
- Es handelt sich um ein Rollback.
- Es ändert eine Einstellung mit hoher Auswirkung: Apps aus unbekannten Quellen, Google Play Protect, Zurücksetzen auf Werkseinstellungen, Entwickleroptionen, USB-Datenübertragung oder Speicherverschlüsselung.
- Die Richtlinie umfasst 50 oder mehr Geräte, unabhängig von der Änderung.
Alles andere ist NORMAL, einschließlich jeder neuen Richtlinie, da sie noch von keinem Gerät verwendet wird.
Vorschläge sind an eine Richtlinienversion gebunden
Ein Vorschlag zeichnet die Richtlinienversion auf, auf der seine Änderungsliste basiert. Wenn die Richtlinie vor dem Anwenden des Vorschlags erneut gespeichert wird – von wem und von wo auch immer –, schlägt das Anwenden mit 409 und dem Code stale_proposal fehl, und es ändert sich nichts. Lesen Sie die Richtlinie erneut aus, erstellen Sie den Vorschlag neu und prüfen Sie die neue Änderungsliste.
Beispiel: Vorschlagen und Anwenden
Lesen Sie zuerst die aktuellen Einstellungen der Richtlinie aus, um die Einstellungs-IDs und zulässigen Werte zu erhalten:
curl "https://api.nomid.tech/emm/api/v1/policies/p7k2m9qa4xz/settings" \
-H "X-API-Key: $NOMID_API_KEY" {
"policyId": "p7k2m9qa4xz",
"displayName": "Warehouse scanners",
"version": 12,
"deviceCount": 18,
"editable": true,
"settings": [
{
"id": "CAMERA",
"label": "Camera",
"group": "RESTRICTIONS",
"value": "ALLOW",
"allowedValues": ["ALLOW", "BLOCK"],
"highImpact": false
}
]
} Vorschlagen, die Kamera und die USB-Datenübertragung zu sperren:
curl -X POST "https://api.nomid.tech/emm/api/v1/policies/p7k2m9qa4xz/changes" \
-H "X-API-Key: $NOMID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"changes": [{"setting": "CAMERA", "value": "BLOCK"}, {"setting": "USB_DATA_ACCESS", "value": "BLOCK"}]}' HTTP/1.1 201 Created
{
"capability": "update_policy_settings",
"status": "PENDING",
"title": "Edit policy settings",
"summary": "Change 2 settings of policy \"Warehouse scanners\". 18 devices apply it on their next sync. High impact: type the policy's name to confirm.",
"target": { "kind": "policy", "id": "p7k2m9qa4xz", "name": "Warehouse scanners" },
"fields": [
{ "label": "Camera", "value": "BLOCK", "previousValue": "ALLOW" },
{ "label": "USB data transfer", "value": "BLOCK", "previousValue": "ALLOW" }
],
"expiresAt": "2026-10-09T14:40:00Z",
"impact": "HIGH",
"proposalId": "prp_7GQv2LkR9sTn4WxY8bZcA1dE",
"requiresConfirmation": true
} Gekürzte Antwort. Die USB-Datenübertragung ist eine Einstellung mit hoher Auswirkung und die Richtlinie umfasst Geräte, daher hat der Vorschlag die Auswirkung HIGH und erfordert eine Bestätigung. Zeigen Sie der zuständigen Person die Änderungsliste, bevor Sie sie anwenden.
Sobald die Person zustimmt und den Namen der Richtlinie eingibt, wenden Sie den Vorschlag mit der eingegebenen Zeichenfolge an:
curl -X POST "https://api.nomid.tech/emm/api/v1/policy-proposals/prp_7GQv2LkR9sTn4WxY8bZcA1dE/apply" \
-H "X-API-Key: $NOMID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"confirmation": "Warehouse scanners"}' HTTP/1.1 200 OK
{
"capability": "update_policy_settings",
"status": "SUCCEEDED",
"impact": "HIGH",
"proposalId": "prp_7GQv2LkR9sTn4WxY8bZcA1dE",
"requiresConfirmation": true,
"result": {
"policyId": "p7k2m9qa4xz",
"displayName": "Warehouse scanners",
"version": 13,
"message": "Policy settings changed. Devices on the policy apply them on their next sync."
}
} Gekürzte Antwort. Geräte unter dieser Richtlinie wenden die neuen Einstellungen bei ihrer nächsten Synchronisierung an.
Wenn die Richtlinie in der Zwischenzeit geändert wurde
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"detail": "Policy \"Warehouse scanners\" was changed after this proposal was made. Nothing was applied: read it again and propose again.",
"instance": "/emm/api/v1/policy-proposals/prp_7GQv2LkR9sTn4WxY8bZcA1dE/apply",
"code": "stale_proposal",
"retryable": false
} Bearbeitbare Einstellungen
Dies sind die Einstellungs-IDs, die bei Änderungen akzeptiert werden, zusammen mit ihren zulässigen Werten. Die Beschriftung ist der Name, den die API in der Änderungsliste zurückgibt.
Beim Lesen von Einstellungen kann ein Wert auch NOT_SET (wird dem Gerät oder dem Standard von Google überlassen) oder CUSTOM (ein im Portal festgelegter Wert, den diese Werte nicht ausdrücken können) sein. Keiner von beiden kann gesendet werden, aber beide können durch einen zulässigen Wert ersetzt werden.
| Einstellung | Beschriftung | Gruppe | Zulässige Werte | Hohe Auswirkung |
|---|---|---|---|---|
| PLAY_STORE_MODE | Play Store mode | APPS | BLACKLIST, WHITELIST | Nein |
| DEFAULT_PERMISSION_POLICY | Default runtime permission policy | APPS | DENY, PROMPT | Nein |
| APP_AUTO_UPDATE_POLICY | App auto-update policy | APPS | ALWAYS, CHOICE_TO_THE_USER, NEVER, WIFI | Nein |
| UNTRUSTED_APPS_POLICY | Apps from unknown sources | SECURITY | ALLOW_INSTALL_IN_PERSONAL_PROFILE_ONLY, DISALLOW_INSTALL | Ja |
| PLAY_PROTECT | Google Play Protect app verification | SECURITY | ENABLED, USER_CHOICE | Ja |
| SCREEN_CAPTURE | Screen capture | RESTRICTIONS | ALLOW, BLOCK | Nein |
| CAMERA | Camera | RESTRICTIONS | ALLOW, BLOCK | Nein |
| FACTORY_RESET | Factory reset from Settings | RESTRICTIONS | ALLOW, BLOCK | Ja |
| UNINSTALL_APPS | Uninstalling apps | RESTRICTIONS | ALLOW, BLOCK | Nein |
| ACCOUNT_MODIFICATION | Adding or removing accounts | RESTRICTIONS | ALLOW, BLOCK | Nein |
| ADD_USER | Adding users | RESTRICTIONS | ALLOW, BLOCK | Nein |
| REMOVE_USER | Removing users | RESTRICTIONS | ALLOW, BLOCK | Nein |
| DEVELOPER_SETTINGS | Developer options and USB debugging | SECURITY | ALLOW, BLOCK | Ja |
| USB_DATA_ACCESS | USB data transfer | CONNECTIVITY | ALLOW, BLOCK | Ja |
| LOCATION_MODE | Location | LOCATION | DISABLED, ENFORCED, USER_CHOICE | Nein |
| LOCATION_SHARING | Sharing location | LOCATION | ALLOW, BLOCK | Nein |
| OUTGOING_CALLS | Outgoing calls | RESTRICTIONS | ALLOW, BLOCK | Nein |
| SMS | SMS | RESTRICTIONS | ALLOW, BLOCK | Nein |
| BLUETOOTH | Bluetooth | CONNECTIVITY | ALLOW, BLOCK | Nein |
| DATA_ROAMING | Data roaming | CONNECTIVITY | ALLOW, BLOCK | Nein |
| NETWORK_RESET | Network settings reset | CONNECTIVITY | ALLOW, BLOCK | Nein |
| VPN_CONFIGURATION | Configuring VPNs | CONNECTIVITY | ALLOW, BLOCK | Nein |
| CONFIGURE_WIFI | Configuring Wi-Fi networks | CONNECTIVITY | ALLOW, BLOCK | Nein |
| WIFI_DIRECT | Wi-Fi Direct | CONNECTIVITY | ALLOW, BLOCK | Nein |
| TETHERING | Tethering and hotspot | CONNECTIVITY | ALLOW, BLOCK | Nein |
| WIFI_STATE | Wi-Fi on or off | CONNECTIVITY | DISABLED, ENABLED, USER_CHOICE | Nein |
| AIRPLANE_MODE | Airplane mode | CONNECTIVITY | DISABLED, USER_CHOICE | Nein |
| MINIMUM_WIFI_SECURITY | Minimum Wi-Fi security | CONNECTIVITY | OPEN_NETWORK, PERSONAL_NETWORK | Nein |
| AUTO_DATE_TIME | Automatic date, time and time zone | RESTRICTIONS | ENFORCED, USER_CHOICE | Nein |
| ENCRYPTION_POLICY | Storage encryption | SECURITY | ENABLED_WITHOUT_PASSWORD, ENABLED_WITH_PASSWORD, UNSPECIFIED | Ja |
| APPLICATION_REPORT_LEVEL | Installed apps reporting | REPORTING | DISABLED, INSTALLED_AND_REMOVED_APPS, INSTALLED_APPS | Nein |
| REPORT_DEVICE_SETTINGS | Device settings reporting | REPORTING | DISABLED, ENABLED | Nein |
| REPORT_DISPLAY_INFO | Display information reporting | REPORTING | DISABLED, ENABLED | Nein |
| REPORT_HARDWARE_STATUS | Hardware status reporting | REPORTING | DISABLED, ENABLED | Nein |
| REPORT_MEMORY_INFO | Memory information reporting | REPORTING | DISABLED, ENABLED | Nein |
| REPORT_NETWORK_INFO | Network information reporting | REPORTING | DISABLED, ENABLED | Nein |
| REPORT_POWER_EVENTS | Power events reporting | REPORTING | DISABLED, ENABLED | Nein |
| REPORT_SOFTWARE_INFO | Software information reporting | REPORTING | DISABLED, ENABLED | Nein |
| REPORT_SYSTEM_PROPERTIES | System properties reporting | REPORTING | DISABLED, ENABLED | Nein |
MCP-Tools
Der MCP-Server stellt dieselben Operationen als Tools bereit. Sie akzeptieren dieselben Argumente wie die REST-Endpunkte, wobei policyId und proposalId als Argumente anstelle von Pfadsegmenten verwendet werden.
| Tool | Berechtigung | Beschreibung |
|---|---|---|
| get_policy_settings | POLICIES_READ | Die bearbeitbaren Einstellungen einer Richtlinie mit ihren aktuellen und zulässigen Werten lesen. |
| list_policy_revisions | POLICIES_READ | Die gespeicherten Revisionen einer Richtlinie auflisten, die neuesten zuerst. |
| get_policy_proposal | POLICIES_READ | Einen Vorschlag lesen, der mit demselben Schlüssel oder derselben Verbindung erstellt wurde, einschließlich seines Status. |
| update_policy_settings | POLICIES_WRITE + POLICIES_READ | Einstellungsänderungen für eine bestehende Richtlinie vorschlagen. |
| create_policy | POLICIES_WRITE + POLICIES_READ | Eine neue Richtlinie als Kopie einer bestehenden vorschlagen, mit optionalen Einstellungsänderungen. |
| rollback_policy | POLICIES_WRITE + POLICIES_READ | Das Wiederherstellen einer Richtlinie auf eine frühere Revision vorschlagen. |
| apply_policy_proposal | POLICIES_WRITE + POLICIES_READ | Einen ausstehenden Vorschlag anhand seiner proposalId anwenden, mit Bestätigung, wenn er eine HOHE Auswirkung (HIGH impact) hat. |
Ein Assistent muss dem Benutzer die Änderungsliste anzeigen und dessen ausdrückliche Zustimmung in der Konversation einholen, bevor er apply_policy_proposal aufruft. Bei einem Vorschlag mit HOHER Auswirkung (HIGH impact) muss er den Benutzer auffordern, den Namen der Richtlinie einzugeben, und genau das übergeben, was eingegeben wurde.
Fehler
Sobald der API-Schlüssel authentifiziert ist, verwenden Fehler application/problem+json mit zwei zusätzlichen Feldern: code, eine stabile Kennung zur Verzweigung, und retryable, das angibt, ob dieselbe Anfrage erneut gesendet werden kann. Ein fehlender oder ungültiger Schlüssel erhält die gemeinsame 401-Antwort, ein kleines JSON-Objekt mit error, message und status. MCP-Tools geben denselben Code und dieselbe Nachricht als Tool-Fehler zurück.
| Status | Code | Bedeutung |
|---|---|---|
| 400 | invalid_arguments | Der Body ist ungültig: eine unbekannte Einstellung, ein nicht zulässiger Wert, eine doppelt aufgeführte Einstellung oder ein fehlendes Feld. Die Detailangabe gibt an, welches zutrifft. |
| 403 | forbidden | Dem Schlüssel fehlt POLICIES_WRITE oder POLICIES_READ, oder die Unternehmenseinstellung Richtlinienänderungen ist deaktiviert. |
| 404 | not_found | Keine solche Richtlinie oder Revision für diesen Schlüssel sichtbar oder kein Vorschlag mit dieser ID von diesem Schlüssel erstellt. |
| 409 | unsupported | Die Richtlinie kann auf diese Weise nicht geändert werden: Es handelt sich nicht um eine Android-Richtlinie oder sie wird von Nomid verwaltet. |
| 409 | not_pending | Der Vorschlag ist nicht mehr PENDING. Lesen Sie ihn, um seinen Status zu sehen: Wenn er SUCCEEDED ist, wurde die Änderung vorgenommen. Wenn er EXECUTING ist, lesen Sie ihn erneut, bis er abgeschlossen ist. Wenn er UNCONFIRMED ist, lesen Sie die Einstellungen der Richtlinie, bevor Sie erneut einen Vorschlag machen. Wenn er FAILED oder EXPIRED ist, machen Sie den Vorschlag erneut. |
| 409 | stale_proposal | Die Richtlinie wurde gespeichert, nachdem der Vorschlag gemacht wurde. Es wurde nichts angewendet. Lesen Sie die Richtlinie erneut und machen Sie erneut einen Vorschlag. |
| 422 | refused | Die Anfrage kann nicht ausgeführt werden: Es würde sich nichts ändern, das Unternehmen ist nicht mit Android Enterprise verbunden oder der neue Richtlinienname kann nicht verwendet werden. |
| 422 | confirmation_required | Der Vorschlag hat die Auswirkung HIGH und die Bestätigung fehlt oder stimmt nicht mit dem Namen der Richtlinie überein. Es wurde nichts angewendet, und der Vorschlag bleibt ausstehend, bis er abläuft. |
| 429 | rate_limited | Zu viele Schreibanfragen für diesen API-Schlüssel oder diese Verbindung. Der Retry-After-Header und die Details geben die Sekunden an, die gewartet werden muss. retryable ist true. |
| 500 | internal_error | Unerwarteter Fehler. Lesen Sie den Vorschlag vor einem erneuten Versuch: Wenn sein Status FAILED ist, schlagen Sie ihn erneut vor. Wenn er UNCONFIRMED ist, lesen Sie die Einstellungen der Richtlinie, um zu sehen, ob die Änderung vorgenommen wurde, bevor Sie sie erneut vorschlagen. |
Ratenbegrenzungen
Jeder Propose- und Apply-Aufruf zählt zum Schreiblimit von 10 Anfragen pro Minute für jeden API-Schlüssel oder jede „Sign in with Nomid“-Verbindung, geteilt mit den Gerätebefehls-Endpunkten, Bereitstellungs-QR-Codes und den MCP-Schreibtools. Leseaufrufe zählen nicht dazu.
Revisionen und Rollback
Jede angewendete Änderung speichert eine neue Revision der Richtlinie. Listen Sie Revisionen auf, um zu sehen, wer die Richtlinie wann geändert hat, und schlagen Sie ein Rollback vor, um eine Änderung rückgängig zu machen.