
# rpId-Migration einer Verbindung abschließen

`POST /v1/connections/{connection_id}:complete-rp-id-migration` · Berechtigung `connections:write`

Beendet die laufende rpId-Migration einer Passkey-Verbindung vor Ende ihres Fensters. Der Status wird zu `completed_early` (oder `completed`, falls das Fenster bereits abgelaufen war), die Passkeys, die noch auf der bisherigen rpId liegen, werden widerrufen (Grund `rp_id_changed`), der Ursprung der bisherigen rpId wird nicht mehr akzeptiert und das Ereignis `passkey_rp_id.migration_completed` wird veröffentlicht. Dies kann nicht rückgängig gemacht werden: Nutzer, die noch keinen Passkey auf der neuen rpId registriert haben, müssen sich auf andere Weise anmelden.

## Anfrage

| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| `connection_id` | path | ja | Passkey-Verbindungs-ID (`conn_…`). |
| `Idempotency-Key` | header | nein | Optionaler Schlüssel, der einen wiederholten Aufruf sicher macht (16-64 Zeichen). |

Der Body ist optional; falls vorhanden, muss er `{}` sein.

## Antwort

`200 OK`; die abgeschlossene Migration (siehe [rpId-Migration abrufen](rp-id-migration.md)).

```json
{
  "id": "rpm_01j9xr4a6b8c0d2e4f6g8h0j2k",
  "connection_id": "conn_01j9xp6q0r1s5t7v9w1x3y5z7b",
  "previous_rp_id": null,
  "new_rp_id": "login.example.com",
  "status": "completed_early",
  "started_at": "2026-10-27T10:00:00Z",
  "ends_at": "2027-01-25T10:00:00Z",
  "completed_at": "2026-12-01T09:00:00Z",
  "revoked_count": 12,
  "new_registration_count": 340,
  "fallback_enabled_by_migration": false
}
```

## Fehler

| HTTP | Code | Wann |
|---|---|---|
| 400 | `unknown_field` | Der Body enthält ein Feld. |
| 404 | `not_found` | Die Verbindung existiert nicht oder gehört zu einer anderen Umgebung. |
| 409 | `no_active_rp_id_migration` | Für die Verbindung läuft keine rpId-Migration (zum Beispiel, weil sie bereits abgeschlossen wurde). |
| 401 | `unauthenticated` | Die Anmeldedaten fehlen, sind ungültig oder widerrufen. |
| 403 | `insufficient_permissions` | Die Anmeldedaten haben nicht die erforderliche Berechtigung. |
| 429 | `rate_limited` | Das Rate-Limit wurde überschritten; wiederholen Sie den Aufruf nach dem Zeitraum `Retry-After`. |
| 503 | `service_unavailable` | Die Anzahl der Passkeys konnte nicht gelesen werden oder eine andere Abhängigkeit ist nicht verfügbar; die Migration bleibt geöffnet. Wiederholen Sie den Aufruf nach dem Zeitraum `Retry-After`. |

## Beispiel

```bash
curl -X POST "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b:complete-rp-id-migration" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

```bash
keenauth connections complete-rp-id-migration conn_01j9xp6q0r1s5t7v9w1x3y5z7b --yes
```
