
# Appliquer un profil de correspondance d'attributs prédéfini

`POST /v1/connections/{connection_id}/attribute-mappings:apply-profile` · autorisation `connections:write`

Remplace les règles à cible fixe (e-mail, noms, groupes…) d'une connexion d'entreprise par les règles d'un profil prédéfini : `entra`, `okta`, `google`, `ping`, `jumpcloud` ou `keycloak` pour SAML, `generic` pour OIDC. Les règles `user_metadata.<key>` stockées sont conservées. L'attribut de sujet SAML n'est pas modifié : le sujet est configuré séparément, et le changer rendrait orphelines les identités liées. `If-Match` est requis, comme pour [le remplacement de la liste](put.md). Appliquer un profil déjà appliqué n'écrit rien. L'écriture est journalisée sous `connection.attribute_mappings_replaced` avec le nom du profil.

## Requête

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `connection_id` | path | oui | Identifiant de la connexion d'entreprise (`conn_…`). |
| `If-Match` | header | oui | L'`ETag` de la dernière lecture. Absent : `428` ; obsolète : `412`. |
| `profile` | string | oui | `entra`, `okta`, `google`, `ping`, `jumpcloud`, `keycloak` (SAML) ou `generic` (OIDC). |

## Réponse

`200 OK` avec la liste enregistrée (voir [Récupérer les correspondances d'attributs](get.md)) et le nouvel `ETag`.

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 404 | `not_found` | La connexion n'existe pas dans cet environnement ou n'est pas une connexion d'entreprise. |
| 409 | `conflict` | Le protocole de la connexion ne prend pas en charge les correspondances d'attributs (LDAP). |
| 412 | `precondition_failed` | `If-Match` ne correspond pas à la version actuelle, ou la liste a été modifiée simultanément. |
| 422 | `validation_failed` | `profile` est absent, inconnu ou n'est pas un profil prédéfini du protocole de la connexion (`/profile`), ou une règle `user_metadata` conservée lit un attribut du profil avec un autre NameFormat (`/profile`, `conflicts_with_stored_mappings`). |
| 428 | `precondition_required` | L'en-tête `If-Match` est absent. |
| 401 | `unauthenticated` | L'identifiant d'accès est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant d'accès ne dispose pas de l'autorisation requise. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; réessayez après la durée indiquée par `Retry-After`. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez après la durée indiquée par `Retry-After`. |

## Exemple

```bash
curl -X POST "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/attribute-mappings:apply-profile" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H 'If-Match: "6f1c…"' \
  -d '{"profile":"entra"}'
```

```bash
keenauth connections attribute-mappings apply-profile conn_01j9xp6q0r1s5t7v9w1x3y5z7b --profile entra --if-match '"6f1c…"'
```
