---
"@context": https://schema.org
"@type": TechArticle
"@id": https://www.twilio.com/docs/api/errors/60369#article
headline: "60369: Factor type invalid or not provided"
url: https://www.twilio.com/docs/api/errors/60369
inLanguage: en
dateModified: 2026-10-23T13:37:41.000Z
author:
  "@type": Organization
  name: Twilio Developer Education Team
publisher:
  "@type": Organization
  name: Twilio
---

# 60369: Factor type invalid or not provided

Log Type: APPLICATION

Log Level: ERROR

## Description

This error occurs when your request to create or verify a Verify Factor or Challenge either omits the `factorType` parameter or includes a value that the endpoint does not support. For requests to `/v2/Services/{ServiceSid}/Entities/{Identity}`, valid values for `factorType` are `push` and `totp`. To create or verify passkey Factors or Challenges, use the endpoints at `/v2/Services/{ServiceSid}/Passkeys`.

### Possible causes

* The request body doesn't include the required `factorType` field.
* The request includes an empty or unsupported `factorType` value for the standard Factor resource.
* The request is trying to register a passkey by using the standard Factor endpoint instead of the Passkeys Factor endpoint.
* The request attempts to verify a Passkey Factor by using the standard Factor update endpoint (`/v2/Services/{ServiceSid}/Entities/{Identity}/Factors/{FactorSid}`).
* The request attempts to create a Challenge for a Passkey Factor by using the standard Challenge endpoint (`/v2/Services/{ServiceSid}/Entities/{Identity}/Challenges`).
* The request attempts to approve a Passkey Challenge by using the standard Challenge update endpoint (`/v2/Services/{ServiceSid}/Entities/{Identity}/Challenges/{ChallengeSid}`).
* The `FactorSid` or `ChallengeSid` value is malformed or doesn't belong to a known factor type.

### Possible solutions

* Add `factorType` to the request body and set it to a valid value for the standard Factor resource, such as `push` or `totp`.
* If you are creating a passkey factor, send the request to `/v2/Services/{ServiceSid}/Passkeys/Factors` instead of `/v2/Services/{ServiceSid}/Entities/{Identity}/Factors`.
* Verify a PasskeyFactor. Send the request to `/v2/Services/{ServiceSid}/Passkeys/VerifyFactor`.
* Create a PasskeyChallenge by using `/v2/Services/{ServiceSid}/Passkeys/Challenges`.
* Approve an existing PasskeyChallenge by using `/v2/Services/{ServiceSid}/Passkeys/ApproveChallenge`.
* If you're creating a push factor, make sure the request includes the push-specific fields required for that factor type, including `binding.publicKey`, `config.appId`, `config.notificationToken`, and `config.sdkVersion`.
* If you're creating a TOTP factor, follow the TOTP factor creation flow and include `factorType` with `friendlyName`. Add TOTP configuration fields only when you need to override the defaults.
* Confirm that the `FactorSid` or `ChallengeSid` value exactly matches the value returned by the API.

#### Additional resources

* [Factor Resource API reference](/docs/verify/api/factor)
* [Verify Push Technical Overview](/docs/verify/push/technical-overview)
* [Verify TOTP Quickstart](/docs/verify/quickstarts/totp)
