
# 攻撃保護の設定を更新

`PATCH /v1/attack-protection` · 権限 `attack-protection:write`

JSON マージパッチ（`application/merge-patch+json`、RFC 7396）で攻撃保護オブジェクトを更新します。`If-Match` は必須です。ない場合は `428`、古い `ETag` の場合は `412` が返されます。何も変更しないパッチは何も書き込まず、`ETag` も変わりません。

## リクエスト

| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| `If-Match` | ヘッダー | はい | 最後に読み取ったオブジェクトの `ETag`。ない場合は `428`、古い場合は `412`。 |
| ボディ | オブジェクト | はい | マージパッチ。フィールドは [攻撃保護の設定を置き換え](put.md) に一覧があります。 |

## 動作

- セクションは再帰的にマージされます。変更するフィールドだけを送信してください。
- `null` はフィールドまたはセクション全体を削除し、既定値に戻します。`allowlist` や `allowed_countries` のようなリストは全体が置き換えられます。
- マージ後のオブジェクトは、`PUT` のボディとまったく同じように検査されます。

## レスポンス

[攻撃保護の設定を取得](get.md) と同じオブジェクトと新しい `ETag` を含む `200 OK` です。

## エラー

| HTTP | コード | 発生条件 |
|---|---|---|
| 400 | `unknown_field` | セクションまたはフィールドがオブジェクトに含まれていない。`errors[]` にポインターが一覧表示されます。 |
| 400 | `malformed_request` | ボディが有効な JSON ではない、または `If-Match` ヘッダーの形式が不正。 |
| 401 | `unauthenticated` | 認証情報がない、無効、または失効している。 |
| 403 | `insufficient_permissions` | 認証情報に `attack-protection:write` がない。 |
| 403 | `plan_feature_unavailable` | `risk_policy.mode` が `enforce` だが、プランに含まれていない。ボディには `feature` と `required_plan` が含まれます。 |
| 412 | `precondition_failed` | 読み取り後にオブジェクトが変更されています。もう一度読み取ってから再試行してください。 |
| 413 | `payload_too_large` | オブジェクトが 32 KiB を超えている。 |
| 422 | `validation_failed` | 値の型が誤っているか範囲外である、または `block_threshold` が `challenge_threshold` より大きくない。`errors[]` にポインターが一覧表示されます。 |
| 422 | `below_security_floor` | 値がセキュリティの下限を下回っている。`errors[]` の各項目は、`detail` でフィールドと下限を示します。 |
| 422 | `allowlist_range_too_broad` | 許可リストのプレフィックスが、IPv4 では /8、IPv6 では /32 より広い。 |
| 428 | `precondition_required` | `If-Match` がない。 |
| 429 | `rate_limited` | レート制限を超えました。`Retry-After` の時間が経過してから再試行してください。 |
| 503 | `service_unavailable` | 依存先が一時的に利用できません。`Retry-After` の時間が経過してから再試行してください。 |

複数の種類のエラーがある場合は、最も重大なものだけが次の順序で返されます: `unknown_field`、`validation_failed`、`below_security_floor`、`allowlist_range_too_broad`、`plan_feature_unavailable`。書き込んだ値がレスポンスに戻されることはありません。

## 例

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/attack-protection \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "3f1c9a0b5d7e2a4c6b8d0e1f2a3b4c5d"' \
  -d '{"risk_policy": {"block_threshold": 9}, "sms_protection": null}'
```
