
# Bir bağlantıyı güncelleme

`PATCH /v1/connections/{connection_id}` · izin `connections:write`

Bir bağlantıyı JSON birleştirme yaması (`application/merge-patch+json`, RFC 7396) ile günceller. `If-Match` zorunludur. `key`, `type`, `strategy` ve `org_id` değiştirilemez. Hiçbir şeyi değiştirmeyen bir yama hiçbir şey yazmaz ve sürümü korur. Ayarlar gizli bilgi içermemelidir.

## İstek

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `connection_id` | string | evet | Bağlantı tanımlayıcısı (`conn_…`). |
| `If-Match` | header | evet | Bağlantının son okunduğundaki `ETag` değeri. Yoksa: `428`; eskiyse: `412`. |
| `key` | string | hayır | Değiştirilemez; aynı değer kabul edilir. |
| `type` | string | hayır | Değiştirilemez. |
| `strategy` | string | hayır | Değiştirilemez. |
| `name` | string | hayır | 1-128 karakter. |
| `display_name` | string \| null | hayır | `null` değeri bunu temizler. |
| `status` | string | hayır | `active` veya `inactive`. |
| `org_id` | string \| null | hayır | Değiştirilemez; aynı değer kabul edilir. |
| `allowed_email_domains` | array of strings \| null | hayır | Listeyi değiştirir; `null` veya `[]` listeyi temizler. Oluşturmadaki kurallarla aynıdır; kuruluş bağlantısında yalnızca yeni eklenen alan adları, kuruluşun doğrulanmış alan adlarına karşı denetlenir. |
| `allow_external_domains` | boolean | hayır | Yalnızca `enterprise`. |
| `jit_mode` | string | hayır | `create`, `create_and_update` veya `off`. Yalnızca `enterprise`. |
| `email_trust` | boolean | hayır | Yalnızca `enterprise`. Kuruluş bağlantısında etkinleştirmek için, boş olmayan bir `allowed_email_domains` gerekir ve her alan adı kuruluşun doğrulanmış bir alan adı olmalıdır. |
| `default_role_ids` | array of strings \| null | hayır | Listeyi değiştirir; `null` veya `[]` listeyi temizler. Oluşturmadaki kurallarla aynıdır; yalnızca yeni eklenen roller denetlenir, bu nedenle listede zaten bulunan ve daha sonra silinmiş bir rol güncellemeyi engellemez (oturum açarken atlanır). |
| `trust_idp_mfa` | boolean | hayır | Yalnızca `enterprise`. |
| `settings` | object \| null | hayır | Özyinelemeli olarak birleştirilir (RFC 7396); `null` değerindeki bir üye o anahtarı siler; `null` tüm ayarları temizler. Gizli bilgi yok. |

## Yanıt

`200 OK` ile güncellenmiş bağlantı ve yeni `ETag` döner.

```json
{
  "id": "conn_0k3v8m1q2x9dz4h7s5t6w0y1ab",
  "key": "google",
  "type": "social",
  "strategy": "google",
  "name": "Google",
  "display_name": "Sign in with Google",
  "status": "active",
  "org_id": null,
  "allowed_email_domains": [],
  "allow_external_domains": false,
  "jit_mode": null,
  "email_trust": null,
  "default_role_ids": [],
  "trust_idp_mfa": null,
  "allow_idp_initiated": null,
  "idp_initiated_default_application_id": null,
  "idp_initiated_allowed_application_ids": [],
  "settings": {},
  "created_at": "2026-10-05T09:30:00.123456Z",
  "updated_at": "2026-10-05T09:30:00.123456Z"
}
```

## Passkey ayarları

`type: "passkey"` için `settings` nesnesi yalnızca aşağıdaki anahtarları kabul eder. Diğer herhangi bir anahtar, yanlış bir tür veya aralık dışı bir değer `422 validation_failed` ile ve `/settings/max_credentials_per_user` gibi bir `errors[].pointer` değeri ile reddedilir. `null` değeri varsayılanı ifade eder. Şekil hataları plan hatalarından önce bildirilir.

