# IdoJourneyActionType

**`Description`**

The enum for the Journey step ID, used when the journey step is a predefined typed action.
The actions that do not use this are "Collect information" and "Login Form" which allow the journey author to define a custom ID.
See also [journeyStepId](/sdk-ref/idosdk/interfaces/idoserviceresponse#journeystepid).

## Enumeration Members

### Rejection

• **Rejection** = `"action:rejection"`

**`Description`**

`journeyStepId` for a journey rejection.

### Success

• **Success** = `"action:success"`

**`Description`**

`journeyStepId` for a journey completion.

### Information

• **Information** = `"action:information"`

**`Description`**

`journeyStepId` for an Information action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:
These are the text values that are configured for the Information action step in the journey editor.
This can be used to display the information to the user.

```json
{
 "data": {
   "title": "<TITLE>",
   "text": "<TEXT>",
   "button_text": "<BUTTON TEXT>"
 }
}
```

The client response does not need to include any data: `ido.submitClientResponse(ClientResponseOptionType.ClientInput);`

### DebugBreak

• **DebugBreak** = `"action:debug_break"`

**`Description`**

`journeyStepId` for a server side debugger breakpoint.
This response is sent to the client side when the journey debugger has reached a breakpoint, and will continue to return while
the journey debugger is paused.

The [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object does not include any data.

The client response does not need to include any data: `ido.submitClientResponse(ClientResponseOptionType.ClientInput);`

### WaitForAnotherDevice

• **WaitForAnotherDevice** = `"action:wait_for_another_device"`

**`Description`**

`journeyStepId` for a Wait for Cross Session Message action.

The [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object includes information that can be presented as a QR to scan by another device.
The response will remain the same while the cross session message was not consumed by the journey executed by the other device.

The client response does not need to include any data: `ido.submitClientResponse(ClientResponseOptionType.ClientInput);`

### WebAuthnRegistration

• **WebAuthnRegistration** = `"action:webauthn_registration"`

**`Description`**

`journeyStepId` for WebAuthn Registration action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object: the input parameters that you need to send to `webauthn.register()`

```json
{
 "data": {
   "username": "<USERNAME>",
   "display_name": "<DISPLAY_NAME>",
   "register_as_discoverable": <true|false>,
   "allow_cross_platform_authenticators": <true|false>
 }
}
```

Before responding, activate `webauthn.register()` to obtain the `webauthn_encoded_result` value.
This will present the user with the WebAuthn registration UI. Use the result to send the client response:

```json
ido.submitClientResponse(
    ClientResponseOptionType.ClientInput,
    {
        "webauthn_encoded_result": "<WEBAUTHN_ENCODED_RESULT_FROM_SDK>"
    })
```

### DrsTriggerAction

• **DrsTriggerAction** = `"action:drs_trigger_action"`

**`Description`**

`journeyStepId` for instructing the use of Fraud Prevention trigger action, as part of the Risk Recommendation journey step.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object: the input parameters that you need to send to `drs.triggerActionEvent()`

```json
{
 "data": {
    "correlation_id": "a47ed80a-41f9-464a-a42f-fce775b6e446",
    "user_id": "user",
    "action_type": "login"
 },
}
```

Before responding, activate `drs.triggerActionEvent()` to obtain the `action_token` value. This is a silent action, and does not require user interaction.
Use the result to send the client response:

```json
ido.submitClientResponse(
    ClientResponseOptionType.ClientInput,
    {
        "action_token": "<Fraud Prevention action token>"
    })
```

### IdentityVerification

• **IdentityVerification** = `"action:id_verification"`

**`Description`**

`journeyStepId` for Identity Verification action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "payload": {
     "endpoint": "<endpoint to redirect>",
     "base_endpoint": "<base endpoint>",
     "start_token": "<start token>",
     "state": "<state>",
     "session": "<session>"
     },
   }
}
```

Use this data to redirect the user to the identity verification endpoint.
Since this redirects to a different page, make sure you store the SDK state by calling `ido.serializeState()`, and saving the response data in the session storage.
After the user completes the identity verification, you can restore the SDK state and continue the journey, by calling `ido.restoreFromSerializedState()` with the stored state.

Once done, send the following client response:

```json
ido.submitClientResponse(
    ClientResponseOptionType.ClientInput,
    {
        "payload": {
            "sessionId": "<sessionId>",
            "state": "<state>"
        }
    })
```

### EmailOTPAuthentication

• **EmailOTPAuthentication** = `"transmit_platform_email_otp_authentication"`

**`Description`**

`journeyStepId` for Email OTP authentication action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "code_length": <integer_code_length>
  }
}
```

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain either the error code [InvalidCredentials](/sdk-ref/idosdk/enums/errorcode#invalidcredentials) or the error code [ExpiredOTPPasscode](/sdk-ref/idosdk/enums/errorcode#expiredotppasscode).

This can be used to indicate that the passcode is invalid, prompting the user to enter a new passcode.
Also, a resend option (see below) can be provided to the user.

Client responses:

- For simple submit of OTP passcode:


```json
     ido.submitClientResponse(
         ClientResponseOptionType.ClientInput,
         {
             "passcode": "<passcode>"
         })
```

- In Order to request resend of OTP (restart the action):
`ido.submitClientResponse(ClientResponseOptionType.Resend)`


### SmsOTPAuthentication

• **SmsOTPAuthentication** = `"transmit_platform_sms_otp_authentication"`

**`Description`**

`journeyStepId` for SMS OTP authentication action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "code_length": <integer_code_length>
  }
}
```

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain either the error code [InvalidCredentials](/sdk-ref/idosdk/enums/errorcode#invalidcredentials), or the error code [ExpiredOTPPasscode](/sdk-ref/idosdk/enums/errorcode#expiredotppasscode)

This can be used to indicate that the passcode is invalid, prompting the user to enter a new passcode.
Also, a resend option (see below) can be provided to the user.

Client responses:

- For simple submit of OTP passcode:


```json
     ido.submitClientResponse(
         ClientResponseOptionType.ClientInput,
         {
             "passcode": "<passcode>"
         })
