Modifications de stratégie

Modifiez les paramètres d'une stratégie Android, créez une stratégie par copie d'une autre, ou effectuez un rollback d'une stratégie vers une révision antérieure. Chaque modification est examinée avant d'être appliquée.

Comment ça fonctionne

Chaque modification se déroule en deux étapes. D'abord, vous la proposez : l'API enregistre une proposition et renvoie sa liste de modifications, avec la valeur actuelle et la nouvelle valeur de chaque paramètre, l'impact et la date d'expiration de la proposition. Rien ne change encore sur la stratégie. Ensuite, vous appliquez la proposition par son proposalId, après que la personne responsable a examiné la liste de modifications.

Seule la clé d'API ayant créé une proposition peut la lire ou l'appliquer. Pour une connexion OAuth, seuls la même connexion et le même utilisateur le peuvent. Une proposition expire 10 minutes après avoir été créée ; le champ expiresAt indique l'heure exacte.

Seules les stratégies Android peuvent être modifiées de cette manière. Les stratégies gérées par Nomid ne le peuvent pas. La création d'une stratégie nécessite également que l'entreprise soit connectée à Android Enterprise.

Prérequis

  • Une clé d'API avec l'autorisation POLICIES_WRITE (Modifications de stratégie), combinée avec POLICIES_READ. Seul un utilisateur du portail autorisé à modifier des stratégies peut créer une clé avec POLICIES_WRITE. Requis par les quatre points de terminaison POST et les outils MCP de modification de stratégie.
  • Le paramètre d'entreprise Modifications de stratégie, sous Accès des agents IA dans le portail, doit être activé. Il est désactivé par défaut. Tant qu'il est désactivé, chaque appel pour proposer ou appliquer renvoie 403. La lecture des paramètres, des révisions et des propositions nécessite uniquement POLICIES_READ.
  • Les clients MCP qui se connectent avec « Se connecter avec Nomid » au lieu d'une clé d'API ont besoin de la portée mcp:policies:write.

Points de terminaison

Tous les chemins sont relatifs à l'URL de base de l'API et nécessitent l'en-tête X-API-Key. Les corps des requêtes sont en JSON.

MéthodePoint d'accèsDescription
GET/policies/{policyId}/settingsLes paramètres modifiables de la stratégie, chacun avec sa valeur actuelle, ses valeurs autorisées, son groupe et l'indication si sa modification a un impact élevé. Renvoie également la version de la stratégie, deviceCount et l'indication si la stratégie est modifiable.
GET/policies/{policyId}/revisionsLes révisions enregistrées de la stratégie, de la plus récente à la plus ancienne, avec la date et l'auteur de chaque enregistrement. limit est facultatif, de 1 à 100, valeur par défaut 20.
GET/policy-proposals/{proposalId}Une proposition effectuée par cette clé, avec sa liste de modifications et son statut : PENDING, EXECUTING, SUCCEEDED, FAILED, UNCONFIRMED ou EXPIRED.
POST/policies/{policyId}/changesProposer des modifications de paramètres pour une stratégie existante. Renvoie 201 avec la proposition.
POST/policiesProposer une nouvelle stratégie sous forme de copie d'une stratégie existante, avec des modifications de paramètres facultatives. Sans modifications, cela duplique la stratégie. Renvoie 201 avec la proposition.
POST/policies/{policyId}/rollbacksProposer de restaurer la stratégie à une révision antérieure. Renvoie 201 avec la proposition.
POST/policy-proposals/{proposalId}/applyAppliquer une proposition en attente. Renvoie 200 avec la proposition et son résultat : policyId, displayName, version et un lien vers le portail.

Corps de requête

Modifier les paramètres

ChampObligatoireDescription
changesOuiTableau d'objets avec setting (un ID de paramètre) et value (une de ses valeurs autorisées). Chaque paramètre au maximum une fois. Les valeurs ne sont pas sensibles à la casse.

Créer une stratégie

ChampObligatoireDescription
fromPolicyIdOuiLa stratégie à copier, par son identifiant de stratégie (pathName). La copie reprend ses applications, ses paramètres et ses restrictions.
displayNameOuiNom de la nouvelle stratégie tel qu'affiché dans le portail, au maximum 50 caractères.
changesNonModifications de paramètres à appliquer à la copie, sous le même format que ci-dessus. Omettez-le pour dupliquer la stratégie. Aucun appareil n'utilise la nouvelle stratégie tant que vous n'y déplacez pas d'appareils.

