# Modules

A module is a self-contained step in an onboarding flow. Add modules to `flowConfig` for locally configured flows, or configure them in a Flow or Workflow on the Incode Dashboard for online-configured flows.

All the modules supported by the SDK are listed here, with their configuration parameters. For implementation options and instructions, see [Common Implementation Patterns](react-native-common-implementation-patterns/index.md).

Every entry in `flowConfig` includes:
* `module` (required): string. The module name.
* `enabled` (optional, defaults to `true`): boolean. Explicitly include or skip the module in the flow.

For completion payloads, update events, and module error examples, see [Results](react-native-results.md).

### Phone
Ask the user to enter a phone number.
* `otpVerification` (optional, defaults to `false`): boolean. Ask for OTP verification.

### DocumentScan
Ask the user to capture a document.
* `showTutorial` (optional, defaults to `false`): boolean. Show the document scan tutorial. Only on iOS.
* `showDocumentProviderScreen` (optional, defaults to `true`): boolean. Specify `true` to show the document provider screen, or `false` to go directly to capture.
* `type` (optional, defaults to `addressStatement`): `addressStatement`, `paymentProof`, `medicalDoc`, `otherDocument1`, `otherDocument2`, or `otherDocument3`.

### Geolocation
Get information about the user's current location.
* `isSkippable` (optional, defaults to `false`): boolean. Allows the geolocation step to be skipped. When set to `true`, skipping or denying location permission advances the flow instead of ending the session with a permission error.

### UserConsent
Ask the user for consent.
* `title` (required): string. Title shown on the consent screen.
* `content` (required): string. Content shown on the consent screen.

### CombinedConsent
Ask the user for data-sharing consent.
* `consentId` (required): string. ID for the combined consent configured in the dashboard.

### Signature
Ask the user to draw a signature.
* `title` (optional): string. Optional title shown at the top of the screen.
* `description` (optional): string. Optional description shown below the title.
* `descriptionMaxLines` (optional): number. Maximum number of description text lines.

This module enables user to add a digital signature by signing on a canvas.

Besides specifying `title` and `description` keys, you must provide text for Android and iOS in their `res/values/strings.xml` and `Localizable.strings` files.

```js
{
  module: 'Signature',
  title: 'onboard_sdk_signature_title',
  description: 'onboard_sdk_signature_description',
  descriptionMaxLines: 2
}
```

For Android:

```
<string name="onboard_sdk_signature_title">Example title</string>
<string name="onboard_sdk_signature_description">Description example</string>
```

For iOS:

```
"onboard_sdk_signature_title" = "Example title";
"onboard_sdk_signature_description" = "Description example";
```

### VideoSelfie
Record a video selfie flow. Available only for Android API level 21+.
* `showTutorial` (optional, defaults to `true`): boolean. Show the video selfie tutorial.
* `selfieScanMode` (optional, defaults to `selfieMatch`): `selfieMatch` or `faceMatch`. Specify whether to compare the selfie directly or compare with the photo from the ID.
* `selfieLivenessCheck` (optional, defaults to `false`): boolean. Check user liveness during video selfie.
* `showIdScan` (optional, defaults to `true`): boolean. Ask for ID scan during video selfie.
* ~~`showDocumentScan`~~ (deprecated, optional): boolean. Kept in the TypeScript config for compatibility; the current SDK does not enable document scan from this flag.
* `showVoiceConsent` (optional, defaults to `true`): boolean. Ask for voice consent during video selfie.
* `voiceConsentQuestionsCount` (optional, defaults to `3`): number. Number of random questions for video selfie voice consent.
* `voiceConsentFR` (optional, defaults to `false`): boolean. Ask for face recognition during voice consent.
* `cameraFacingConfig` (optional): `CameraFacingConfig`. Set the camera for each step using `selfieCameraFacing`, `idFrontCameraFacing`, `idBackCameraFacing`, `documentScanCameraFacing`, `randomQuestionsCameraFacing`, and `voiceConsentCameraFacing`; each value is `front` or `back`.
* `questions` (optional): `VideoSelfieQuestion[]`. List of `{ question: string; answer: string }` entries to show in capture-only/random-question mode.

### IdScan
Ask the user to capture ID or passport.
* `showTutorial` (optional, defaults to `true`): boolean. Show the ID scan tutorial.
* `idType` (optional): `id` or `passport`. If omitted, the SDK can show a chooser to the user.
* `showIdTypeChooser` (optional, defaults to `true`): boolean. Specify `false` to skip the document chooser screen.
* `idCategory` (optional, defaults to `primary`): `primary` or `secondary`.
* `showRetakeScreenForManualCapture` (optional, defaults to `true`): boolean. Show the photo review screen for manual captures.
* `showRetakeScreenForAutoCapture` (optional, defaults to `false`): boolean. Show the photo review screen after auto capture.
* `enableFrontShownAsBackCheck` (optional, defaults to `false`): boolean. Show real-time feedback when the front side is shown during back capture.
* `enableBackShownAsFrontCheck` (optional, defaults to `false`): boolean. Show real-time feedback when the back side is shown during front capture.
* ~~`autocaptureUxMode`~~ (deprecated, optional, defaults to `holdStill`): `countdown` or `holdStill`. This parameter applies only to V1.
* `showIDOverlay` (optional, defaults to `false`): boolean. Show the ID overlay during capture.
* `streamFrames` (optional, defaults to `false`): boolean. Enables camera frame streaming. Requires the RN SDK `-vc` variant and the Android `com.incode.sdk:video-streaming` dependency.