```

- In Order to request resend of OTP (restart the action):
`ido.submitClientResponse(ClientResponseOptionType.Resend)`


### GenericOTPAuthentication

• **GenericOTPAuthentication** = `"transmit_platform_generic_otp_authentication"`

**`Description`**

`journeyStepId` for Generic OTP authentication action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "code_length": <integer_code_length>
  }
}
```

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain either the error code [InvalidCredentials](/sdk-ref/idosdk/enums/errorcode#invalidcredentials), or the error code [ExpiredOTPPasscode](/sdk-ref/idosdk/enums/errorcode#expiredotppasscode)

This can be used to indicate that the passcode is invalid, prompting the user to enter a new passcode.
Also, a resend option (see below) can be provided to the user.

Client responses:

- For simple submit of OTP passcode:


```json
     ido.submitClientResponse(
         ClientResponseOptionType.ClientInput,
         {
             "passcode": "<passcode>"
         })
```

- In Order to request resend of OTP (restart the action):
`ido.submitClientResponse(ClientResponseOptionType.Resend)`


### EmailValidation

• **EmailValidation** = `"transmit_platform_email_validation"`

**`Description`**

`journeyStepId` for Email Validation action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "code_length": <integer_code_length>
  }
}
```

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain either the error code [InvalidCredentials](/sdk-ref/idosdk/enums/errorcode#invalidcredentials)

Resend option also (see below) can be provided to the user.

Client responses:

- For simple submit of validation passcode:


```json
     ido.submitClientResponse(
         ClientResponseOptionType.ClientInput,
         {
             "passcode": "<passcode>"
         })
```

- In Order to request resend of OTP (restart the action):
`ido.submitClientResponse(ClientResponseOptionType.Resend)`


### SmsValidation

• **SmsValidation** = `"transmit_platform_sms_validation"`

**`Description`**

`journeyStepId` for Sms Validation action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "code_length": <integer_code_length>
  }
}
```

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain either the error code [InvalidCredentials](/sdk-ref/idosdk/enums/errorcode#invalidcredentials)

Resend option also (see below) can be provided to the user.

Client responses:

- For simple submit of validation passcode:


```json
     ido.submitClientResponse(
         ClientResponseOptionType.ClientInput,
         {
             "passcode": "<passcode>"
         })
```

- In Order to request resend of OTP (restart the action):
`ido.submitClientResponse(ClientResponseOptionType.Resend)`


### TotpRegistration

• **TotpRegistration** = `"transmit_platform_totp_registration"`

**`Description`**

`journeyStepId` for TOTP Registration action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "payload": {
     "secret": "<secret>",
     "uri": "<uri>"
    },
  }
}
```

Use this data to display the TOTP registration QR code / link to the user.
The user should use this to register the TOTP secret in their authenticator app.
Once the user has completed the registration, send the following empty client response:

```json
ido.submitClientResponse(
   ClientResponseOptionType.ClientInput
)
```

Please note that registration of the TOTP secret is a silent action, and does not require user interaction.
An empty response is sent to the server in order to continue the journey.

### TransactionSigningTOTP

• **TransactionSigningTOTP** = `"transmit_platform_transaction_signing_totp"`

**`Description`**

`journeyStepId` for Transaction Signing with TOTP action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "transaction_challenge": "<6_DIGIT_CHALLENGE_CODE>",
   "approval_data": {
     // Note: This is just an example. The actual approval_data can vary.
     "transactionId": "<TRANSACTION_ID>",
     "amount": "<AMOUNT>",
     "currency": "<CURRENCY>"
   }
 }
}
```