Restaurer une stratégie

ChampObligatoireDescription
revisionOuiLe numéro de révision à restaurer, provenant du point de terminaison revisions. La description, les balises et le groupe de la stratégie restent inchangés. Son nom revient au nom de la révision s'ils diffèrent, et la liste des modifications l'indique.

Appliquer une proposition

ChampObligatoireDescription
confirmationPour un impact ÉLEVÉObligatoire lorsque la proposition a requiresConfirmation défini sur true : le nom de la stratégie, saisi par la personne qui approuve la modification. La correspondance ignore la casse et les espaces autour.

La proposition

Chaque point de terminaison de proposition ainsi que les points de terminaison get et apply renvoient la proposition. Les champs les plus utiles :

ChampDescription
proposalIdL'identifiant permettant de lire ou d'appliquer la proposition.
statusPENDING jusqu'à l'application, et EXECUTING pendant qu'une application est en cours : aucun des deux n'est définitif. Ensuite SUCCEEDED ou FAILED, UNCONFIRMED lorsqu'une erreur inattendue a laissé le résultat inconnu, ou EXPIRED une fois que expiresAt est dépassé.
impactNORMAL ou HIGH. Voir Impact et confirmation.
requiresConfirmationVrai pour une proposition à impact HIGH : l'application nécessite le champ confirmation.
fieldsLa liste des modifications. Chaque entrée comporte label (le nom du paramètre), value (la nouvelle valeur) et previousValue (la valeur actuelle).
summaryUne phrase décrivant la modification, indiquant notamment combien d'appareils utilisent la politique.
targetLa politique que la proposition modifie : kind, id et name.
expiresAtDate et heure d'expiration de la proposition. Après cela, elle ne peut plus être appliquée.
resultRéponses d'application uniquement : la politique telle qu'elle est actuellement, avec policyId, displayName, version, un message et portalUrl.

Impact et confirmation

Une proposition a un impact HIGH lorsque la politique compte au moins un appareil et que l'une des conditions suivantes est remplie :

  • Il s'agit d'un retour arrière (rollback).
  • Elle modifie un paramètre à fort impact : applications de sources inconnues, Google Play Protect, réinitialisation aux paramètres d'usine, options pour les développeurs, transfert de données USB ou chiffrement du stockage.
  • La politique compte 50 appareils ou plus, quelle que soit la modification.

Tout le reste est NORMAL, y compris toute nouvelle politique, car aucun appareil ne l'utilise encore.

Les propositions sont associées à une version de politique

Une proposition enregistre la version de la politique sur laquelle sa liste de modifications a été créée. Si la politique est enregistrée à nouveau avant que vous n'appliquiez la proposition, par n'importe qui et depuis n'importe où, l'application échoue avec une erreur 409 et le code stale_proposal, et rien ne change. Lisez à nouveau la politique, proposez à nouveau et examinez la nouvelle liste des modifications.

Exemple : proposer et appliquer

Lisez d'abord les paramètres actuels de la politique pour obtenir les identifiants de paramètres et les valeurs autorisées :

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

Proposez de bloquer l'appareil photo et le transfert de données USB :

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
}

Réponse abrégée. Le transfert de données USB est un paramètre à fort impact et la politique comporte des appareils, la proposition a donc un impact HIGH et nécessite une confirmation. Présentez la liste des modifications à la personne responsable avant de l'appliquer.

Une fois qu'elle a approuvé et saisi le nom de la politique, appliquez la proposition avec ce qu'elle a saisi :

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

Réponse abrégée. Les appareils soumis à la politique appliquent les nouveaux paramètres lors de leur prochaine synchronisation.

Lorsque la politique a été modifiée entre-temps

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
}

Paramètres modifiables

Voici les identifiants de paramètres acceptés dans les modifications, ainsi que leurs valeurs autorisées. Le libellé correspond au nom renvoyé par l'API dans la liste des modifications.

