Creates a Challenge for an Authentication Factor.
import { WorkOS } from '@workos-inc/node'; const workos = new WorkOS('sk_example_123456789'); const challenge = await workos.mfa.challengeFactor({ authenticationFactorId: 'auth_factor_01FZ4TS14D1PHFNZ9GF6YD8M1F', smsTemplate: 'Your code is {{code}}', });
{ "object": "authentication_challenge", "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", "expires_at": "2026-01-15T12:00:00.000Z", "code": "123456", "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", "created_at": "2026-01-15T12:00:00.000Z", "updated_at": "2026-01-15T12:00:00.000Z" }
| curl --request POST \ | |
| --url "https://api.workos.com/auth/factors/auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ/challenge" \ | |
| --header "Authorization: Bearer sk_example_123456789" \ | |
| --header "Content-Type: application/json" \ | |
| -d @- <<'BODY' | |
| { | |
| "sms_template": "Your verification code is {{code}}." | |
| } | |
| BODY |
| import { WorkOS } from '@workos-inc/node'; | |
| const workos = new WorkOS('sk_example_123456789'); | |
| const challenge = await workos.mfa.challengeFactor({ | |
| authenticationFactorId: 'auth_factor_01FZ4TS14D1PHFNZ9GF6YD8M1F', | |
| smsTemplate: 'Your code is {{code}}', | |
| }); |
| require "workos" | |
| WorkOS.configure do |config| | |
| config.api_key = "sk_example_123456789" | |
| end | |
| WorkOS.client.multi_factor_auth.challenge_factor(id: "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ") |
| from workos import WorkOSClient | |
| client = WorkOSClient(api_key="sk_example_123456789", client_id="client_123456789") | |
| client.multi_factor_auth.challenge_factor(id_="auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ") |
| package main | |
| import ( | |
| "context" | |
| "github.com/workos/workos-go/v9" | |
| ) | |
| func main() { | |
| client := workos.NewClient("sk_example_123456789") | |
| _, err := client.MultiFactorAuth().ChallengeFactor(context.Background(), "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ") | |
| if err != nil { | |
| panic(err) | |
| } | |
| } |
| <?php | |
| use WorkOS\WorkOS; | |
| $workos = new WorkOS( | |
| apiKey: "sk_example_123456789", | |
| clientId: "client_123456789", | |
| ); | |
| $workos | |
| ->multiFactorAuth() | |
| ->challengeFactor(id: "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ"); |
| import com.workos.WorkOS; | |
| WorkOS workos = new WorkOS("sk_example_123456789"); | |
| workos.multiFactorAuth.challengeFactor("auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ"); |
| using WorkOS; | |
| var client = new WorkOSClient(new WorkOSOptions { | |
| ApiKey = "sk_example_123456789", | |
| ClientId = "client_123456789", | |
| }); | |
| await client.MultiFactorAuth.ChallengeFactorAsync("auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ"); |
| use workos::Client; | |
| #[tokio::main] | |
| async fn main() -> Result<(), workos::Error> { | |
| let client = Client::builder() | |
| .api_key("sk_example_123456789") | |
| .client_id("client_123456789") | |
| .build(); | |
| let _result = client | |
| .multi_factor_auth() | |
| .challenge_factor("auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ") | |
| .await?; | |
| Ok(()) | |
| } |
| { | |
| "object": "authentication_challenge", | |
| "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| "expires_at": "2026-01-15T12:00:00.000Z", | |
| "code": "123456", | |
| "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| "created_at": "2026-01-15T12:00:00.000Z", | |
| "updated_at": "2026-01-15T12:00:00.000Z" | |
| } |
POST/auth /factors /:id /challengeParameters Returns Verifies an Authentication Challenge.
import { WorkOS } from '@workos-inc/node'; const workos = new WorkOS('sk_example_123456789'); const { challenge, valid } = await workos.mfa.verifyChallenge({ authenticationChallengeId: 'auth_challenge_01FVYZWQTZQ5VB6BC5MPG2EYC5', code: '123456', });
{ "challenge": { "object": "authentication_challenge", "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", "expires_at": "2026-01-15T12:00:00.000Z", "code": "123456", "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", "created_at": "2026-01-15T12:00:00.000Z", "updated_at": "2026-01-15T12:00:00.000Z" }, "valid": true }
| curl --request POST \ | |
| --url "https://api.workos.com/auth/challenges/auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ/verify" \ | |
| --header "Authorization: Bearer sk_example_123456789" \ | |
| --header "Content-Type: application/json" \ | |
| -d @- <<'BODY' | |
| { | |
| "code": "123456" | |
| } | |
| BODY |
| import { WorkOS } from '@workos-inc/node'; | |
| const workos = new WorkOS('sk_example_123456789'); | |
| const { challenge, valid } = await workos.mfa.verifyChallenge({ | |
| authenticationChallengeId: 'auth_challenge_01FVYZWQTZQ5VB6BC5MPG2EYC5', | |
| code: '123456', | |
| }); |
| require "workos" | |
| WorkOS.configure do |config| | |
| config.api_key = "sk_example_123456789" | |
| end | |
| WorkOS.client.multi_factor_auth.verify_challenge( | |
| id: "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| code: "123456" | |
| ) |
| from workos import WorkOSClient | |
| client = WorkOSClient(api_key="sk_example_123456789", client_id="client_123456789") | |
| client.multi_factor_auth.verify_challenge( | |
| id_="auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", code="123456" | |
| ) |
| package main | |
| import ( | |
| "context" | |
| "github.com/workos/workos-go/v9" | |
| ) | |
| func main() { | |
| client := workos.NewClient("sk_example_123456789") | |
| _, err := client.MultiFactorAuth().VerifyChallenge(context.Background(), "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", &workos.MultiFactorAuthVerifyChallengeParams{ | |
| Code: "123456", | |
| }) | |
| if err != nil { | |
| panic(err) | |
| } | |
| } |
| <?php | |
| use WorkOS\WorkOS; | |
| $workos = new WorkOS( | |
| apiKey: "sk_example_123456789", | |
| clientId: "client_123456789", | |
| ); | |
| $workos | |
| ->multiFactorAuth() | |
| ->verifyChallenge( | |
| id: "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| code: "123456", | |
| ); |
| import com.workos.WorkOS; | |
| import com.workos.multifactorauth.MultiFactorAuthApi.VerifyChallengeOptions; | |
| WorkOS workos = new WorkOS("sk_example_123456789"); | |
| VerifyChallengeOptions options = VerifyChallengeOptions.builder().code("123456").build(); | |
| workos.multiFactorAuth.verifyChallenge( | |
| "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", options); |
| using WorkOS; | |
| var client = new WorkOSClient(new WorkOSOptions { | |
| ApiKey = "sk_example_123456789", | |
| ClientId = "client_123456789", | |
| }); | |
| await client.MultiFactorAuth.VerifyChallengeAsync("auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| new MultiFactorAuthVerifyChallengeOptions { | |
| Code = "123456", | |
| }); |
| use workos::Client; | |
| use workos::multi_factor_auth::VerifyChallengeParams; | |
| #[tokio::main] | |
| async fn main() -> Result<(), workos::Error> { | |
| let client = Client::builder() | |
| .api_key("sk_example_123456789") | |
| .client_id("client_123456789") | |
| .build(); | |
| let _result = client | |
| .multi_factor_auth() | |
| .verify_challenge( | |
| "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| VerifyChallengeParams { | |
| code: "123456".into(), | |
| ..Default::default() | |
| } | |
| ) | |
| .await?; | |
| Ok(()) | |
| } |
| { | |
| "challenge": { | |
| "object": "authentication_challenge", | |
| "id": "auth_challenge_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| "expires_at": "2026-01-15T12:00:00.000Z", | |
| "code": "123456", | |
| "authentication_factor_id": "auth_factor_01FVYZ5QM8N98T9ME5BCB2BBMJ", | |
| "created_at": "2026-01-15T12:00:00.000Z", | |
| "updated_at": "2026-01-15T12:00:00.000Z" | |
| }, | |
| "valid": true | |
| } |
POST/auth /challenges /:id /verifyParameters Returns