Codes QR d'approvisionnement

Créer un code QR qui enrôle un appareil Android neuf ou réinitialisé aux paramètres d'usine au sein de votre entreprise avec une politique donnée.

Fonctionnement

Chaque requête crée un nouveau jeton d'enrôlement pour la politique et renvoie un code QR qui le contient. Le code cesse de fonctionner 24 heures après sa création ; la réponse indique l'heure exacte dans expiresAt. Créez un code lorsque quelqu'un s'apprête à configurer des appareils, et créez-en un nouveau plutôt que de réutiliser un ancien.

Pour utiliser le code, appuyez six fois sur l'écran d'accueil de l'assistant de configuration de l'appareil, connectez-vous au Wi-Fi si demandé, et scannez-le. Un appareil ne peut être enrôlé de cette manière que s'il est neuf ou s'il a été réinitialisé aux paramètres d'usine.

Les politiques réservées à la VR ne peuvent pas être approvisionnées avec un code QR : leurs appareils sont approvisionnés avec Nomid Ops via USB.

Prérequis

  • Une clé API avec l'autorisation PROVISIONING, combinée à POLICIES_READ. Seul un utilisateur du portail autorisé à approvisionner des appareils et ayant accès à toutes les politiques peut créer une clé avec PROVISIONING.
  • L'entreprise doit avoir finalisé son enrôlement Android Enterprise.
  • Les clients MCP qui se connectent avec « Sign in with Nomid » au lieu d'une clé API ont besoin de la portée mcp:provisioning, et le paramètre d'approvisionnement de l'entreprise sous Accès agent IA dans le portail doit être activé.

Point de terminaison

Le chemin est relatif à l'URL de base de l'API et nécessite l'en-tête X-API-Key. Une requête réussie renvoie 201 Created.

MéthodePoint d'accèsDescription
POST/policies/{policyId}/provisioning-qr-codesCréer un code QR d'approvisionnement pour une politique, avec un nouveau jeton d'enrôlement

Corps de la requête

Chaque champ est facultatif : envoyez un objet JSON vide pour un code sans Wi-Fi et avec l'utilisation personnelle par défaut. Un champ inconnu renvoie 400.

ChampValeursDescription
personalUsageUNSPECIFIED, ALLOWED, DISALLOWED, USERLESSComment l'appareil est utilisé : ALLOWED pour un profil professionnel sur un appareil personnel, DISALLOWED pour un appareil d'entreprise entièrement géré, USERLESS pour un appareil dédié sans compte utilisateur. UNSPECIFIED est la valeur par défaut lorsqu'elle est omise.
wifiSsidUn réseau Wi-Fi auquel l'appareil se connecte lors de la configuration. Jusqu'à 32 octets en UTF-8. Les espaces autour sont conservés comme faisant partie du nom.
wifiPasswordLe mot de passe de wifiSsid, jusqu'à 63 octets en UTF-8. Un mot de passe WPA comporte au moins 8 octets. Une clé WEP est composée de 5 ou 13 caractères ASCII, ou de 10 ou 26 chiffres hexadécimaux. N'est jamais renvoyé.
wifiSecurityNONE, WPA, WEPLa sécurité de wifiSsid. Prend la valeur WPA par défaut lorsqu'un mot de passe est fourni, et NONE dans le cas contraire. NONE ne prend aucun mot de passe, et WPA et WEP en nécessitent un.
wifiHiddenIndique si wifiSsid est un réseau masqué. La valeur par défaut est false.

wifiPassword, wifiSecurity et wifiHidden nécessitent wifiSsid.

Réponse

ChampDescription
policyIdLe nom de chemin de la stratégie, le policyId avec lequel les appareils s'enrôlent.
policyNameLe nom d'affichage de la stratégie.
personalUsageLe mode d'utilisation personnelle du jeton d'enrôlement.
expiresAtQuand le code QR cesse d'enrôler des appareils.
wifiSsidLe réseau Wi-Fi auquel l'appareil se connecte lors de la configuration. Omis lorsqu'aucun n'a été fourni.
imageL'image du code QR : mimeType (image/png) et data, les octets de l'image en base64.
portalUrlUn lien vers la stratégie dans le portail Nomid.

Exemple

Créez un code pour un appareil entièrement géré qui se connecte à un réseau WPA lors de la configuration. jq construit le corps à partir d'une variable d'environnement, afin que le mot de passe soit correctement échappé et ne se retrouve pas dans l'historique de votre 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"
}

Décodez data depuis base64 pour obtenir le PNG. Les données de l'image sont raccourcies ici.

Erreur : stratégie réservée à la VR

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
}

Erreurs

Une fois la clé d'API authentifiée, les erreurs utilisent application/problem+json avec deux champs supplémentaires : code, un identifiant stable pour le branchement, et retryable, qui indique si la même requête peut être envoyée à nouveau. Un corps illisible constitue l'exception, décrite dans la ligne 400. Une clé manquante ou non valide reçoit la réponse 401 partagée, un petit objet JSON avec error, message et status. L'outil MCP renvoie les mêmes code et message sous forme d'erreur d'outil.

StatutCodeSignification
400invalid_argumentsUne option n'est pas valide : une valeur personalUsage ou wifiSecurity inconnue, un champ Wi-Fi sans wifiSsid, ou un nom Wi-Fi, un mot de passe ou une sécurité qui ne respecte pas les règles ci-dessus. Le champ detail indique de laquelle il s'agit. Un corps qui n'est pas du JSON valide, ou qui contient un champ inconnu, renvoie également 400, sous la forme d'un objet problem details sans code ni retryable.
401-La clé d'API est manquante, non valide, expirée ou révoquée.
403forbiddenLa clé ne dispose pas de PROVISIONING ou POLICIES_READ.
404not_foundAucune stratégie avec ce policyId dans l'entreprise de la clé.
409unsupportedLa stratégie ne peut pas provisionner d'appareils avec un code QR : il s'agit d'une stratégie réservée à la VR, ou l'entreprise n'a pas finalisé son inscription à Android Enterprise.
422refusedLa stratégie a été supprimée.
429rate_limitedTrop de requêtes d'écriture pour cette clé. L'en-tête Retry-After et le champ detail indiquent le nombre de secondes à attendre. retryable est true.
502provider_errorGoogle n'a pas créé le jeton d'inscription. Aucun code QR n'a été créé. retryable est true : réessayez dans un instant.

Limites de débit

Chaque requête est décomptée de la limite d'écriture de 10 requêtes par minute et par clé, partagée avec les points de terminaison de commande d'appareil et de modification de stratégie, ainsi qu'avec les outils d'écriture MCP. Une connexion Sign in with Nomid qui appelle create_provisioning_qr_code utilise la même limite, décomptée par connexion. Les requêtes qui échouent aux vérifications d'autorisations ou à la validation des arguments ne sont pas prises en compte.

Outil MCP

L'outil MCP create_provisioning_qr_code prend les mêmes options, avec policyId comme argument. Il renvoie le code QR sous forme de bloc d'image MCP, afin que l'assistant puisse l'afficher à l'utilisateur sans le lire.

Serveur MCP

Choisissez votre horaire

Chargement...
Ouvrir le calendrier de réservation