Lors de la lecture des paramètres, une valeur peut également être NOT_SET (laissée à la valeur par défaut de l'appareil ou de Google) ou CUSTOM (une valeur définie dans le portail que ces valeurs ne peuvent pas exprimer). Aucune des deux ne peut être envoyée, mais toutes deux peuvent être remplacées par une valeur autorisée.

ParamètreLibelléGroupeValeurs autoriséesImpact élevé
PLAY_STORE_MODE Play Store mode APPS BLACKLIST, WHITELIST Non
DEFAULT_PERMISSION_POLICY Default runtime permission policy APPS DENY, PROMPT Non
APP_AUTO_UPDATE_POLICY App auto-update policy APPS ALWAYS, CHOICE_TO_THE_USER, NEVER, WIFI Non
UNTRUSTED_APPS_POLICY Apps from unknown sources SECURITY ALLOW_INSTALL_IN_PERSONAL_PROFILE_ONLY, DISALLOW_INSTALL Oui
PLAY_PROTECT Google Play Protect app verification SECURITY ENABLED, USER_CHOICE Oui
SCREEN_CAPTURE Screen capture RESTRICTIONS ALLOW, BLOCK Non
CAMERA Camera RESTRICTIONS ALLOW, BLOCK Non
FACTORY_RESET Factory reset from Settings RESTRICTIONS ALLOW, BLOCK Oui
UNINSTALL_APPS Uninstalling apps RESTRICTIONS ALLOW, BLOCK Non
ACCOUNT_MODIFICATION Adding or removing accounts RESTRICTIONS ALLOW, BLOCK Non
ADD_USER Adding users RESTRICTIONS ALLOW, BLOCK Non
REMOVE_USER Removing users RESTRICTIONS ALLOW, BLOCK Non
DEVELOPER_SETTINGS Developer options and USB debugging SECURITY ALLOW, BLOCK Oui
USB_DATA_ACCESS USB data transfer CONNECTIVITY ALLOW, BLOCK Oui
LOCATION_MODE Location LOCATION DISABLED, ENFORCED, USER_CHOICE Non
LOCATION_SHARING Sharing location LOCATION ALLOW, BLOCK Non
OUTGOING_CALLS Outgoing calls RESTRICTIONS ALLOW, BLOCK Non
SMS SMS RESTRICTIONS ALLOW, BLOCK Non
BLUETOOTH Bluetooth CONNECTIVITY ALLOW, BLOCK Non
DATA_ROAMING Data roaming CONNECTIVITY ALLOW, BLOCK Non
NETWORK_RESET Network settings reset CONNECTIVITY ALLOW, BLOCK Non
VPN_CONFIGURATION Configuring VPNs CONNECTIVITY ALLOW, BLOCK Non
CONFIGURE_WIFI Configuring Wi-Fi networks CONNECTIVITY ALLOW, BLOCK Non
WIFI_DIRECT Wi-Fi Direct CONNECTIVITY ALLOW, BLOCK Non
TETHERING Tethering and hotspot CONNECTIVITY ALLOW, BLOCK Non
WIFI_STATE Wi-Fi on or off CONNECTIVITY DISABLED, ENABLED, USER_CHOICE Non
AIRPLANE_MODE Airplane mode CONNECTIVITY DISABLED, USER_CHOICE Non
MINIMUM_WIFI_SECURITY Minimum Wi-Fi security CONNECTIVITY OPEN_NETWORK, PERSONAL_NETWORK Non
AUTO_DATE_TIME Automatic date, time and time zone RESTRICTIONS ENFORCED, USER_CHOICE Non
ENCRYPTION_POLICY Storage encryption SECURITY ENABLED_WITHOUT_PASSWORD, ENABLED_WITH_PASSWORD, UNSPECIFIED Oui
APPLICATION_REPORT_LEVEL Installed apps reporting REPORTING DISABLED, INSTALLED_AND_REMOVED_APPS, INSTALLED_APPS Non
REPORT_DEVICE_SETTINGS Device settings reporting REPORTING DISABLED, ENABLED Non
REPORT_DISPLAY_INFO Display information reporting REPORTING DISABLED, ENABLED Non
REPORT_HARDWARE_STATUS Hardware status reporting REPORTING DISABLED, ENABLED Non
REPORT_MEMORY_INFO Memory information reporting REPORTING DISABLED, ENABLED Non
REPORT_NETWORK_INFO Network information reporting REPORTING DISABLED, ENABLED Non
REPORT_POWER_EVENTS Power events reporting REPORTING DISABLED, ENABLED Non
REPORT_SOFTWARE_INFO Software information reporting REPORTING DISABLED, ENABLED Non
REPORT_SYSTEM_PROPERTIES System properties reporting REPORTING DISABLED, ENABLED Non

Outils MCP

Le serveur MCP expose les mêmes opérations sous forme d'outils. Ils prennent les mêmes arguments que les points de terminaison REST, avec policyId et proposalId comme arguments au lieu de segments de chemin.

OutilAutorisationDescription
get_policy_settingsPOLICIES_READLire les paramètres modifiables d'une règle avec leurs valeurs actuelles et autorisées.
list_policy_revisionsPOLICIES_READLister les révisions enregistrées d'une règle, de la plus récente à la plus ancienne.
get_policy_proposalPOLICIES_READLire une proposition effectuée par la même clé ou connexion, avec son statut.
update_policy_settingsPOLICIES_WRITE + POLICIES_READProposer des modifications de paramètres pour une règle existante.
create_policyPOLICIES_WRITE + POLICIES_READProposer une nouvelle règle sous forme de copie d'une règle existante, avec des modifications de paramètres facultatives.
rollback_policyPOLICIES_WRITE + POLICIES_READProposer la restauration d'une règle vers une révision antérieure.
apply_policy_proposalPOLICIES_WRITE + POLICIES_READAppliquer une proposition en attente à l'aide de son proposalId, avec confirmation lorsqu'elle est d'impact HIGH.

Un assistant doit présenter la liste des modifications à l'utilisateur et obtenir son approbation explicite dans la conversation avant d'appeler apply_policy_proposal. Pour une proposition d'impact HIGH, il doit demander à l'utilisateur de saisir le nom de la règle et transmettre exactement ce qu'il a saisi.

Erreurs

Une fois la clé d'API authentifiée, les erreurs utilisent application/problem+json avec deux champs supplémentaires : code, un identifiant stable sur lequel baser les branchements, et retryable, qui indique si la même requête peut être renvoyée. Une clé manquante ou non valide reçoit la réponse 401 partagée, un petit objet JSON comportant error, message et status. Les outils MCP renvoient les mêmes code et message sous la forme d'une erreur d'outil.

StatutCodeSignification
400invalid_argumentsLe corps n'est pas valide : un paramètre inconnu, une valeur non autorisée, un paramètre listé deux fois ou un champ manquant. Le détail indique duquel il s'agit.
403forbiddenLa clé ne dispose pas de POLICIES_WRITE ou de POLICIES_READ, ou le paramètre d'entreprise Modifications des règles est désactivé.
404not_foundAucune règle ou révision de ce type n'est visible pour cette clé, ou aucune proposition avec cet identifiant n'a été effectuée par cette clé.
409unsupportedLa règle ne peut pas être modifiée de cette manière : il ne s'agit pas d'une règle Android, ou elle est gérée par Nomid.
409not_pendingLa proposition n'est plus PENDING. Lisez-la pour voir son statut : si elle est SUCCEEDED, la modification est effectuée. Si elle est EXECUTING, lisez-la à nouveau jusqu'à ce qu'elle se termine. Si elle est UNCONFIRMED, lisez les paramètres de la politique avant de proposer à nouveau. Si elle est FAILED ou EXPIRED, proposez à nouveau.
409stale_proposalLa politique a été enregistrée après que la proposition a été faite. Rien n'a été appliqué. Lisez à nouveau la politique et proposez à nouveau.
422refusedLa requête ne peut pas être traitée : rien ne changerait, l'entreprise n'est pas connectée à Android Enterprise, ou le nouveau nom de la politique ne peut pas être utilisé.
422confirmation_requiredLa proposition a un impact HIGH et la confirmation est manquante ou ne correspond pas au nom de la politique. Rien n'a été appliqué, et la proposition reste en attente jusqu'à ce qu'elle expire.
429rate_limitedTrop de requêtes d'écriture pour cette clé d'API ou cette connexion. L'en-tête Retry-After et le détail indiquent les secondes à attendre. retryable est true.
500internal_errorErreur inattendue. Lisez la proposition avant de réessayer : si son statut est FAILED, proposez à nouveau. Si elle est UNCONFIRMED, lisez les paramètres de la politique pour voir si la modification a été effectuée avant de la proposer à nouveau.

Limites de débit

Chaque appel propose et apply est décompté de la limite d'écriture de 10 requêtes par minute pour chaque clé d'API ou connexion Sign in with Nomid, partagée avec les points de terminaison de commande d'appareils, les codes QR de provisionnement et les outils d'écriture MCP. Les appels de lecture ne sont pas décomptés.

Révisions et rollback

Chaque modification appliquée enregistre une nouvelle révision de la politique. Listez les révisions pour voir qui a modifié la politique et quand, et proposez un rollback pour annuler une modification.

Choisissez votre horaire

Chargement...
Ouvrir le calendrier de réservation