Use this data to display the transaction details and the challenge code to the user.
The user should use this challenge code to generate a TOTP code using their authenticator app.

Client responses:

- For submitting the TOTP code:


```json
ido.submitClientResponse(
   ClientResponseOptionType.ClientInput,
   {
     "totp_code": "<6_DIGIT_TOTP_CODE>"
   }
)
```

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain the error code [InvalidCredentials](/sdk-ref/idosdk/enums/errorcode#invalidcredentials).
This can be used to indicate that the TOTP code is invalid, prompting the user to enter a new code.

Note: The user has a limited number of attempts to enter the correct TOTP code before the journey is rejected.

### InvokeIDP

• **InvokeIDP** = `"invoke_idp"`

**`Description`**

`journeyStepId` for Invoke IDP action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "authorization_url": "<URL_OF_THE_AUTHORIZATION_ENDPOINT>",
   "authorization_request_method": "<GET_OR_POST>",
   "invocation_method": "<PAGE_OR_POPUP>",
   "idp_name": "<IDP_NAME>"
 }
}
```

Use this data to redirect the user to the IDP authorization endpoint.

Once done, send the following client response:

```json
ido.submitClientResponse(
   ClientResponseOptionType.ClientInput,
   {
      "idp_response" : {
         "code": "<code>",
         "state": "<state>",
      }
    }
)
```

### WebAuthnTransactionSigning

• **WebAuthnTransactionSigning** = `"transmit_platform_transaction_signing_webauthn"`

**`Description`**

`journeyStepId` for Transaction Signing with Passkeys action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "user_identifier": "<USERNAME>",
   "approval_data": {
     // Note: This is just an example. The actual approval_data can vary.
     "transactionId": "<TRANSACTION_ID>",
     "amount": "<AMOUNT>",
     "currency": "<CURRENCY>"
   }
 }
}
```

Before responding, call `webauthn.approve.modal()` to obtain the `webauthn_encoded_result` value.

```javascript
const result = await webauthn.approve.modal(
  response.data.approval_data // Transaction details to be approved
);
```

Then submit the result:

```javascript
ido.submitClientResponse(
   ClientResponseOptionType.ClientInput,
   {
     "webauthn_encoded_result": result
   }
)
```

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain
relevant error codes that can be used to handle various failure scenarios.

Note: The approval_data object can contain up to 10 key-value pairs using only alphanumeric
characters, underscores, hyphens, and periods. The WebAuthn encoded result remains valid for 60 seconds.

### SelectOrganization

• **SelectOrganization** = `"transmit_platform_select_organization"`

**`Description`**