### IdScanFront
Ask the user to capture only the front side of an ID.
* `showTutorial` (optional, defaults to `true`): boolean. Show the ID scan tutorial.
* `idType` (optional): `id` or `passport`.
* `showIdTypeChooser` (optional, defaults to `true`): boolean. Specify `false` to skip the document chooser screen.
* `idCategory` (optional, defaults to `primary`): `primary` or `secondary`.
* `showRetakeScreenForManualCapture` (optional, defaults to `true`): boolean. Show the photo review screen for manual captures.
* `showRetakeScreenForAutoCapture` (optional, defaults to `false`): boolean. Show the photo review screen after auto capture.
* `enableFrontShownAsBackCheck` (optional, defaults to `false`): boolean. Show real-time feedback when the front side is shown during back capture.
* `enableBackShownAsFrontCheck` (optional, defaults to `false`): boolean. Show real-time feedback when the back side is shown during front capture.
* ~~`autocaptureUxMode`~~ (deprecated, optional, defaults to `holdStill`): `countdown` or `holdStill`. This parameter applies only to V1.
* `showIDOverlay` (optional, defaults to `false`): boolean. Show the ID overlay during capture.
* `streamFrames` (optional, defaults to `false`): boolean. Enables camera frame streaming. Requires the RN SDK `-vc` variant and the Android `com.incode.sdk:video-streaming` dependency.

### IdScanBack
Ask the user to capture only the back side of an ID.
* `showTutorial` (optional, defaults to `true`): boolean. Show the ID scan tutorial.
* `idCategory` (optional, defaults to `primary`): `primary` or `secondary`.
* `showRetakeScreenForManualCapture` (optional, defaults to `true`): boolean. Show the photo review screen for manual captures.
* `showRetakeScreenForAutoCapture` (optional, defaults to `false`): boolean. Show the photo review screen after auto capture.
* `enableFrontShownAsBackCheck` (optional, defaults to `false`): boolean. Show real-time feedback when the front side is shown during back capture.
* `enableBackShownAsFrontCheck` (optional, defaults to `false`): boolean. Show real-time feedback when the back side is shown during front capture.
* ~~`autocaptureUxMode`~~ (deprecated, optional, defaults to `holdStill`): `countdown` or `holdStill`. This parameter applies only to V1.
* `showIDOverlay` (optional, defaults to `false`): boolean. Show the ID overlay during capture.
* `streamFrames` (optional, defaults to `false`): boolean. Enables camera frame streaming. Requires the RN SDK `-vc` variant and the Android `com.incode.sdk:video-streaming` dependency.

### ProcessId
Process the ID after separated front and back captures.
* `idCategory` (optional, defaults to `primary`): `primary` or `secondary`. Applied on Android.
* ~~`enableIdSummaryScreen`~~ (deprecated, optional, defaults to `true`): boolean. This parameter applies only to V1.

### Conference
Start a video conference call.
* `disableMicOnStart`: boolean. Disable the microphone when the call starts. Always pass this explicitly - the Android native module reads it without a default and can throw if it's omitted. On iOS, this flag is not currently wired up.

### SelfieScan
Ask the user to capture a selfie.
* `showTutorial` (optional, defaults to `true`): boolean. Show the selfie scan tutorial.
* `lensesCheck` (optional, defaults to `true`): boolean. Check if the user is wearing glasses.
* `cameraFacing` (optional, defaults to `front`): `front` or `back`. Camera used during selfie capture.
* `faceMaskCheck` (optional, defaults to `true`): boolean. Check if the user is wearing a face mask.
* ~~`brightnessThreshold`~~ (deprecated, optional): number. Kept in the TypeScript config for compatibility; not read by the current Android or iOS native SDK.
* `streamFrames` (optional, defaults to `false`): boolean. Enables camera frame streaming. Requires the RN SDK `-vc` variant and the Android `com.incode.sdk:video-streaming` dependency.

### FaceMatch
Perform a face match between the captured ID/passport and Selfie or NFC data.
* `idCategory` (optional, defaults to `primary`): `primary` or `secondary`.
* `matchType` (optional): `idSelfie`, `nfcSelfie`, or `nfc3Way`.
* `showUserExists` (optional, defaults to `false` on Android since the UxV2 migration): boolean. Show whether the user already exists.

### QrScan
Ask the user to scan a QR code.
* No additional parameters

