Créer ou remplacer une politique d'organisation
PUT /v1/organizations/{org_id}/policies/{policy_kind} · autorisation organizations:write
Remplace l'ensemble de l'objet de paramètres d'un type de politique. Une politique d'organisation ne peut être que plus stricte que le paramètre de l'environnement. La restriction liée au forfait est appliquée par le serveur : les types session et ip_allowlist, ainsi que la liste d'autorisation des AAGUID, nécessitent Enterprise (accessible dans les environnements de développement). Le contenu des paramètres est écrit dans le journal d'audit de gestion ; l'événement organization.updated ne le contient pas.
Requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
org_id |
path | oui | Identifiant de l'organisation (org_…). |
policy_kind |
path | oui | Type de politique : authentication_methods, mfa, phishing_resistant, sso_enforcement, session ou ip_allowlist. Toute autre valeur renvoie 404. |
If-Match |
header | non | Obligatoire lorsque la politique existe (ETag de la dernière lecture) ; à omettre pour créer la politique. * correspond à une politique existante. |
settings |
object | oui | L'objet de paramètres du type. Champs par type : authentication_methods : allowed_connection_ids (conn_…), allow_passkey, allow_password ; mfa : required_for (none, admins, all), allowed_factors (totp, webauthn, sms, email), enrollment_grace_days (0-30) ; phishing_resistant : required_for, aaguid_allowlist (500 maximum) ; sso_enforcement : mode (off, org_context, verified_domains), connection_ids (conn_…), bypass_user_ids (usr_…, 2 maximum) ; session : idle_minutes, absolute_minutes, refresh_idle_days, refresh_absolute_days ; ip_allowlist : cidrs (100 maximum), applies_to (admins, all). |
Corps de la requête :
{
"settings": {
"required_for": "all",
"allowed_factors": [
"totp",
"webauthn"
],
"enrollment_grace_days": 7
}
}
Réponse
201 Created lorsque la politique a été créée, 200 OK lorsqu'elle a été remplacée ; le corps contient la politique et la réponse porte son nouvel ETag.
{
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"policy_kind": "mfa",
"schema_version": 1,
"settings": {
"required_for": "all",
"allowed_factors": [
"totp",
"webauthn"
],
"enrollment_grace_days": 7
},
"updated_at": "2026-10-12T09:30:00.123456Z",
"version": 1
}
Erreurs
| HTTP | code | Cas |
|---|---|---|
| 400 | unknown_field |
Le corps contient un champ absent du schéma ou en lecture seule. |
| 403 | plan_feature_unavailable |
Le type ou la liste d'autorisation des AAGUID nécessite un forfait supérieur ; le problème contient feature et required_plan. |
| 404 | not_found |
L'organisation n'existe pas ou le type est inconnu. |
| 409 | domain_not_verified |
sso_enforcement avec mode verified_domains nécessite un domaine vérifié sur l'organisation. |
| 409 | connection_test_required |
Activer sso_enforcement (depuis off ou en l'absence de politique) nécessite une connexion de test réussie avec la configuration actuelle d'au moins une des connection_ids, au cours des 24 dernières heures. Lancez un test de connexion (POST /v1/connections/{connection_id}:test) puis réessayez. |
| 409 | organization_pending_deletion |
L'organisation attend une suppression en libre-service ; annulez d'abord la suppression. |
| 412 | precondition_failed |
If-Match ne correspond pas à la version actuelle, a été envoyé alors qu'aucune politique de ce type n'existe, ou une autre requête a créé la politique pendant que celle-ci était en cours de création ; relisez la politique. |
| 422 | validation_failed |
Un champ de paramètres est inconnu ou invalide ; errors[] pointe vers /settings/…. |
| 422 | policy_weaker_than_parent |
Le paramètre est moins strict que celui de l'environnement ; errors[] pointe vers le champ concerné. |
| 422 | at_least_one_method |
authentication_methods ne laisse aucune méthode de connexion. |
| 428 | precondition_required |
If-Match est absent alors que la politique existe. |
| 401 | unauthenticated |
L'identifiant est absent, invalide ou révoqué. |
| 403 | insufficient_permissions |
L'identifiant ne dispose pas de l'autorisation requise. |
| 429 | rate_limited |
La limite de débit a été dépassée ; réessayez après le délai indiqué par Retry-After. |
| 503 | service_unavailable |
Une dépendance est temporairement indisponible ; réessayez après le délai indiqué par Retry-After. |
Exemple
curl -X PUT https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/policies/mfa \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"settings":{"required_for":"all","allowed_factors":["totp","webauthn"]}}'