
# プリセットの属性マッピングプロファイルを適用する

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

エンタープライズ接続の固定ターゲットのルール（メール、氏名、グループなど）を、プリセットプロファイルのルールで置き換えます。プロファイルは、SAMLの場合は `entra`、`okta`、`google`、`ping`、`jumpcloud`、`keycloak`、OIDCの場合は `generic` です。保存済みの `user_metadata.<key>` ルールは保持されます。SAMLのサブジェクト属性は変更されません。サブジェクトは別途設定されており、変更すると連携済みのIDが孤立するためです。[一覧を置き換える](put.md)場合と同様に `If-Match` が必要です。すでに適用済みのプロファイルを適用しても、何も書き込まれません。書き込みは、プロファイル名を含めて `connection.attribute_mappings_replaced` として監査ログに記録されます。

## リクエスト

| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| `connection_id` | path | はい | エンタープライズ接続のID（`conn_…`）。 |
| `If-Match` | header | はい | 前回の読み取りで取得した `ETag`。未指定の場合は `428`、古い場合は `412` になります。 |
| `profile` | string | はい | `entra`、`okta`、`google`、`ping`、`jumpcloud`、`keycloak`（SAML）、または `generic`（OIDC）。 |

## レスポンス

保存されている一覧（[属性マッピングを取得する](get.md)を参照）と新しい `ETag` を含む `200 OK` を返します。

## エラー

| HTTP | code | 発生条件 |
|---|---|---|
| 404 | `not_found` | この環境に接続が存在しないか、エンタープライズ接続ではありません。 |
| 409 | `conflict` | 接続のプロトコルには属性マッピングがありません（LDAP）。 |
| 412 | `precondition_failed` | `If-Match` が現在のバージョンと一致しないか、一覧が同時に変更されました。 |
| 422 | `validation_failed` | `profile` が未指定、不明、または接続のプロトコルのプリセットではありません（`/profile`）。または、保持される `user_metadata` ルールが、別の NameFormat でプロファイル属性を読み取っています（`/profile`、`conflicts_with_stored_mappings`）。 |
| 428 | `precondition_required` | `If-Match` ヘッダーがありません。 |
| 401 | `unauthenticated` | 認証情報が未指定、無効、または取り消されています。 |
| 403 | `insufficient_permissions` | 認証情報に必要な権限がありません。 |
| 429 | `rate_limited` | レート制限を超えました。`Retry-After` の期間が経過してから再試行してください。 |
| 503 | `service_unavailable` | 依存先サービスが一時的に利用できません。`Retry-After` の期間が経過してから再試行してください。 |

## 例

```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…"'
```