### Captcha
Ask the user to enter the OTP generated for the current session.
* No additional parameters

### Email
Ask the user to enter an email.
* `otpVerification` (optional, defaults to `false`): boolean. Ask for OTP verification.

### Approve
Approve the current onboarding session and add the user to the Omni database.
* `forceApproval` (optional, defaults to `false`): boolean. Force approval when set to `true`.

### UserScore
Show the info and scoring for all performed steps.
* `mode` (optional, defaults to `accurate`): `accurate` or `fast`. `accurate` fetches server-side results and can take longer; `fast` shows results based on on-device processing.

### MLConsent
Ask the user for Machine Learning consent.
* `type` (required): `gdpr` or `us`.

### GovernmentValidation
Perform government validation of the ID.
* `isBackgroundExecuted` (optional, defaults to `false`): boolean. Run the module without showing its UI.

### Antifraud
Compare the current interview with existing interviews and customers to detect possible fraud.
* No additional parameters

### GlobalWatchlist
Check customer identities against sanctions, PEP, and watchlist sources.
* No additional parameters

### CustomWatchlist
Check whether the user is present in an Incode Dashboard custom watchlist.
* No additional parameters

### Aes
Enable advanced electronic signature document handling.
* `uploadDocument` (optional, defaults to `false`): boolean. Upload the signed document.
* `downloadDocument` (optional, defaults to `false`): boolean. Download the signed document.

### Name
Ask the user to enter a name.
* No additional parameters

### CURP
Validate the user's CURP from the ID.
* `validationEnabled` (optional, defaults to `true`): boolean. Validate the CURP on the server.

### OCREdit
Review OCR data.
* `isEditable` (optional, defaults to `false`): boolean. Allow the user to edit OCR data.

### eKYB
Run KYB validation with business information.
* `checkBusinessName` (optional, defaults to `false`): boolean. Validate business name.
* `checkAddress` (optional, defaults to `false`): boolean. Validate address.
* `checkTaxId` (optional, defaults to `false`): boolean. Validate tax ID.

### eKYC
Run KYC validation with user information.
* `checkName` (optional, defaults to `false`): boolean. Validate name.
* `checkEmail` (optional, defaults to `false`): boolean. Validate email.
* `checkAddress` (optional, defaults to `false`): boolean. Validate address.
* `checkPhone` (optional, defaults to `false`): boolean. Validate phone.
* `checkSsn` (optional, defaults to `false`): boolean. Validate SSN.
* `checkDob` (optional, defaults to `false`): boolean. Validate date of birth.
* `checkNationality` (optional, defaults to `false`): boolean. Validate nationality.

### NFCScan
Ask the user to scan the NFC chip on their document.
* `idType` (optional): `id` or `passport`. ID type used for NFC scanning. If omitted, the SDK reuses the ID type from ID scan when available; otherwise, it can show a chooser.
* `showNFCSymbolConfirmationScreen` (optional, defaults to `true`): boolean. Show a screen asking whether the document contains an NFC chip.
* `showInitialDataConfirmationScreen` (optional, defaults to `true`): boolean. Show the document OCR data confirmation screen before the first NFC scan.
* `processNFCData` (optional, defaults to `true`): boolean. Use data read from the NFC chip to validate identity.

Please check special integration instructions for iOS that need to be applied on app level [https://developer.incode.com/docs/user\_guide\_nfc\_scan#integration](https://developer.incode.com/docs/user_guide_nfc_scan#integration)

### FaceAuthentication
Authenticate an existing user with face recognition.
* `showTutorials` (optional, defaults to `true`): boolean. Show the tutorial before face authentication.
* `autoCaptureTimeout` (optional, defaults to `16`): number. Timeout in seconds for automatic face capture.
* `captureAttempts` (optional, defaults to `3`): number. Number of allowed face capture attempts before failing the step.
* `eyesClosedCheck` (optional, defaults to `true`): boolean. Check whether the user's eyes are closed.
* `headCoverCheck` (optional, defaults to `true`): boolean. Check for head coverings that may obstruct face recognition.
* `lensesCheck` (optional, defaults to `true`): boolean. Check whether the user is wearing lenses or glasses.
* `faceMaskCheck` (optional, defaults to `true`): boolean. Check whether the user is wearing a face mask.

## Modules interdependencies

The order of modules in `flowConfig` is the execution order.

* `ProcessId` expects `IdScanFront` and `IdScanBack` to run before it.
* `FaceMatch` expects `IdScan` and `SelfieScan` to run before it.
* `VideoSelfie` expects `IdScan` in `faceMatch` mode, or `SelfieScan` in `selfieMatch` mode.
* `Aes` expects `Phone`, `IdScan`, and `SelfieScan` to run before it.
* `UserScore` should run after all modules that provide scoring inputs.
* `Approve` should run after all modules required for the approval decision.
* `UserScore` and `Approve` do not depend on each other, so their relative order can be chosen by the app.
