
# Subject-Konflikte einer Verbindung auflisten

`GET /v1/connections/{connection_id}/subject-conflicts` · Berechtigung `users:read`

Listet die SSO-Subject-Konflikte einer Enterprise-Verbindung (SAML oder OIDC) auf, neueste zuerst.

Ein Subject-Konflikt wird erfasst, wenn der Identitätsanbieter ein **neues Subject** mit der verifizierten E-Mail-Adresse eines Benutzers sendet, der bereits unter einem anderen Subject mit derselben Verbindung verknüpft ist. Das geschieht zum Beispiel, wenn das Postfach einer ehemaligen Mitarbeiterin einem neuen Mitarbeiter zugewiesen wird. KeenAuth verknüpft das neue Subject nicht automatisch: Die Anmeldung wird mit `sso_subject_conflict` abgelehnt, und für einen Administrator wird ein Datensatz angelegt, der [aufgelöst](resolve-subject-conflict.md) werden kann.

- Solange ein Datensatz offen ist, aktualisieren weitere Anmeldungen mit demselben Subject diesen Datensatz, statt einen neuen anzulegen.
- Ein offener Datensatz läuft 30 Tage nach seiner Erstellung ab.
- Datensätze enthalten nie das externe Subject oder die E-Mail-Adresse.

Die Berechtigung ist `users:read`, weil ein Datensatz ein Benutzerkonto betrifft; zum Auflösen wird `users:write` benötigt.

## Anfrage

| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| `connection_id` | path | ja | Verbindungs-ID (`conn_…`). |
| `limit` | query | nein | Seitengröße, 1–100 (Standard 20). |
| `after` / `before` | query | nein | Cursor aus `list_metadata`. Ein Cursor funktioniert nur für die Verbindung, die ihn erzeugt hat. |
| `order` | query | nein | `desc` (Standard) oder `asc`, nach Erstellungszeitpunkt. |

## Antwort

`200 OK`:

```json
{
  "data": [
    {
      "id": "sscf_01j9xr4a6b8c0d2e4f6g8h0j2k",
      "connection_id": "conn_01j9xp6q0r1s5t7v9w1x3y5z7b",
      "user_id": "usr_01j9xm2n4p6q8r0s2t4v6w8x0y",
      "status": "open",
      "resolution": null,
      "created_at": "2026-10-28T10:00:00Z",
      "last_seen_at": "2026-10-28T10:05:00Z",
      "expires_at": "2026-11-27T10:00:00Z",
      "closed_at": null
    }
  ],
  "list_metadata": { "before": null, "after": null }
}
```

| Feld | Beschreibung |
|---|---|
| `user_id` | Der Benutzer, dem die verifizierte E-Mail-Adresse gehört und der bereits unter einem anderen Subject mit dieser Verbindung verknüpft ist. |
| `status` | `open` (wartet auf eine Entscheidung), `resolved` oder `expired` (30 Tage nach seiner Erstellung ohne Entscheidung geschlossen). |
| `resolution` | `same_person` oder `different_person`; wird nur gesetzt, wenn `status` `resolved` ist. |
| `last_seen_at` | Der letzte Anmeldeversuch mit dem neuen Subject. |
| `closed_at` | Zeitpunkt, zu dem der Datensatz aufgelöst oder abgelaufen ist; `null`, solange er offen ist. Ein abgelaufener Datensatz kann ebenfalls `null` anzeigen. |

## Fehler

| HTTP | Code | Wann |
|---|---|---|
| 400 | `invalid_cursor` | Der Cursor ist fehlerhaft oder gehört zu einer anderen Verbindung oder Abfrage. |
| 401 | `unauthenticated` | Die Anmeldedaten fehlen, sind ungültig oder widerrufen. |
| 403 | `insufficient_permissions` | Die Anmeldedaten haben nicht `users:read`. |
| 404 | `not_found` | Die Verbindung existiert in dieser Umgebung nicht. |
| 422 | `validation_failed` | Ein Abfrageparameter ist ungültig (zum Beispiel `limit` über 100). |
| 429 | `rate_limited` | Das Ratenlimit wurde überschritten; wiederholen Sie die Anfrage nach der Zeit aus `Retry-After`. |
| 503 | `service_unavailable` | Eine Abhängigkeit ist vorübergehend nicht verfügbar; wiederholen Sie die Anfrage nach der Zeit aus `Retry-After`. |

## Beispiel

```bash
curl "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/subject-conflicts?limit=20" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth connections subject-conflicts list conn_01j9xp6q0r1s5t7v9w1x3y5z7b --limit 20
```
