Les programmes s’authentifient avec des clés API. Une clé agit comme le membre qui l’a créée, limitée aux permissions que vous accordez à la clé. Il n’y a pas d’échange de jeton : la clé elle-même est l’identifiant, envoyé à chaque appel.
Les clés API sont gérées par les administrateurs dans API Keys (dans la partie Developer du menu). La création de clés nécessite une offre incluant les clés API.
Créer une clé
- Ouvrez API Keys et sélectionnez New API Key.
- Saisissez un Name (100 caractères maximum) et, facultativement, une Description (500 caractères maximum).
- Sous Module permissions, choisissez ce que la clé peut faire, un module à la fois. Chaque module propose un préréglage Read only ; vous pouvez aussi cocher des permissions individuelles. Utilisez Search modules or permissions… pour en trouver une. Le sélecteur ne liste que les permissions que vous détenez vous-même : « La clé peut faire au plus ce que vous pouvez faire. Si vos propres droits se réduisent plus tard, la clé les perd aussi. »
- Définissez Expires on. La valeur par défaut est 90 jours à partir d’aujourd’hui, un an au maximum (« 90 days by default, at most a year. »).
- Remplissez éventuellement IP allowlist : un sous-réseau par ligne, par exemple
10.0.0.0/8ou203.0.113.7/32. Vide signifie toute adresse autorisée par votre organisation. - Laissez Integration scopes (advanced) vide, sauf si la documentation d’une intégration en demande un (par exemple la provisioning SCIM).
- Sélectionnez Create Key et copiez la clé immédiatement.
Avertissement
« Cette clé ne sera affichée qu’une seule fois. Conservez-la en lieu sûr. » Hermetry ne conserve qu’un hachage. Si vous perdez la clé, créez-en une nouvelle.
Si vous utilisez l’authentification à deux facteurs ou une passkey, Hermetry vous demande de la confirmer avant la création de la clé. Une clé ne peut pas être créée pendant que vous usurpez l’identité d’un membre.
Format de la clé
sk_live_<first 8 characters of the organisation id>_<48 random hexadecimal characters>
Les clés live appartiennent au service de production, les clés test aux installations de test, afin que les deux ne puissent pas être confondues.
Utiliser une clé
Envoyez la clé dans l’en-tête Authorization à chaque appel :
curl "https://<your host>/tenant/<tenantId>/api/iot/devices" \
-H "Authorization: Bearer sk_live_…"
- Une requête avec une clé API n’est évaluée que selon cette clé. Un cookie de navigateur sur la même requête est ignoré.
- Les clés ne fonctionnent que sur les chemins de votre organisation (
/tenant/<tenantId>/api/...). L’organisation de la clé doit correspondre autenantIddu chemin. - Une clé ne fonctionne jamais sur les routes de la plateforme, du compte ou de connexion.
Ce qu’une clé peut faire
À chaque appel, toutes ces conditions doivent être remplies :
- La clé détient la permission requise par la route.
- Le module de la permission est activé pour votre organisation.
- Le membre qui a créé la clé détient la permission maintenant : son rôle, ses groupes et vos politiques d’accès sont pris en compte.
- Le membre est toujours un membre actif et l’organisation est active.
Une clé agit avec le rôle Admin au plus, même si un Owner l’a créée. Ainsi, une clé ne peut jamais détenir les permissions réservées aux Owners (par exemple les commandes brutes des appareils, les clés de signature du firmware, les réglages dangereux des appareils, la rotation d’un secret de webhook), ni les permissions des modules d’identité et d’accès (connexion, comptes, clés API, membres, sessions). Une clé ne peut donc pas créer ni faire tourner des clés.
Clés de service
Une clé cesse normalement de fonctionner lorsque son créateur quitte l’organisation. Un Owner peut ouvrir la clé et sélectionner Mark as service key : elle continue alors de fonctionner après le départ de son créateur (« Yes: survives its creator ») et agit comme l’Owner qui l’a marquée.
Réseaux autorisés
La liste IP d’une clé contient jusqu’à 100 sous-réseaux au format CIDR ; une adresse unique s’écrit /32. Les appels provenant d’ailleurs sont refusés avec 403 « Cette clé API ne peut pas être utilisée depuis l’adresse IP actuelle. » Une clé sans liste propre utilise la liste par défaut de l’organisation (voir Settings ci-dessous). Les listes d’autorisation et de refus IP de votre organisation pour la connexion s’appliquent aussi aux clés.
Expiration
Chaque clé expire. La valeur par défaut est 90 jours ; la date la plus lointaine est à 365 jours, ou moins si votre organisation fixe un maximum inférieur. Les clés expirées cessent de fonctionner d’elles-mêmes. Un administrateur peut aussi balayer les clés expirées (POST /api/api-keys/sweep-expired) pour les marquer inactives et envoyer un événement de webhook api_key.expired par clé.
Faire tourner, désactiver et révoquer
Ouvrez une clé pour voir son Identity, son Usage (dernière utilisation, dernière adresse IP utilisée, nombre total de vérifications), ses Module permissions et son Rotation history.
- Rotate key crée une clé successeur avec les mêmes permissions, scopes, liste de réseaux et environnement. Définissez la Grace window (days) : l’ancienne clé continue de fonctionner jusqu’à son terme. « 0 révoque immédiatement l’ancienne clé. » Copiez le nouveau secret tout de suite.
- Deactivate arrête une clé jusqu’à ce que vous la réactiviez avec Activate. Une clé remplacée ne peut pas être réactivée : « Une clé remplacée ne peut pas être réactivée ; utilisez son successeur. »
- Revoke supprime la clé : « Toutes les intégrations utilisant cette clé cesseront immédiatement de fonctionner. Cette action est irréversible. »
- Edit modifie les permissions de modules de la clé. Vous pouvez retirer n’importe quelle permission, et n’en ajouter que celles que vous détenez. Les scopes d’intégration ne peuvent être que restreints.
En cas d’incident, un administrateur peut révoquer en une seule étape toutes les clés actives de l’organisation.
POST/tenant/{tenantId}/api/api-keys/{apiKeyId}/rotate
Crée une clé successeur. L’ancienne clé continue de fonctionner pendant graceSeconds (de 0 à 2592000, soit 30 jours ; valeur par défaut 86400, soit un jour). 0 arrête immédiatement l’ancienne clé. Le nouveau secret rawKey n’apparaît que dans cette réponse. Seule une clé active, non expirée et non déjà remplacée peut être remplacée (409 sinon).
Corps de la requête application/json
{
"graceSeconds": 86400
}
Exemple curl
curl -X POST 'https://<your-host>/tenant/{tenantId}/api/api-keys/{apiKeyId}/rotate' \
-H 'Content-Type: application/json' \
-d '{"graceSeconds":86400}'
Réponses
201Created
{
"key": {
"name": "Plant ERP",
"…": "…"
},
"rawKey": "sk_live_…"
}
409Conflict
{
"message": "Only an active, unexpired key that has not been rotated yet can be rotated.",
"code": "CONFLICT"
}
Gérer les clés via HTTP
Les clés sont gérées par un administrateur connecté. Une clé API ne peut pas créer, modifier ni faire tourner des clés.
| Méthode | Chemin | Action |
|---|---|---|
| GET | /api/api-keys | Liste les clés (page à partir de 1, pageSize jusqu’à 100, sort, filtres isActive, environment, scopeReview). |
| GET | /api/api-keys/permission-catalog | Les permissions que vous pouvez accorder à une clé, par module. |
| POST | /api/api-keys | Crée une clé. Le secret rawKey n’apparaît que dans cette réponse. |
| PUT | /api/api-keys/{apiKeyId} | Modifie le nom, la description, l’état actif, la liste IP, les permissions, les scopes. |
| DELETE | /api/api-keys/{apiKeyId} | Révoque (supprime) une clé. |
| POST | /api/api-keys/{apiKeyId}/rotate | Fait tourner une clé. |
| POST | /api/api-keys/revoke-all | Désactive toutes les clés actives. |
POST/tenant/{tenantId}/api/api-keys
Crée une clé. Champs : name (obligatoire), description, permissions (identifiants de permissions de module, par exemple iot_device.devices.read), scopes, environment (live ou test), ipAllowlist, expiresAt (ISO 8601). Donnez au moins une permission ou un scope. Sans expiresAt, la clé expire après 90 jours.
Corps de la requête application/json
{
"name": "Plant ERP",
"permissions": [
"iot_device.devices.read",
"telemetry.read"
],
"ipAllowlist": [
"203.0.113.0/24"
]
}
Exemple curl
curl -X POST 'https://<your-host>/tenant/{tenantId}/api/api-keys' \
-H 'Content-Type: application/json' \
-d '{"name":"Plant ERP","permissions":["iot_device.devices.read","telemetry.read"],"ipAllowlist":["203.0.113.0/24"]}'
Réponses
201Created
{
"key": {
"name": "Plant ERP",
"…": "…"
},
"rawKey": "sk_live_…"
}
400Bad Request
{
"message": "Select at least one module permission or integration scope."
}
403Forbidden
{
"message": "An API key can only receive permissions you hold yourself."
}
422Unprocessable Entity
{
"message": "The expiry date must be in the future."
}
Vérifier une clé
POST/tenant/{tenantId}/api/api-keys/verify
Vérifiez une clé envoyée dans l’en-tête x-api-key. Aucune session n’est nécessaire. Vous pouvez envoyer un scope à vérifier dans le corps de la requête. Tout refus de la clé (inconnue, inactive, expirée, autre organisation, scope manquant, adresse non autorisée) renvoie le même 401, de sorte qu’il n’indique pas quelle vérification a échoué. En cas de succès, la réponse contient "valid": true ainsi que les champs publics de la clé.
Corps de la requête application/json
{
"scope": "read"
}
Exemple curl
curl -X POST 'https://<your-host>/tenant/{tenantId}/api/api-keys/verify' \
-H 'Content-Type: application/json' \
-d '{"scope":"read"}'
Réponses
200OK
{
"valid": true,
"key": {
"name": "Plant ERP",
"…": "…"
}
}
400Bad Request
{
"valid": false,
"message": "scope must be a string"
}
401Unauthorized
{
"valid": false,
"message": "Invalid or expired API key."
}
429Too Many Requests
{
"valid": false,
"message": "Too many requests."
}
Paramètres
Les administrateurs définissent la politique de clés de l’organisation dans API Keys > paramètres (le bouton en forme d’engrenage) :
| Paramètre | Par défaut | Signification |
|---|---|---|
| Max Active Keys | 0 (aucune limite) | Nombre de clés actives que l’organisation peut détenir simultanément. |
| Maximum Key Lifetime (days) | 0 (365 jours) | Un plafond plus bas sur la durée maximale d’expiration d’une clé. |
| Require Expiry on Every Key | Désactivé | Une clé créée via l’API doit indiquer son expiresAt. |
| Tenant Subnet Allowlist | Vide (toutes) | Sous-réseaux par défaut pour les clés sans liste propre. |
| Per-Key Rate Limit (requests/minute) | 0 | Appels par clé et par minute. 0 applique la valeur par défaut de la plateforme, soit 1 000 par minute. |
Les autres limites applicables aux clés sont décrites dans Errors and rate limits.
Surveillance des clés
- Chaque clé enregistre quand et depuis quelle adresse elle a été utilisée en dernier.
- Une clé inutilisée pendant 14 jours puis utilisée depuis une nouvelle adresse déclenche un événement d’audit (« A dormant API key was used from a new address »), au plus une fois par clé et par adresse et par heure.
- Chaque appel refusé d’une clé est enregistré dans le journal d’audit.
- Les webhooks peuvent vous informer sur les clés :
api_key.created,api_key.updated,api_key.rotated,api_key.deleted,api_key.expired.
Consultez API key hardening pour une liste de contrôle.

