# 60311: Factor verification failed

Log Type: APPLICATION

Log Level: ERROR

## Description

Verify returns this error when a Factor verification request fails during enrollment. This usually means the verification request did not prove possession of the Factor, so the Factor could not move from `unverified` to `verified`.

### Possible causes

* The Factor could not be verified with the data provided in the request.
* For a TOTP Factor, the `AuthPayload` did not match the latest code generated from the shared seed.
* For a TOTP Factor, the code in `AuthPayload` expired before the request was processed. The default `Config.TimeStep` is 30 seconds.
* The authenticator app was not set up with the correct seed, or it is generating codes with settings that do not match the Factor configuration.
* You changed TOTP settings such as `Config.CodeLength` or `Config.TimeStep`, and the authenticator app being used does not support those settings.

### Possible solutions

* Send a new verification request with the latest value in `AuthPayload`.
* For TOTP enrollment, make sure the user scanned the correct QR code or entered the seed correctly before retrying verification.
* Retry immediately with a fresh TOTP code if the previous code may have expired.
* Verify that your authenticator app supports the Factor configuration you created. If you use non-default TOTP settings, confirm the app can generate codes with those values.
* If the Factor remains `unverified`, create a new Factor and restart enrollment.
* If you are integrating Verify TOTP, check the returned Factor `status` after updating the Factor. For current TOTP behavior, an incorrect `AuthPayload` leaves the Factor in `unverified` instead of returning an error.

#### Additional resources

* [Factor resource](/docs/verify/api/factor)
* [Verify TOTP Quickstart](/docs/verify/quickstarts/totp)
* [Verify TOTP change in API response when `AuthPayload` is incorrect](/docs/verify/quickstarts/verify-totp-change-in-api-response-when-authpayload-is-incorrect)
