Alterações de política

Altere as configurações de uma política Android, crie uma política como cópia de outra ou reverta uma política para uma revisão anterior. Cada alteração é revisada antes de ser aplicada.

Como funciona

Cada alteração requer duas etapas. Primeiro, você a propõe: a API registra uma proposta e retorna sua lista de alterações, com o valor atual e o novo de cada configuração, o impacto e quando a proposta expira. Nada muda na política ainda. Em seguida, você aplica a proposta por meio do proposalId dela, depois que a pessoa responsável tiver revisado a lista de alterações.

Apenas a chave de API que fez uma proposta pode lê-la ou aplicá-la. Para uma conexão OAuth, apenas a mesma conexão e usuário podem. Uma proposta expira 10 minutos após ser feita; o campo expiresAt informa o horário exato.

Apenas políticas Android podem ser alteradas dessa forma. Políticas gerenciadas pelo Nomid não podem. Criar uma política também exige que a empresa esteja conectada ao Android Enterprise.

Requisitos

  • Uma chave de API com a permissão POLICIES_WRITE (Alterações de política), combinada com POLICIES_READ. Apenas um usuário do portal com permissão para editar políticas pode criar uma chave com POLICIES_WRITE. Obrigatório para os quatro endpoints POST e as ferramentas de alteração de política do MCP.
  • A configuração da empresa Alterações de política, em Acesso de agente de IA no portal, precisa estar ativada. Ela vem desativada por padrão. Enquanto estiver desativada, toda chamada de proposta e aplicação retornará 403. A leitura de configurações, revisões e propostas requer apenas POLICIES_READ.
  • Clientes MCP que se conectam com Sign in with Nomid em vez de uma chave de API precisam do escopo mcp:policies:write.

Endpoints

Todos os caminhos são relativos ao URL base da API e exigem o cabeçalho X-API-Key. Os corpos das requisições são em JSON.

MétodoEndpointDescrição
GET/policies/{policyId}/settingsAs configurações editáveis da política, cada uma com seu valor atual, valores permitidos, grupo e se a alteração tem alto impacto. Também retorna a versão da política, deviceCount e se a política é editável.
GET/policies/{policyId}/revisionsAs revisões salvas da política, da mais recente para a mais antiga, com quando e por quem cada uma foi salva. limit é opcional, de 1 a 100, padrão 20.
GET/policy-proposals/{proposalId}Uma proposta feita por esta chave, com sua lista de alterações e status: PENDING, EXECUTING, SUCCEEDED, FAILED, UNCONFIRMED ou EXPIRED.
POST/policies/{policyId}/changesPropõe alterações de configurações em uma política existente. Retorna 201 com a proposta.
POST/policiesPropõe uma nova política como cópia de uma existente, com alterações opcionais de configurações. Sem alterações, ela duplica a política. Retorna 201 com a proposta.
POST/policies/{policyId}/rollbacksPropõe restaurar a política para uma revisão anterior. Retorna 201 com a proposta.
POST/policy-proposals/{proposalId}/applyAplica uma proposta pendente. Retorna 200 com a proposta e seu resultado: policyId, displayName, version e um link do portal.

Corpos de requisição

Alterar configurações

CampoObrigatórioDescrição
changesSimArray de objetos com setting (um ID de configuração) e value (um dos seus valores permitidos). Cada configuração no máximo uma vez. Os valores não diferenciam maiúsculas de minúsculas.

Criar uma política

CampoObrigatórioDescrição
fromPolicyIdSimA política a ser copiada, pelo seu ID de política (pathName). A cópia herda seus aplicativos, configurações e restrições.
displayNameSimNome da nova política conforme exibido no portal, no máximo 50 caracteres.
changesNãoAlterações de configuração a serem aplicadas à cópia, no mesmo formato acima. Omita para duplicar a política. Nenhum dispositivo usa a nova política até que você mova dispositivos para ela.

Reverter uma política

