
# Completare la migrazione dell'rpId di una connessione

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

Termina la migrazione dell'rpId in corso di una connessione passkey prima che la sua finestra finisca. Lo stato diventa `completed_early` (oppure `completed` se la finestra era già terminata), i passkey che sono ancora sul precedente rpId vengono revocati (motivo `rp_id_changed`), l'origin del precedente rpId smette di essere accettato e viene pubblicato l'evento `passkey_rp_id.migration_completed`. L'operazione non può essere annullata: gli utenti che non hanno registrato un passkey sul nuovo rpId devono accedere in un altro modo.

## Richiesta

| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| `connection_id` | path | sì | ID della connessione passkey (`conn_…`). |
| `Idempotency-Key` | header | no | Chiave facoltativa che rende sicura una richiesta ritentata (da 16 a 64 caratteri). |

Il corpo è facoltativo; se presente deve essere `{}`.

## Risposta

`200 OK`; la migrazione chiusa (vedi [Ottenere la migrazione dell'rpId](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
}
```

## Errori

| HTTP | code | Quando |
|---|---|---|
| 400 | `unknown_field` | Il corpo contiene un campo. |
| 404 | `not_found` | La connessione non esiste o appartiene a un altro ambiente. |
| 409 | `no_active_rp_id_migration` | La connessione non ha una migrazione dell'rpId in corso (per esempio, è già stata completata). |
| 401 | `unauthenticated` | La credenziale manca, non è valida o è stata revocata. |
| 403 | `insufficient_permissions` | La credenziale non ha l'autorizzazione richiesta. |
| 429 | `rate_limited` | È stato superato il limite di richieste; riprova dopo il periodo indicato in `Retry-After`. |
| 503 | `service_unavailable` | Non è stato possibile leggere il conteggio dei passkey, oppure un'altra dipendenza non è disponibile; la migrazione resta aperta. Riprova dopo il periodo indicato in `Retry-After`. |

## Esempio

```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
```
