
# Saldırı koruması ayarlarını güncelle

`PATCH /v1/attack-protection` · izin `attack-protection:write`

Saldırı koruması nesnesini bir JSON birleştirme yaması (`application/merge-patch+json`, RFC 7396) ile günceller. `If-Match` zorunludur: eksikse `428`, eski bir `ETag` ise `412` döner. Hiçbir şeyi değiştirmeyen bir yama bir şey yazmaz ve `ETag` aynı kalır.

## İstek

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `If-Match` | başlık | evet | Nesnenin son okunduğu hâldeki `ETag` değeri. Eksikse `428`; eskiyse `412`. |
| gövde | nesne | evet | Birleştirme yaması. Alanlar [Saldırı koruması ayarlarının tamamını değiştir](put.md) sayfasında listelenmiştir. |

## Davranış

- Bölümler özyinelemeli olarak birleşir: yalnızca değiştirdiğiniz alanları gönderin.
- `null` bir alanı ya da tüm bölümü kaldırır; böylece varsayılanına döner. `allowlist` ve `allowed_countries` gibi listeler bütünüyle değiştirilir.
- Birleştirilmiş nesne, bir `PUT` gövdesi gibi aynen denetlenir.

## Yanıt

`200 OK` ile [Saldırı koruması ayarlarını al](get.md) sayfasındaki gibi nesne ve yeni `ETag` değeri.

## Hatalar

| HTTP | kod | Ne zaman |
|---|---|---|
| 400 | `unknown_field` | Bir bölüm ya da alan nesnenin parçası değil. `errors[]` işaretçileri listeler. |
| 400 | `malformed_request` | Gövde geçerli JSON değil ya da `If-Match` başlığı hatalı. |
| 401 | `unauthenticated` | Kimlik bilgisi eksik, geçersiz ya da iptal edilmiş. |
| 403 | `insufficient_permissions` | Kimlik bilgisinde `attack-protection:write` izni yok. |
| 403 | `plan_feature_unavailable` | `risk_policy.mode` `enforce` ama plan bunu içermiyor; gövde `feature` ve `required_plan` alanlarını taşır. |
| 412 | `precondition_failed` | Nesne okuduğunuzdan beri değişti. Yeniden okuyup tekrar deneyin. |
| 413 | `payload_too_large` | Nesne 32 KiB'den büyük. |
| 422 | `validation_failed` | Birleştirilmiş nesnede bir değerin türü yanlış ya da aralık dışında, ya da `block_threshold` değeri `challenge_threshold` değerinden büyük değil. `errors[]` işaretçileri listeler. |
| 422 | `below_security_floor` | Bir değer güvenlik tabanının altında. Her `errors[]` öğesi alanı ve tabanını `detail` içinde adlandırır. |
| 422 | `allowlist_range_too_broad` | Bir izin listesi öneki IPv4 için /8'den, IPv6 için /32'den geniş. |
| 428 | `precondition_required` | `If-Match` eksik. |
| 429 | `rate_limited` | Hız sınırı aşıldı; `Retry-After` süresinden sonra yeniden deneyin. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyor; `Retry-After` süresinden sonra yeniden deneyin. |

Birden fazla hata türü varsa yalnızca en ağır olan döner; sıra şöyledir: `unknown_field`, `validation_failed`, `below_security_floor`, `allowlist_range_too_broad`, `plan_feature_unavailable`. Yazılan değerler yanıtta asla geri gönderilmez.

## Örnek

```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}'
```
