
# Completar la migración del rpId de una conexión

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

Finaliza la migración de rpId en curso de una conexión de clave de acceso antes de que termine su periodo. El estado pasa a `completed_early` (o a `completed` si el periodo ya había terminado), las claves de acceso que sigan en el rpId anterior se revocan (motivo `rp_id_changed`), el origen del rpId anterior deja de aceptarse y se publica el evento `passkey_rp_id.migration_completed`. Esta acción no se puede deshacer: los usuarios que no hayan registrado una clave de acceso en el nuevo rpId deberán iniciar sesión de otra forma.

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `connection_id` | ruta | sí | ID de la conexión de clave de acceso (`conn_…`). |
| `Idempotency-Key` | encabezado | no | Clave opcional que hace seguro reintentar una solicitud (de 16 a 64 caracteres). |

El cuerpo es opcional; si se incluye, debe ser `{}`.

## Respuesta

`200 OK`; la migración cerrada (consulte [Obtener la migración del 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
}
```

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El cuerpo contiene un campo. |
| 404 | `not_found` | La conexión no existe o pertenece a otro entorno. |
| 409 | `no_active_rp_id_migration` | La conexión no tiene una migración de rpId en curso (por ejemplo, ya se completó). |
| 401 | `unauthenticated` | La credencial falta, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene el permiso necesario. |
| 429 | `rate_limited` | Se superó el límite de solicitudes; reintente después del periodo indicado en `Retry-After`. |
| 503 | `service_unavailable` | No se pudieron leer los recuentos de claves de acceso, o otra dependencia no está disponible; la migración sigue abierta. Reintente después del periodo indicado en `Retry-After`. |

## Ejemplo

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