
# Bağlantının SP ana bilgisayarını taşıyın

`POST /v1/connections/{connection_id}:migrate-sp-host` · izin `connections:write`

Kurumsal bir bağlantının SP uç noktalarını (ACS, meta veri, tek oturum kapatma, OIDC geri çağırma) yeni bir ana bilgisayara taşımayı başlatır; örneğin `keenauth.app` ana bilgisayarından doğrulanmış özel alan adınıza. SP URL'leri, kimlik sağlayıcının bunları bildiği için başka şekilde değiştirilemez.

İstek, bağlantının durumundan bağımsız olarak `sp_host` türünde bir **taslak revizyon** oluşturur. Oturum açmalarda henüz hiçbir şey değişmez:

1. `revision_id` ile [SP meta verilerini indirin](sp-metadata.md) ve yeni SP meta verilerini kimlik sağlayıcının yöneticisine verin. Yeni ana bilgisayar yalnızca bu meta verileri ve taslağın test oturum açmasını sunar, başka bir şeyi değil.
2. `revision_id` ile [Bağlantıyı test edin](test.md) adımında taslağı test edin.
3. [Revizyonu yayımlayın](publish-revision.md). Bağlantı artık yeni ana bilgisayarı kullanır. Eski ana bilgisayar, kimlik sağlayıcının güncellenebilmesi için 30 gün daha yanıt vermeye devam eder, ardından `404` döndürür.

Yeni bir taslak, bağlantının önceki taslağını iptal eder. İstek `connection.revision_created` olarak denetlenir.

## İstek

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `connection_id` | yol | evet | Kurumsal bağlantı kimliği (`conn_…`). |
| `Idempotency-Key` | üstbilgi | hayır | Yeniden denenen isteğin güvenli olmasını sağlayan isteğe bağlı anahtar (16-64 karakter). |
| `sp_host` | string | evet | Yeni ana bilgisayar: bu ortamın etkin bir ana bilgisayarı (`keenauth.app` ana bilgisayarı veya doğrulanmış özel alan adı), küçük harfli, bağlantı noktası olmadan. |

## Yanıt

`200 OK`, taslak revizyonla birlikte:

```json
{
  "id": "connrev_01j9xr8c2d4e6f8g0h2j4k6m8n",
  "connection_id": "conn_01j9xp6q0r1s5t7v9w1x3y5z7b",
  "protocol": "saml",
  "kind": "sp_host",
  "status": "draft",
  "discard_reason": null,
  "created_at": "2026-10-28T10:00:00Z",
  "decided_at": null,
  "purge_after": null,
  "superseded_revision_id": null,
  "changes": {
    "sp_host": "login.example.com",
    "idp_entity_id": null,
    "idp_sso_url": null,
    "idp_slo_url": null,
    "certificate_fingerprints": [],
    "mfa_authn_context_values": null,
    "issuer": null,
    "client_id": null,
    "client_auth_method": null,
    "provider_profile": null,
    "client_secret_change": null
  },
  "latest_test": null
}
```

`superseded_revision_id`, bu istekle iptal edilen önceki taslağın kimliğidir (varsa).

## Hatalar

| HTTP | code | Ne zaman |
|---|---|---|
| 400 | `unknown_field` | Gövdede bilinmeyen bir alan var. |
| 401 | `unauthenticated` | Kimlik bilgisi eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Kimlik bilgisinde `connections:write` yok. |
| 404 | `not_found` | Bağlantı bu ortamda yok veya kurumsal bir bağlantı değil. |
| 409 | `conflict` | Önceki SP ana bilgisayarı taşıma işleminin 30 günlük penceresi hâlâ açık veya bağlantının henüz bir protokol yapılandırması yok. |
| 422 | `validation_failed` | `errors[]` `/sp_host` alanını gösterir; `required`, `invalid_value` (küçük harfli bir ana bilgisayar adı değil), `not_in_environment` (bu ortamın etkin bir ana bilgisayarı değil) veya `unchanged` (zaten bağlantının SP ana bilgisayarı). |
| 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. |

## Örnek

```bash
curl -X POST "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b:migrate-sp-host" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"sp_host":"login.example.com"}'
```

```bash
keenauth connections migrate-sp-host conn_01j9xp6q0r1s5t7v9w1x3y5z7b --sp-host login.example.com --yes
```
