Códigos QR de provisionamento
Crie um código QR que inscreve um dispositivo Android novo ou restaurado para os padrões de fábrica na sua empresa com uma determinada política.
Como funciona
Cada solicitação cria um novo token de inscrição para a política e retorna um código QR que o contém. O código para de funcionar 24 horas após a criação; a resposta informa o horário exato em expiresAt. Crie um código quando alguém estiver prestes a configurar dispositivos e crie um novo em vez de reutilizar um antigo.
Para usar o código, toque na tela de boas-vindas do assistente de configuração do dispositivo seis vezes, conecte-se ao Wi-Fi se solicitado e escaneie-o. Um dispositivo só pode ser inscrito dessa forma quando for novo ou tiver sido restaurado para os padrões de fábrica.
Políticas exclusivas para VR não podem ser provisionadas com um código QR: seus dispositivos são provisionados com o Nomid Ops via USB.
Requisitos
- Uma chave de API com a permissão PROVISIONING, combinada com POLICIES_READ. Somente um usuário do portal que tenha permissão para provisionar dispositivos e acesso a todas as políticas pode criar uma chave com PROVISIONING.
- A empresa deve ter concluído sua inscrição no Android Enterprise.
- Clientes MCP que se conectam com Sign in with Nomid em vez de uma chave de API precisam do escopo mcp:provisioning, e a configuração de provisionamento da empresa em Acesso de agente de IA no portal deve estar ativada.
Endpoint
O caminho é relativo à URL base da API e requer o cabeçalho X-API-Key. Uma solicitação bem-sucedida retorna 201 Created.
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /policies/{policyId}/provisioning-qr-codes | Criar um código QR de provisionamento para uma política, com um novo token de inscrição |
Corpo da solicitação
Todos os campos são opcionais: envie um objeto JSON vazio para obter um código sem Wi-Fi e com o uso pessoal padrão. Um campo desconhecido retorna 400.
| Campo | Valores | Descrição |
|---|---|---|
| personalUsage | UNSPECIFIED, ALLOWED, DISALLOWED, USERLESS | Como o dispositivo é usado: ALLOWED para um perfil de trabalho em um dispositivo pessoal, DISALLOWED para um dispositivo corporativo totalmente gerenciado, USERLESS para um dispositivo dedicado sem conta de usuário. UNSPECIFIED é o padrão quando omitido. |
| wifiSsid | Uma rede Wi-Fi à qual o dispositivo se conecta durante a configuração. Até 32 bytes em UTF-8. Espaços ao redor são mantidos como parte do nome. | |
| wifiPassword | A senha de wifiSsid, até 63 bytes em UTF-8. Uma senha WPA tem pelo menos 8 bytes. Uma chave WEP tem 5 ou 13 caracteres ASCII, ou 10 ou 26 dígitos hexadecimais. Nunca retornada. | |
| wifiSecurity | NONE, WPA, WEP | A segurança de wifiSsid. O padrão é WPA quando uma senha é informada e NONE caso contrário. NONE não aceita senha, e WPA e WEP exigem uma. |
| wifiHidden | Se wifiSsid é uma rede oculta. O padrão é false. |
wifiPassword, wifiSecurity e wifiHidden precisam de wifiSsid.
Resposta
| Campo | Descrição |
|---|---|
| policyId | O nome do caminho da política, o policyId com o qual os dispositivos se inscrevem. |
| policyName | O nome de exibição da política. |
| personalUsage | O modo de uso pessoal do token de inscrição. |
| expiresAt | Quando o código QR para de inscrever dispositivos. |
| wifiSsid | A rede Wi-Fi à qual o dispositivo se conecta durante a configuração. Omitido quando nenhuma foi informada. |
| image | A imagem do código QR: mimeType (image/png) e data, os bytes da imagem em base64. |
| portalUrl | Um link para a política no portal Nomid. |
Exemplo
Crie um código para um dispositivo totalmente gerenciado que se conecta a uma rede WPA durante a configuração. O jq compila o corpo a partir de uma variável de ambiente, garantindo que a senha seja escapada corretamente e não vá parar no histórico do shell.
curl -X POST "https://api.nomid.tech/emm/api/v1/policies/p7k2m9qa4xz/provisioning-qr-codes" \
-H "X-API-Key: $NOMID_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg password "$WIFI_PASSWORD" \
'{personalUsage: "DISALLOWED", wifiSsid: "Warehouse", wifiPassword: $password}')" HTTP/1.1 201 Created
{
"policyId": "p7k2m9qa4xz",
"policyName": "Warehouse scanners",
"personalUsage": "DISALLOWED",
"expiresAt": "2026-10-11T14:30:00Z",
"wifiSsid": "Warehouse",
"image": {
"mimeType": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAA..."
},
"portalUrl": "https://portal.nomid.tech/#/acme/acme/policy/p7k2m9qa4xz"
} Decodifique data de base64 para obter o PNG. Os dados da imagem estão abreviados aqui.
Erro: política apenas para RV
HTTP/1.1 409 Conflict
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Conflict",
"status": 409,
"detail": "Policy q4vr8headset is a VR-only policy: its devices are provisioned with Nomid Ops over USB, not with a QR code.",
"instance": "/emm/api/v1/policies/q4vr8headset/provisioning-qr-codes",
"code": "unsupported",
"retryable": false
} Erros
Depois que a chave de API é autenticada, os erros usam application/problem+json com dois campos adicionais: code, um identificador estável para ramificação, e retryable, que indica se a mesma solicitação pode ser enviada novamente. Um corpo que não pode ser lido é a exceção, descrita na linha 400. Uma chave ausente ou inválida recebe a resposta 401 compartilhada, um pequeno objeto JSON com error, message e status. A ferramenta MCP retorna o mesmo code e message como um erro de ferramenta.
| Status | Código | Significado |
|---|---|---|
| 400 | invalid_arguments | Uma opção é inválida: um valor desconhecido de personalUsage ou wifiSecurity, um campo de Wi-Fi sem wifiSsid, ou um nome, senha ou segurança de Wi-Fi que não atenda às regras acima. O detalhe informa qual. Um corpo que não seja um JSON válido ou que contenha um campo desconhecido também retorna 400, como detalhes do problema sem code ou retryable. |
| 401 | - | A chave de API está ausente, inválida, expirada ou revogada. |
| 403 | forbidden | A chave não possui PROVISIONING ou POLICIES_READ. |
| 404 | not_found | Nenhuma política com este policyId na empresa da chave. |
| 409 | unsupported | A política não pode provisionar dispositivos com um código QR: é uma política apenas para VR ou a empresa não concluiu sua inscrição no Android Enterprise. |
| 422 | refused | A política foi excluída. |
| 429 | rate_limited | Muitas solicitações de gravação para esta chave. O cabeçalho Retry-After e os detalhes informam os segundos de espera. retryable é true. |
| 502 | provider_error | O Google não criou o token de inscrição. Nenhum código QR foi criado. retryable é true: tente novamente em instantes. |
Limites de taxa
Cada solicitação conta para o limite de gravação de 10 solicitações por minuto por chave, compartilhado com os endpoints de comando de dispositivo e alteração de política e as ferramentas de gravação do MCP. Uma conexão do Sign in with Nomid que chama create_provisioning_qr_code consome o mesmo limite, contabilizado por conexão. Solicitações que falham nas verificações de permissão ou na validação de argumentos não são contabilizadas.
Ferramenta MCP
A ferramenta MCP create_provisioning_qr_code aceita as mesmas opções, com policyId como argumento. Ela retorna o código QR como um bloco de imagem MCP, para que o assistente possa exibi-lo ao usuário sem precisar lê-lo.