
# Terminer la migration du rpId d'une connexion

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

Termine la migration du rpId en cours d'une connexion par clé d'accès avant la fin de sa fenêtre. Le statut devient `completed_early` (ou `completed` si la fenêtre était déjà terminée), les clés d'accès encore liées à l'ancien rpId sont révoquées (motif `rp_id_changed`), l'origine de l'ancien rpId n'est plus acceptée et l'événement `passkey_rp_id.migration_completed` est publié. Cette action est irréversible : les utilisateurs qui n'ont pas enregistré de clé d'accès sur le nouveau rpId doivent se connecter autrement.

## Requête

| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| `connection_id` | path | oui | ID de la connexion par clé d'accès (`conn_…`). |
| `Idempotency-Key` | header | non | Clé facultative qui rend sûre une requête relancée (16 à 64 caractères). |

Le corps est facultatif ; s'il est présent, il doit être `{}`.

## Réponse

`200 OK` ; la migration close (voir [Obtenir la migration du 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
}
```

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `unknown_field` | Le corps contient un champ. |
| 404 | `not_found` | La connexion n'existe pas ou appartient à un autre environnement. |
| 409 | `no_active_rp_id_migration` | La connexion n'a pas de migration du rpId en cours (par exemple, elle a déjà été terminée). |
| 401 | `unauthenticated` | L'identifiant est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant ne dispose pas de l'autorisation requise. |
| 429 | `rate_limited` | La limite de débit a été dépassée ; réessayez après le délai indiqué par `Retry-After`. |
| 503 | `service_unavailable` | Les nombres de clés d'accès n'ont pas pu être lus, ou une autre dépendance est indisponible ; la migration reste ouverte. Réessayez après le délai indiqué par `Retry-After`. |

## Exemple

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