`journeyStepId` for Select Organization action.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "organizations": [
     {
       "id": "aq5Doa_GMiDhL2GC-HdKo",
       "name": "Organization 1"
     },
     {
       "id": "mkiPd9tu0K2h9oCM9pRB7",
       "name": "Organization 2"
     },
     {
       "id": "fdlvZdof5GPvqJlBeAoFs",
       "name": "Organization 3"
     }
   ]
  }
}
```

For organization selection, send the following client response:

```javascript
ido.submitClientResponse(
   ClientResponseOptionType.ClientInput,
   {
     "organization_id": "<ORGANIZATION_ID>"
   }
)
```

Note: If a user is a member of a single organization, this step will pick it implicitly.

### MobileApproveAuthentication

• **MobileApproveAuthentication** = `"transmit_platform_mobile_approve_authentication"`

**`Description`**

`journeyStepId` for Web to Mobile Authentication action.
This action type is used for both simple authentication and transaction signing scenarios.

Initial Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object when multiple devices are available:

```json
{
 "data": {
   "devices": [
     {
       "name": "Device 1",
       "code": "1"
     },
     {
       "name": "Device 2",
       "code": "2"
     }
   ]
 }
}
```

For device selection, send the following client response:

```javascript
ido.submitClientResponse(
   ClientResponseOptionType.ClientInput,
   {
     "selected_device_code": "<DEVICE_CODE>"
   }
)
```

After device selection or when only one device is available, the action will wait for mobile approval.
The response includes polling configuration and optional transaction details:

```json
{
 "data": {
   "device_display_name": "Device 1",
   "resend_attempts_left": 5,
   "polling_interval": 3,
   "approval_data": {
     // Note: This is just an example. The actual approval_data can vary.
     "transactionId": "<TRANSACTION_ID>",
     "amount": "<AMOUNT>",
     "currency": "<CURRENCY>"
   }
 }
}
```

The following options are available:

- To check current authentication status (polling):


```javascript
// The application should implement its own polling mechanism
// and call this method periodically to check the status
ido.submitClientResponse(ClientResponseOptionType.ClientInput)
```

- To cancel the authentication:


```javascript
ido.submitClientResponse(ClientResponseOptionType.Cancel)
```

- To resend the push notification:


```javascript
ido.submitClientResponse(ClientResponseOptionType.Resend)
```

Note: The application is responsible for implementing the polling mechanism
to check the authentication status. The SDK only provides the method to
submit the status check request. Use the polling_interval from the response
to determine the frequency of status checks.

On failure, the `IdoServiceResponse` [errorData](/sdk-ref/idosdk/interfaces/idoserviceresponse#errordata) field will contain
relevant error codes that can be used to handle various failure scenarios.

### SelfieAcquisition

• **SelfieAcquisition** = `"transmit_platform_selfie_acquisition"`

**`Description`**

`journeyStepId` for a selfie acquisition action.
This action instructs the client to acquire a selfie image from the user, typically as part of an identity verification or face authentication process.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "start_token": "<START_TOKEN>",
   "acquisition_id": "<ACQUISITION_ID>"
 }
}
```

`start_token` is optional, and is used to start an identity verification session if required. `acquisition_id` is required, and is the ID needed to start selfie capture.

To perform the selfie acquisition:

1. If a `start_token` is present, initialize the IDV SDK session:


```javascript
if (response.data.start_token !== undefined) {
  await idv.start(response.data.start_token);
}
```

1. Run the selfie acquisition by calling the IDV SDK's `captureSelfie()` method:


```javascript
await idv.captureSelfie({ acquisitionId: response.data.acquisition_id });
```

After acquiring the selfie, the client response does not need to include any data:

```javascript
ido.submitClientResponse(ClientResponseOptionType.ClientInput);
```

If an error occurs while capturing the selfie, the client should handle error states and inform the user and/or retry as appropriate according to application requirements.

For deeper understanding and more implementation details, refer to the [IDV SDK Reference](/sdk-ref/idvsdk/overview).

### DocumentAcquisition

• **DocumentAcquisition** = `"transmit_platform_document_acquisition"`

**`Description`**

`journeyStepId` for a document acquisition action.
This action instructs the client to acquire a document image from the user, typically as part of an identity verification or face authentication process.

Data received in the [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object:

```json
{
 "data": {
   "start_token": "<START_TOKEN>",
   "acquisition_id": "<ACQUISITION_ID>"
 }
}
```

`start_token` is optional, and is used to start an identity verification session if required. `acquisition_id` is required, and is the ID needed to start document capture.

To perform the document acquisition:

1. If a `start_token` is present, initialize the IDV SDK session:


```javascript
if (response.data.start_token !== undefined) {
  await idv.start(response.data.start_token);
}
```

1. Run the document acquisition by calling the IDV SDK's `captureDocument()` method:


```javascript
await idv.captureDocument({ acquisitionId: response.data.acquisition_id });
```

After acquiring the document, the client response does not need to include any data:

```javascript
ido.submitClientResponse(ClientResponseOptionType.ClientInput);
```

If an error occurs while capturing the document, the client should handle error states and inform the user and/or retry as appropriate according to application requirements.

For deeper understanding and more implementation details, refer to the [IDV SDK Reference](/sdk-ref/idvsdk/overview).

### WaitForIdvRecommendations

• **WaitForIdvRecommendations** = `"transmit_platform_idv_recommendation"`

**`Description`**

`journeyStepId` for an IDV recommendation action.

When this action is received, it indicates that identity verification (IDV) processing is being performed asynchronously on the backend. The client is responsible for implementing a polling mechanism: keep calling `ido.submitClientResponse(ClientResponseOptionType.ClientInput)` in a loop until the server responds with a new action or returns an error.

The [IdoServiceResponse](/sdk-ref/idosdk/interfaces/idoserviceresponse) object does not include any data for this action at any time.

It is recommended to show a blocking UI element (such as a loader or progress indicator) while polling, to inform the user that processing is ongoing. This process can take a couple of seconds; the recommended polling interval is every 1 second.