| Anahtar | Tür | Notlar |
|---|---|---|
| `rp_id` | string | Yoksa, `null` veya boşsa: her giriş ana makinesi kendi rpId değerine sahiptir. Aksi halde ortamın `active` durumundaki özel bir alan adının ana makine adı (küçük harf, IDNA A-label); diğer tüm değerler `422 validation_failed` (`/settings/rp_id`) ile sonuçlanır. Ortamda passkey'ler varsa, [Passkey rpId değerini değiştirme](change-rp-id.md) bağlantısını kullanarak değiştirin. |
| `rp_name` | string | En fazla 128 karakter. |
| `passkey_first_factor_enabled`, `security_key_second_factor_enabled` | boolean | Varsayılan `true`. |
| `user_verification` | string | `preferred` (varsayılan) veya `required`. |
| `max_credentials_per_user` | integer | 1-20, varsayılan 20; kesirli değerler reddedilir. |
| `require_device_bound_passkeys` | boolean | Plana bağlı: `true` için Startup gerekir. |
| `attestation_required` | boolean | Plana bağlı: `true` için Enterprise gerekir. |
| `aaguid_allowlist`, `aaguid_blocklist` | array of UUID strings | Her biri en fazla 500 benzersiz girişe sahip olabilir (hatalar `/settings/<key>/<index>` konumuna işaret eder). Plana bağlı: boş olmayan bir liste için Enterprise gerekir. |
| `related_origins` | array of strings | `https://host[:port]` kaynakları. Plana bağlı: boş olmayan bir liste için Enterprise gerekir. |
| `passkey_enrollment_prompt` | string | `off` veya `after_login` (varsayılan). |

Plana bağlı bir anahtara varsayılan olmayan bir değer yazmak `403 plan_feature_unavailable` ile sonuçlanır ve `feature` ile `required_plan` üyeleri döner. Plan yetkilendirmeleri kullanılabilir olana kadar bu anahtarlar hiçbir ortamda ayarlanamaz; varsayılan bir değer yazmak (`false`, `[]`, `null`) veya anahtarı kaldırmak her zaman mümkündür. Özellik kullanılabilir olduğunda, her `related_origins` girişi ortamın etkin ve doğrulanmış bir özel alan adı olmalıdır; aksi halde istek `422 related_origin_not_verified` ile başarısız olur. Ayarlar, yalnızca yama `settings` içeriyorsa ve birleştirme yamasının uygulanmasından sonra doğrulanır.

## Hatalar

| HTTP | code | Ne zaman |
|---|---|---|
| 400 | `unknown_field` | Yama bilinmeyen veya salt okunur bir alan içeriyor. |
| 404 | `not_found` | Bağlantı yok veya başka bir ortama ait. |
| 409 | `connection_test_required` | Yama bir `enterprise` bağlantısını `active` yapıyor ya da `active` bir bağlantının `allowed_email_domains` listesine alan adı ekliyor; sonucun son 24 saat içinde başarılı bir testi yoksa (bkz. Bir bağlantıyı etkinleştirme). Hiçbir şey yazılmaz. Alan adlarını kaldırma denetlenmez. |
| 409 | `rp_id_change_requires_migration` | Yama, ortamda çalışmayı durduracak passkey'ler varken bir passkey bağlantısının `settings.rp_id` değerini değiştiriyor; [Passkey rpId değerini değiştirme](change-rp-id.md) bağlantısını kullanın. Hiçbir şey yazılmaz. |
| 412 | `precondition_failed` | `If-Match` mevcut sürümle eşleşmiyor. |
| 415 | `unsupported_media_type` | İçerik türü `application/merge-patch+json` değil. |
| 422 | `validation_failed` | Bir değer geçersiz veya değiştirilemez bir alan değişti (`code: immutable`). |
| 422 | `related_origin_not_verified` | İlgili bir kaynak, ortamın doğrulanmış bir özel alan adı değil. |
| 403 | `plan_feature_unavailable` | Plan, ayarladığınız bir ayarı içermiyor (`feature`, `required_plan` üyeleri), örneğin `attestation_required`. |
| 428 | `precondition_required` | `If-Match` başlığı eksik. |
| 401 | `unauthenticated` | Kimlik bilgisi eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Kimlik bilgisinin gerekli izni yok. |
| 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 (örneğin, bir `rp_id` değişikliğinin passkey denetimi çalıştırılamadı, bu nedenle hiçbir şey yazılmadı); `Retry-After` süresinden sonra yeniden deneyin. |

## Örnek

```bash
curl -X PATCH https://api.eu.keenauth.com/v1/connections/conn_0k3v8m1q2x9dz4h7s5t6w0y1ab \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "1"' \
  -d '{"display_name":"Sign in with Google"}'
```