CampoObrigatórioDescrição
revisionSimO número da revisão a ser restaurada, a partir do endpoint de revisões. A descrição, tags e grupo da política permanecem como estão. Seu nome volta ao nome da revisão quando forem diferentes, e a lista de alterações mostra isso.

Aplicar uma proposta

CampoObrigatórioDescrição
confirmationPara ALTO impactoObrigatório quando a proposta tem requiresConfirmation definido como true: o nome da política, digitado pela pessoa que aprova a alteração. A correspondência ignora maiúsculas/minúsculas e espaços adjacentes.

A proposta

Todos os endpoints propose e os endpoints get e apply retornam a proposta. Os campos mais úteis:

CampoDescrição
proposalIdO ID para ler ou aplicar a proposta.
statusPENDING até ser aplicada e EXECUTING enquanto uma aplicação estiver em andamento: nenhum dos dois é definitivo. Em seguida, SUCCEEDED ou FAILED, UNCONFIRMED quando um erro inesperado deixar o resultado desconhecido ou EXPIRED quando expiresAt tiver passado.
impactNORMAL ou HIGH. Consulte Impacto e confirmação.
requiresConfirmationTrue para uma proposta de impacto HIGH: a aplicação precisa do campo confirmation.
fieldsA lista de alterações. Cada entrada possui label (o nome da configuração), value (o novo valor) e previousValue (o valor atual).
summaryUma frase descrevendo a alteração, incluindo quantos dispositivos usam a política.
targetA política que a proposta altera: kind, id e name.
expiresAtQuando a proposta expira. Depois disso, ela não poderá mais ser aplicada.
resultApenas respostas de aplicação: a política como está agora, com policyId, displayName, version, uma message e portalUrl.

Impacto e confirmação

Uma proposta é de impacto HIGH quando a política tem pelo menos um dispositivo e qualquer um destes for verdadeiro:

  • É uma reversão.
  • Altera uma configuração de alto impacto: aplicativos de fontes desconhecidas, Google Play Protect, restauração de fábrica, opções do desenvolvedor, transferência de dados USB ou criptografia de armazenamento.
  • A política tem 50 ou mais dispositivos, independentemente da alteração.

Todo o resto é NORMAL, incluindo qualquer nova política, já que nenhum dispositivo a utiliza ainda.

As propostas são vinculadas a uma versão da política

Uma proposta registra a versão da política na qual sua lista de alterações foi baseada. Se a política for salva novamente antes de você aplicar a proposta, por qualquer pessoa e de qualquer lugar, a aplicação falha com 409 e o código stale_proposal, e nada é alterado. Leia a política novamente, proponha novamente e revise a nova lista de alterações.

Exemplo: propor e aplicar

Leia primeiro as configurações atuais da política para obter os IDs de configuração e os valores permitidos:

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

Proponha bloquear a câmera e a transferência de dados 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
}

Resposta resumida. A transferência de dados USB é uma configuração de alto impacto e a política tem dispositivos, portanto a proposta é de impacto HIGH e requer confirmação. Mostre a lista de alterações à pessoa responsável antes de aplicá-la.

Depois que ela aprovar e digitar o nome da política, aplique a proposta com o que foi digitado:

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

Resposta resumida. Os dispositivos na política aplicam as novas configurações na próxima sincronização.

Quando a política foi alterada nesse ínterim

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
}

Configurações editáveis

Estes são os IDs de configuração aceitos em alterações, com seus valores permitidos. O rótulo é o nome que a API retorna na lista de alterações.

Ao ler configurações, um valor também pode ser NOT_SET (deixado para o dispositivo ou padrão do Google) ou CUSTOM (um valor definido no portal que estes valores não podem expressar). Nenhum dos dois pode ser enviado, mas ambos podem ser substituídos por um valor permitido.

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

Ferramentas MCP

O servidor MCP expõe as mesmas operações como ferramentas. Elas recebem os mesmos argumentos que os endpoints REST, com policyId e proposalId como argumentos em vez de segmentos de caminho.

