---
title: "Get 2FA reset status"
method: GET
path: "/sca/factors/reset/{resetId}"
tags: ["Strong Customer Authentication"]
---

# Get 2FA reset status

`GET /sca/factors/reset/{resetId}`

Poll the status of an in-progress 2FA reset until it reaches the liveness-passed value, after which the reset can be completed.

This endpoint is only meaningful for customers in a region where SCA is required (e.g. EU). For customers outside SCA-regulated regions, this returns `409`.

## Response `200`

The current reset status.

- TwoFactorResetStatus — The status of an in-progress 2FA reset, polled until it reaches a terminal value.
  - `status` 'INITIATED' | 'PENDING_REVIEW' | 'LIVENESS_PASSED' | 'COMPLETED' | 'REJECTED' | 'EXPIRED', required — The reset status. | Value | Terminal | Meaning | |-------|----------|---------| | `INITIATED` | no | Reset started; liveness not yet submitted. Keep polling. | | `PENDING_REVIEW` | no | Liveness submitted; under review. Keep polling. | | `LIVENESS_PASSED` | no | Liveness passed; call the complete endpoint to finish the reset. | | `COMPLETED` | **yes** | Reset finished; the lost factor is cleared and re-enrollment can begin. | | `REJECTED` | **yes** | Liveness failed. Stop polling; start a new reset. | | `EXPIRED` | **yes** | The reset window closed before it completed. Stop polling; start a new reset. | Stop polling on any terminal value.
  - `factor` 'SMS_OTP' | 'TOTP' | 'PASSKEY', required — A Strong Customer Authentication factor. | Factor | Description | |--------|-------------| | `SMS_OTP` | One-time code sent by SMS to the customer's verified phone. Requires no prior enrollment. | | `TOTP` | Time-based one-time code from an authenticator app. Requires enrollment. Not valid for per-transaction challenges (cannot carry dynamic linking). | | `PASSKEY` | WebAuthn passkey assertion. Requires enrollment. |
  - `enrollmentStatus` 'PENDING' | 'COMPLETED' | 'null', nullable — The enrollment status of the replacement factor. `PENDING` until the customer finishes re-enrolling, then `COMPLETED`. Null for an `SMS_OTP` reset, where completing the reset enrolls the new number directly with no separate enrollment step.
  - `expiresAt` string, date-time, required — When the reset window closes. Poll no longer than this.
  - `completedAt` string, date-time, nullable — When the reset completed; null until then.

## Other responses

- `401` — Unauthorized
- `404` — Customer or reset not found
- `409` — SCA is not required for this customer.
- `500` — Internal service error

---

[API](https://skmtc.net/stainless-api/apis/grid-api.md) · [All operations](https://skmtc.net/stainless-api/apis/grid-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/stainless-api/grid-api/versions/151f2d9bad9c/schema)
