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

## Changes

- **2026-08-11** `b06902b6595a` — 3 warning
  - added the new `CARD_ALREADY_CLOSED` enum value to the `code` response property for the response status `409`
  - added the new `CARD_NOT_MUTABLE` enum value to the `code` response property for the response status `409`
  - added the new `INVALID_STATE_TRANSITION` enum value to the `code` response property for the response status `409`
- **2026-07-31** `b21ed434ee6e` — 2 warning
  - added the new `BENEFICIARY_TRUSTED` enum value to the `code` response property for the response status `409`
  - added the new `SCA_SESSION_REQUIRED` enum value to the `code` response property for the response status `409`
- **2026-07-26** `094458a989d2` — 1 warning
  - added the new `TRANSACTION_NOT_CANCELLABLE` enum value to the `code` response property for the response status `409`
- **2026-07-21** `483d0a08414b` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/stainless-api/apis/grid-api/changes/sca/factors/reset/:resetId/get.md)

---

[API](https://skmtc.dev/stainless-api/apis/grid-api.md) · [All operations](https://skmtc.dev/stainless-api/apis/grid-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/stainless-api/grid-api/revisions/2ec84c06fbec/schema)
