
# 연결의 rpId 마이그레이션 완료

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

마이그레이션 기간이 끝나기 전에 패스키 연결의 실행 중인 rpId 마이그레이션을 종료합니다. 상태는 `completed_early`(기간이 이미 끝났다면 `completed`)로 바뀌고, 이전 rpId에 남아 있는 패스키는 폐기되며(사유 `rp_id_changed`), 이전 rpId의 origin은 더 이상 허용되지 않고, `passkey_rp_id.migration_completed` 이벤트가 게시됩니다. 이 작업은 되돌릴 수 없습니다. 새 rpId에 패스키를 등록하지 않은 사용자는 다른 방법으로 로그인해야 합니다.

## 요청

| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| `connection_id` | path | 예 | 패스키 연결 ID(`conn_…`). |
| `Idempotency-Key` | header | 아니요 | 재시도 요청을 안전하게 만드는 선택 키(16~64자). |

요청 본문은 선택 사항이며, 포함하는 경우 반드시 `{}`이어야 합니다.

## 응답

`200 OK`; 종료된 마이그레이션([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
}
```

## 오류

| HTTP | code | 발생 조건 |
|---|---|---|
| 400 | `unknown_field` | 요청 본문에 필드가 있습니다. |
| 404 | `not_found` | 연결이 존재하지 않거나 다른 환경에 속합니다. |
| 409 | `no_active_rp_id_migration` | 연결에 실행 중인 rpId 마이그레이션이 없습니다(예: 이미 완료됨). |
| 401 | `unauthenticated` | 자격 증명이 없거나, 유효하지 않거나, 폐기되었습니다. |
| 403 | `insufficient_permissions` | 자격 증명에 필요한 권한이 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After` 기간 후에 다시 시도하십시오. |
| 503 | `service_unavailable` | 패스키 수를 읽을 수 없거나 다른 종속 서비스를 사용할 수 없습니다. 마이그레이션은 계속 열린 상태로 유지됩니다. `Retry-After` 기간 후에 다시 시도하십시오. |

## 예시

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