# Modules

The Incode Android SDK is composed of single-purpose **modules**. You assemble an onboarding flow by adding modules to a `FlowConfig.Builder`, passing it to `startOnboarding()`, and receiving each module's output through your `OnboardingListener`. This page lists each module by category.

<Callout icon="📘" theme="info">
  ### Terminology

  "Module" here refers to an onboarding **step**, such as ID Scan or Video Selfie. You add them at runtime with `FlowConfig.Builder.add*()`.

  This is different from the Gradle **packaging modules**, like `welcome`, `nfc`, and `video-streaming`, that you [declare as dependencies](https://developer.incode.com/docs/android-installation#declare-dependencies) during installation. The **Dependency** column below tells you which packaging module each Incode SDK module needs. Anything marked `welcome` is included with the core SDK.
</Callout>

Each module is configured through its `Builder` and returns a result object through a dedicated callback on the listener. The linked guides cover detailed configuration for the most common modules. See [API Reference](https://developer.incode.com/docs/android-api-reference) for the full option set and result fields.

<Callout icon="❗" theme="error">
  ### Warning

  Most flows require the ID Scan and Selfie Scan modules. Omitting either one fails `FlowConfig.Builder.build()` with a `ModuleConfigurationException`.&#x20;

  Some modules require other modules to come before them. Omitting these fails `FlowConfig.Builder.build()` with an `InvalidModuleOrderException`.
</Callout>

The following tables can help you choose which modules to use. They are divided by category. Module descriptions are general. Exact behavior depends on your Flow or Workflow configuration.

***

## Collect Identity Data

These modules gather raw inputs from users. No pass/fail determination is made; these modules receive and record.

| Module                                                                                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | Dependency                                                                                                                                                                  |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Document Scan](https://developer.incode.com/docs/android-document-scan) | Captures a supplementary document, such as a proof of address document, medical document, or bank statement. Users can upload a file or take a photo of the document with their device’s camera. In Dashboard, this is the [Document Capture](https://developer.incode.com/docs/document-capture-dashboard) module.                                                                                                                                                                                                                                                                                                                      | `welcome`                                                                                                                                                                   |
| [Dynamic Forms](https://developer.incode.com/docs/android-dynamic-forms) | Presents one or more custom form screens to collect information from a user. In Dashboard, this is the [Forms and Data Entry](https://developer.incode.com/docs/forms-and-data-entry-dashboard) module.                                                                                                                                                                                                                                                                                                                                                                                                                                  | `welcome`                                                                                                                                                                   |
| [Email](https://developer.incode.com/docs/android-email)                 | Collects a user's email address and can confirm email ownership by sending a one-time password (OTP) to that address. In Dashboard, this is the [Email Input](https://developer.incode.com/docs/email-input-dashboard) module.                                                                                                                                                                                                                                                                                                                                                                                                           | `welcome`                                                                                                                                                                   |
| [Geolocation](https://developer.incode.com/docs/android-geolocation)     | Requests location permission, then captures the precise physical location of the user's device, using its GPS sensor to record coordinates and location fields such as country, state, and city. Also available as a non-UI method, so you can call it without showing Incode's UI. In Dashboard, this is the [Geolocation](https://developer.incode.com/docs/geolocation-dashboard) module.                                                                                                                                                                                                                                             | `welcome`                                                                                                                                                                   |
| [ID Info](https://developer.incode.com/docs/android-id-info)             | Extracts text from a captured identity document using [Optical Character Recognition (OCR)](https://developer.incode.com/docs/glossary#ocr). It then shows that text to the user to confirm it's correct before the session continues. When enabled, users can correct missing or misread fields. Add it after Process ID, which must run after ID Scan. In Dashboard, this is [Review OCR Data](https://developer.incode.com/docs/review-ocr-data-dashboard) module.                                                                                                                                                      | `welcome`                                                                                                                                                                   |
| [ID Scan](https://developer.incode.com/docs/android-id-scan)             | Captures the front and back of a government-issued ID, with auto-capture and quality checks, and produces clean images for processing. Supports a non-UI builder, so you can capture without showing Incode's UI. Most flows must include this module. Add it before Process ID. In Dashboard, this is the [ID Capture](https://developer.incode.com/docs/id-capture-dashboard) module.                                                                                                                                                                                                                                                  | `welcome`;<br />`video-streaming` for frame streaming;                                                                                                                      |
| [Name](https://developer.incode.com/docs/android-name)                   | Collects the user's name and sends it to the server.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | `welcome`                                                                                                                                                                   |
| [NFC Scan](https://developer.incode.com/docs/android-nfc-scan-2)         | Reads the secure [NFC](https://developer.incode.com/docs/glossary#nfc-scan) chip embedded in ICAO 9303-compliant travel documents, such as e-passports. It then returns the document holder's data, including the chip's portrait image. Add it after the ID Scan and Process ID modules. When a flow captures multiple IDs, NFC Scan applies only to the first ID. In Dashboard, this is the [NFC Scan](https://developer.incode.com/docs/nfc-scan-dashboard) module.                                                                                                                                                     | `nfc`                                                                                                                                                                       |
| [Phone](https://developer.incode.com/docs/android-phone)                 | Collects a user's phone number and can confirm phone ownership by sending a one-time password (OTP) via SMS. In Dashboard, this is the [Phone Number Input](https://developer.incode.com/docs/phone-number-input-dashboard) module.                                                                                                                                                                                                                                                                                                                                                                                                      | `welcome`                                                                                                                                                                   |
| [QR Scan](https://developer.incode.com/docs/android-qr-scan)             | Captures the QR code on the back of an ID, decodes its identity data, and sends it to the server.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | `welcome`                                                                                                                                                                   |
| [Selfie Scan](https://developer.incode.com/docs/android-selfie-scan)     | Captures the user's face with their device's camera and runs configurable liveness, face recognition and image quality checks. It can enroll new users so their face can be matched against an ID photo or used for later authentication. It can also log in returning users using [1:1](https://developer.incode.com/docs/glossary#11-face-authentication) or [1:N](https://developer.incode.com/docs/glossary#1n-face-authentication) face authentication. Most flows must include this module. In Dashboard, this is the [Face Capture](https://developer.incode.com/docs/face-capture-dashboard) module. | `welcome`;<br />`video-streaming` for frame and audio streaming;<br />`module-liveness-detection`, `model-age-estimation`, and `model-face-occlusion` for on-device results |
| [Video Selfie](https://developer.incode.com/docs/android-video-selfie)   | Records a short video of the user performing a guided series of actions, including capturing their ID and selfie, to confirm physical presence and run liveness and face match checks. It can also capture voice consent. Add it after a module that captures a selfie, such as Selfie Scan. In Dashboard, this is the [Video Selfie](https://developer.incode.com/docs/video-selfie-dashboard) module.                                                                                                                                                                                                                                  | `welcome`;<br />`model-face-recognition` when voice consent is enabled                                                                                                      |

## Verify and Authenticate

These modules run checks against collected data to produce a pass/fail or match/no-match determination.

| Module                                                                                                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Dependency                                                                                       |
| ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| [Antifraud](https://developer.incode.com/docs/android-antifraud)                         | Compares the current Session against prior Sessions and known identities to detect signs of fraud. In Dashboard, this is the [Antifraud Check](https://developer.incode.com/docs/antifraud-check-dashboard) module.                                                                                                                                                                                                                                                                                                                                                                                                                   | `welcome`                                                                                        |
| [CURP Validation](https://developer.incode.com/docs/android-curp-validation)             | Validates a person's CURP (Clave Única de Registro de Población), a personal identification number issued in Mexico, against Mexico's RENAPO registry. It accepts a CURP extracted via OCR, entered manually, or generated from personal data when the user doesn't know it. In Dashboard, this is the [CURP Validation](https://developer.incode.com/docs/curp-validation-dashboard) module.                                                                                                                                                                                                                                         | `welcome`                                                                                        |
| [Custom Watchlist](https://developer.incode.com/docs/android-custom-watchlist)           | Screens the user's collected data, including biometric face data when available, against your organization's private watchlist of blocked or trusted users, and influences the Session outcome accordingly. It runs as a background process and isn't visible to the end user. In Dashboard, this is the [Custom Watchlist](https://developer.incode.com/docs/custom-watchlist-dashboard) module.                                                                                                                                                                                                                                     | `welcome`                                                                                        |
| [eKYB (electronic Know Your Business)](https://developer.incode.com/docs/android-ekyb)   | Collects and verifies a business entity's identity data, such as business name, address, and tax ID. In Dashboard, this is the [eKYB](https://developer.incode.com/docs/ekyb-dashboard) module.                                                                                                                                                                                                                                                                                                                                                                                                                                       | `welcome`                                                                                        |
| [eKYC (electronic Know Your Customer)](https://developer.incode.com/docs/android-ekyc)   | Collects and verifies a user's personal identity data against authoritative data sources. This data can include the user's name, email, address, phone, tax ID, date of birth, and nationality. This module can prefill fields from data captured earlier in the flow, such as a scanned document, and validate them against your Incode configuration. In Dashboard, this is the [eKYC](https://developer.incode.com/docs/ekyc-dashboard) module.                                                                                                                                                                                    | `welcome`                                                                                        |
| [Face Authentication](https://developer.incode.com/docs/android-face-authentication)     | Captures a returning user's face with the device camera and matches it against the face already enrolled for that user. It then returns a pass or fail result. In Dashboard, this is the [Face Authentication](https://developer.incode.com/docs/face-authentication-dashboard) module.                                                                                                                                                                                                                                                                                                                                               | `welcome`;<br />`module-liveness-detection;`<br />`model-face-recognition` for on-device results |
| [Face Match](https://developer.incode.com/docs/android-face-match)                       | Compares the user's selfie against their ID photo, their NFC chip photo, or both in a 3-way match. It then returns a confidence score. Add it after Selfie Scan and at least one of the following: ID Scan, NFC Scan, or QR Scan. Also available as a non-UI method, so you can call it without showing Incode's UI. In Dashboard, this is the [Face Match](https://developer.incode.com/docs/face-match-dashboard) module.                                                                                                                                                                                                           | `welcome`                                                                                        |
| [Global Watchlist](https://developer.incode.com/docs/android-global-watchlist)           | Screens the user's identity against sources of sanctions, Politically Exposed Persons (PEP) databases, and adverse media, returning any matches found across the configured sources. In Dashboard, this is the [Watchlist](https://developer.incode.com/docs/watchlist-dashboard) module.                                                                                                                                                                                                                                                                                                                                             | `welcome`                                                                                        |
| [Government Validation](https://developer.incode.com/docs/android-government-validation) | Validates identity data extracted from a user's ID against an authoritative government registry. The process runs in the background and isn't visible to the user. It can also match the user's photo in the government database against their captured selfie. Add it after Selfie Scan and at least one of the following: ID Scan, NFC Scan, or QR Scan. In Dashboard, this is the [Government Data Verification](https://developer.incode.com/docs/government-data-verification-dashboard) and [Government Record Verification](https://developer.incode.com/docs/government-record-verification-dashboard) modules. | `welcome`                                                                                        |
| [Process ID](https://developer.incode.com/docs/android-process-id)                       | Determines whether a submitted identity document is authentic. It analyzes the images captured by the [ID Scan](https://developer.incode.com/docs/android-id-scan) module against known parameters for the document type, runs a set of authenticity checks, and produces a validation result. Add it before ID Info and after ID Scan. Also available as a non-UI method, so you can call it without showing Incode's UI. In Dashboard, this is the [ID Validation](https://developer.incode.com/docs/id-validation-dashboard) module.                                                                                 | `welcome`                                                                                        |
| [Tax ID Validation](https://developer.incode.com/docs/android-tax-id-validation)         | Collects a user's tax identification number and validates its format and structure.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | `welcome`                                                                                        |

## Capture Signatures and Consent

These modules capture legally binding signatures and record user consent.

| Module                                                                                                                           | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | Dependency |
| -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| [AES (Advanced Electronic Signature)](https://developer.incode.com/docs/android-aes-advanced-electronic-signature) | Shows the user documents to sign, collects their consent, and captures a certificate-backed electronic signature. That digital certificate verifies their identity, making the signed document legally binding and compliant. In Dashboard, this is the [Advanced Electronic Signature](https://developer.incode.com/docs/advanced-electronic-signature-dashboard-1) module.                                                                                                                                                                                                | `welcome`  |
| [Combined Consent](https://developer.incode.com/docs/android-combined-consent)                                     | Shows the user one or more preconfigured [consents](https://developer.incode.com/docs/configuration-consents-tab) to review and accept, then records their agreement. Consents obtain the user's permission to collect and process their data. Most jurisdictions require this at the start of an identity verification journey. This module supports offline mode for delayed consent. In Dashboard, this is the [Data Sharing Consent](https://developer.incode.com/docs/data-sharing-consent-dashboard) module.                                            | `welcome`  |
| [Machine Learning Consent](https://developer.incode.com/docs/android-machine-learning-consent)                     | Captures the user's consent to process their biometric data for machine-learning purposes. It records their response on the server. You choose the consent text variant (US or GDPR style) that matches your compliance needs.                                                                                                                                                                                                                                                                                                                                                            | `welcome`  |
| [QES (Qualified Electronic Signature)](https://developer.incode.com/docs/android-qes)                              | Shows the user documents to sign, collects their consent, and captures a Qualified Electronic Signature (QES), the highest-assurance electronic signature under the [EU eIDAS Regulation](https://eur-lex.europa.eu/eli/reg/2014/910/oj/eng). A qualified certificate from a Qualified Trust Service Provider (QTSP) backs the signature, making it legally equivalent to a handwritten signature across EU member states. In Dashboard, this is the [Qualified Electronic Signature](https://developer.incode.com/docs/qualified-electronic-signature-dashboard-1) module. | `welcome`  |
| [Signature](https://developer.incode.com/docs/android-signature)                                                   | Captures a signature the user hand-draws on screen. It is typically placed at the end of a verification journey to capture explicit consent. In Dashboard, this is the [Electronic Signature](https://developer.incode.com/docs/electronic-signature-dashboard) module.                                                                                                                                                                                                                                                                                                     | `welcome`  |
| [User Consent](https://developer.incode.com/docs/android-user-consent)                                             | Shows a custom consent agreement for the user to review and accept.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | `welcome`  |

## Add Human-Assisted Verification

These modules introduce a live agent into the IDV process.

| Module                                                                                                           | Description                                                                                                                                                                                                                                                                                                                                                                         | Dependency        |
| ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| [Conference (Assisted Video)](https://developer.incode.com/docs/android-conference-assisted-video) | Connects the user with a live agent over video and audio to conduct an identity verification interview. The agent can request that documents be shown on camera and complete any verifications needed to meet regulatory or business requirements. In Dashboard, this is the [Video Conference](https://developer.incode.com/docs/video-conference-dashboard) module. | `video-streaming` |

## Configure the User Experience

These modules shape the user experience of a Workflow or Flow, including routing decisions. They do not collect or verify data.

| Module                                                                                 | Description                                                                                                                                                                                                                                                                                                                                                                                    | Dependency |
| -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| [Custom Module](https://developer.incode.com/docs/android-custom-module) | Pauses a Workflow and hands control to your application, which runs custom logic and returns a result that determines how the Workflow continues. It does this by handing your app a `callbackName`, then resuming the Workflow at the next node once you report a result. In Dashboard, this is the [Custom Module](https://developer.incode.com/docs/custom-module-dashboard). | `welcome`  |

## View Results

| Module                                                                     | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                               | Dependency |
| -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| [Results](https://developer.incode.com/docs/android-results) | Shows a screen summarizing the data captured during onboarding, including OCR fields, captured images, and identity scores. It returns an overall user score. Add it after the modules that add or process the data it summarizes, such as ID Scan and Selfie Scan. Also available as a non-UI method, so you can call it without showing Incode's UI. In Dashboard, this is the [Show Results](https://developer.incode.com/docs/field-comparison) module. | `welcome`  |

## Configure Android-Specific Experiences

These modules have no Dashboard equivalent. They exist only in the Android SDK.

| Module                                                                                             | Description                                                                                                                                                                                                                                                                                                                                                                                                          | Dependency |
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
| [Accept Video Selfie](https://developer.incode.com/docs/android-accept-video-selfie) | Presents a consent screen that asks the user to agree to having a video selfie recorded later in the flow. It signals once the user accepts. This module is in beta. Add it before Video Selfie.                                                                                                                                                                                                                     | `welcome`  |
| [Approval](https://developer.incode.com/docs/android-approval)                       | Finalizes an onboarding flow by deciding whether to approve the user, then registers approved users in the Incode database. By default, it runs with no UI and approves silently, but you can toggle the UI, silent face match, and forced approval. Add it after the modules that add or process the data it summarizes, such as ID Scan and Selfie Scan.                                                           | `welcome`  |
| [Captcha](https://developer.incode.com/docs/android-captcha)                         | Presents a CAPTCHA challenge during onboarding to verify human interaction and reduce automated abuse. It then returns the user's response to your app. In Dashboard, this feature can be enabled when adding the [Email Input](https://developer.incode.com/docs/email-input-dashboard) or [Phone Number](https://developer.incode.com/docs/phone-number-input-dashboard) Input module. | `welcome`  |
| [Intro](https://developer.incode.com/docs/android-intro)                             | Displays an introduction screen. It lists the documents and checks the user will need to complete.                                                                                                                                                                                                                                                                                                                   | `welcome`  |

***

## Helpers Used by Every Integration

These aren't modules, but every integration uses them to configure a session and receive results. See [Configure Flows Locally and Run End to End](https://developer.incode.com/docs/android-configure-flows-locally-and-run-end-to-end) for end-to-end usage and [API Reference](https://developer.incode.com/docs/android-api-reference) for the full surface.

| Helper                                  | Purpose                                                                                                                                           |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SessionConfig`                         | Configures the onboarding session: Flow or Workflow ID, validation modules, external token or ID, and custom fields.                              |
| `FlowConfig`                            | Declares which modules run and in what order. Build it with `FlowConfig.Builder` and the `add*()` methods shown on each individual module's page. |
| `CommonConfig`                          | Cross-cutting UI options that apply to the whole flow, such as the close button and exit confirmation.                                            |
| `OnboardingListener`                    | The callback interface that delivers each module's result object and flow-level events.                                                           |
| `startOnboarding()` / `startWorkflow()` | Entry points on `IncodeWelcome` that launch a flow from a `FlowConfig` or a Dashboard-defined Workflow.                                           |
| `deleteUserLocalData()`                 | Clears the captured session data from the device. Call it after you're done with a session.                                                       |

***

## Non-UI APIs

You can use a specific set of modules without showing Incode's UI. These modules deliver results through specific callbacks. You don't need to add them to the flow or section configuration.

```kotlin
IncodeWelcome.getInstance().faceMatch(interviewId: String?, idCategory: IdCategory?, faceMatchListener: FaceMatchListener)
IncodeWelcome.getInstance().faceMatch(interviewId: String?, matchType: FaceMatch.MatchType?, idCategory: IdCategory?, faceMatchListener: FaceMatchListener)
IncodeWelcome.getInstance().geolocation(context: Context, interviewId: String?, geolocationListener: GeolocationListener)
IncodeWelcome.getInstance().processId(interviewId: String?, idCategory: IdCategory?, idProcessListener: IdProcessListener)
IncodeWelcome.getInstance().processLaborHistory(interviewId: String?, curp: String, laborHistoryListener: ProcessLaborHistoryListener)
IncodeWelcome.getInstance().processPaymentProof(interviewId: String?, processPaymentProofListener: ProcessPaymentProofListener)
IncodeWelcome.getInstance().getPaymentProofInfo(interviewId: String?, getPaymentProofInfoListener: PaymentProofInfoListener)
IncodeWelcome.getInstance().getUserScore(idResultsFetchMode: IDResultsFetchMode, interviewId: String?, getUserScoreListener: GetUserScoreListener)
```
```java
IncodeWelcome.getInstance().faceMatch(@Nullable String interviewId, @Nullable IdCategory idCategory, @NonNull FaceMatchListener faceMatchListener)
IncodeWelcome.getInstance().faceMatch(@Nullable String interviewId, @Nullable FaceMatch.MatchType matchType, @Nullable IdCategory idCategory, @NonNull FaceMatchListener faceMatchListener)
IncodeWelcome.getInstance().geolocation(@NonNull Context context, @Nullable String interviewId, @NonNull GeolocationListener geolocationListener)
IncodeWelcome.getInstance().processId(@Nullable String interviewId, @Nullable IdCategory idCategory, @NonNull IdProcessListener idProcessListener)
IncodeWelcome.getInstance().processLaborHistory(@Nullable String interviewId, @NonNull String curp, @NonNull ProcessLaborHistoryListener laborHistoryListener)
IncodeWelcome.getInstance().processPaymentProof(@Nullable String interviewId, @NonNull ProcessPaymentProofListener processPaymentProofListener)
IncodeWelcome.getInstance().getPaymentProofInfo(@Nullable String interviewId, @NonNull PaymentProofInfoListener getPaymentProofInfoListener)
IncodeWelcome.getInstance().getUserScore(@NonNull IDResultsFetchMode idResultsFetchMode, @Nullable String interviewId, @NonNull GetUserScoreListener getUserScoreListener)
```

<Callout icon="📘" theme="info">
  ### Non-UP APIs vs. Capture-Only Mode

  Non-UI APIs skip the UI but still send data to Incode for processing, while [Capture-Only mode](https://developer.incode.com/docs/android-capture-only-sdk) keeps the UI but skips sending data to Incode.
</Callout>

For full method signatures, see [API Reference](https://developer.incode.com/docs/android-api-reference). For result and error objects, see [Results](https://developer.incode.com/docs/android-results-reference).
