
# Bir bağlantının revizyonlarını listele

`GET /v1/connections/{connection_id}/revisions` · izin `connections:read`

Kurumsal (SAML veya OIDC) bir bağlantının revizyonlarını en yeniden en eskiye doğru listeler: bekleyen taslak (en fazla bir tane) ile son 90 gün içinde yayımlanan veya iptal edilen revizyonlar.

**Etkin** bir bağlantıda, güvenlik açısından kritik bir değişiklik doğrudan uygulanmaz. Bu değişiklik bir **taslak revizyona** dönüşür ve taslağı test edip yayımlayana kadar canlı yapılandırma olduğu gibi kalır:

- Kimlik sağlayıcının varlık kimliğini (entity ID) veya SSO URL'sini değiştiren ya da bir imzalama sabitlemesini (signing pin) kaldıran SAML metadata içe aktarımı ([Metadata içe aktar](import-metadata.md));
- OIDC `issuer` veya `client_id` değişikliği ([OIDC yapılandırmasını kaydet](../connection-oidc/put.md));
- Bağlantının durumu ne olursa olsun her SP host taşıma işlemi ([SP host'unu taşı](migrate-sp-host.md)).

Bir taslağı [Bağlantıyı test et](test.md) işlemiyle ve `revision_id` değeriyle test edin, ardından [yayımlayın](publish-revision.md). Yeni bir taslak, önceki taslağı iptal eder (`discard_reason: superseded`).

Bir revizyon yalnızca yeni, gizli olmayan değerleri (`changes`) gösterir. Yeni bir OIDC istemci sırrı yalnızca `client_secret_change` (`keep`, `replace` veya `clear`) olarak görünür; sır ve son karakterleri hiçbir zaman döndürülmez. Bir revizyonu kimin oluşturduğu veya karara bağladığı burada değil, yönetim denetim günlüğünde (`connection.revision_created`, `connection.revision_published`) kayıtlıdır.

## İstek

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `connection_id` | yol | evet | Kurumsal bağlantı kimliği (`conn_…`). |
| `limit` | sorgu | hayır | Sayfa boyutu, 1–100 (varsayılan 20). |
| `after` | sorgu | hayır | `list_metadata.after` değerinden alınan imleç. İmleç yalnızca onu üreten bağlantı için çalışır. |

Liste yalnızca ileriye doğru sayfalanır: `before` ve `order` desteklenmez (`422`).

## Yanıt

`200 OK`:

```json
{
  "data": [
    {
      "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": {
        "test_id": "conntest_01j9xr4a6b8c0d2e4f6g8h0j2k",
        "status": "passed",
        "failure_reason": null,
        "started_at": "2026-10-28T10:05:00Z",
        "completed_at": "2026-10-28T10:06:00Z"
      }
    }
  ],
  "list_metadata": { "before": null, "after": null }
}
```

| Alan | Açıklama |
|---|---|
| `kind` | `configuration` (kimlik sağlayıcı veya OIDC istemci değişikliği) veya `sp_host` (SP host taşıma). |
| `status` | `draft` (test ve yayımlama bekliyor), `published` veya `discarded`. |
| `decided_at` / `purge_after` | Revizyonun yayımlandığı veya iptal edildiği zaman ile silineceği zaman (90 gün sonra); taslak için `null`. |
| `changes` | Yeni değerler. Revizyonun değiştirmediği alanlar `null` olur. |
| `latest_test` | Bu revizyonun son 24 saat içindeki en son test girişi veya `null`. Yayımlama için `passed` durumunda bir test gerekir. |

## Hatalar

| HTTP | code | Ne zaman |
|---|---|---|
| 400 | `invalid_cursor` | İmleç bozuk veya başka bir bağlantıya ya da sorguya ait. |
| 401 | `unauthenticated` | Kimlik bilgisi eksik, geçersiz veya iptal edilmiş. |
| 403 | `insufficient_permissions` | Kimlik bilgisinde `connections:read` izni yok. |
| 404 | `not_found` | Bağlantı bu ortamda yok veya kurumsal bir bağlantı değil. |
| 422 | `validation_failed` | Bir sorgu parametresi geçersiz (örneğin `limit` 100'ü aşıyor veya `before`). |
| 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 "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/revisions?limit=20" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth connections revisions list conn_01j9xp6q0r1s5t7v9w1x3y5z7b --limit 20
```