FerramentaPermissãoDescrição
get_policy_settingsPOLICIES_READLer as configurações editáveis de uma política com seus valores atuais e permitidos.
list_policy_revisionsPOLICIES_READListar as revisões salvas de uma política, da mais recente para a mais antiga.
get_policy_proposalPOLICIES_READLer uma proposta feita pela mesma chave ou conexão, com seu status.
update_policy_settingsPOLICIES_WRITE + POLICIES_READPropor alterações de configuração para uma política existente.
create_policyPOLICIES_WRITE + POLICIES_READPropor uma nova política como uma cópia de uma existente, com alterações de configuração opcionais.
rollback_policyPOLICIES_WRITE + POLICIES_READPropor a restauração de uma política para uma revisão anterior.
apply_policy_proposalPOLICIES_WRITE + POLICIES_READAplicar uma proposta pendente por seu proposalId, com confirmação quando for de ALTO impacto.

Um assistente deve mostrar ao usuário a lista de alterações e obter sua aprovação explícita na conversa antes de chamar apply_policy_proposal. Para uma proposta de ALTO impacto, ele deve pedir que o usuário digite o nome da política e passar exatamente o que ele digitou.

Erros

Depois que a chave de API é autenticada, os erros usam application/problem+json com dois campos extras: code, um identificador estável para ramificação, e retryable, que indica se a mesma solicitação pode ser enviada novamente. Uma chave ausente ou inválida recebe a resposta 401 compartilhada, um pequeno objeto JSON com error, message e status. As ferramentas MCP retornam os mesmos code e message como um erro de ferramenta.

StatusCódigoSignificado
400invalid_argumentsO corpo é inválido: uma configuração desconhecida, um valor não permitido, uma configuração listada duas vezes ou um campo ausente. O detalhe informa qual.
403forbiddenA chave não possui POLICIES_WRITE ou POLICIES_READ, ou a configuração da empresa Alterações de política está desativada.
404not_foundNenhuma política ou revisão visível para esta chave, ou nenhuma proposta com este ID feita por esta chave.
409unsupportedA política não pode ser alterada desta forma: não é uma política do Android ou é gerenciada pelo Nomid.
409not_pendingA proposta não está mais como PENDING. Leia-a para ver seu status: se for SUCCEEDED, a alteração foi feita. Se for EXECUTING, leia-a novamente até que termine. Se for UNCONFIRMED, leia as configurações da política antes de propor novamente. Se for FAILED ou EXPIRED, proponha novamente.
409stale_proposalA política foi salva depois que a proposta foi feita. Nada foi aplicado. Leia a política novamente e proponha novamente.
422refusedA solicitação não pode ser realizada: nada mudaria, a empresa não está conectada ao Android Enterprise ou o novo nome da política não pode ser usado.
422confirmation_requiredA proposta é de impacto HIGH e a confirmação está ausente ou não coincide com o nome da política. Nada foi aplicado, e a proposta permanece pendente até expirar.
429rate_limitedMuitas solicitações de gravação para esta chave de API ou conexão. O cabeçalho Retry-After e os detalhes informam os segundos de espera. retryable é true.
500internal_errorErro inesperado. Leia a proposta antes de tentar novamente: se seu status for FAILED, proponha novamente. Se for UNCONFIRMED, leia as configurações da política para verificar se a alteração foi feita antes de propô-la novamente.

Limites de taxa

Cada chamada de propose e apply conta para o limite de gravação de 10 solicitações por minuto para cada chave de API ou conexão Sign in with Nomid, compartilhado com os endpoints de comando de dispositivo, códigos QR de provisionamento e as ferramentas de gravação do MCP. Chamadas de leitura não contam para o limite.

Revisões e rollback

Cada alteração aplicada salva uma nova revisão da política. Liste as revisões para ver quem alterou a política e quando, e proponha um rollback para desfazer uma alteração.

Escolha o seu horário

Carregando...
Abrir calendário de agendamento