A module is a self-contained step in an onboarding flow. Add modules to an OnboardingFlowConfiguration (for locally configured flows) to define what happens during onboarding, or configure them in a Flow or Workflow in Dashboard (for online-configured flows).
All the modules supported by the Flutter SDK are listed here, with their configuration parameters. For implementation options and instructions, see Common Implementation Patterns.
Add modules to an OnboardingFlowConfiguration using the corresponding add method:
flowConfig.addIdScan();
flowConfig.addSelfieScan();
Modules execute in the order they are added. To skip a module, omit its add call.
For completion payloads, update events, and module error examples, see Results.
Aes (Advanced Electronic Signature)
Module ID: AES
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.
uploadDocument(optional, defaults tofalse): bool?. Iftrue, the module shows the AES upload screen before the normal AES screens.downloadDocument(optional, defaults tofalse): bool?. Iftrue, the module downloads signed PDFs and shows the Confirmed Signature Details screen at the end of the AES flow.
Antifraud
Module ID: ANTIFRAUD
Compares the current Session against prior Sessions and known identities to detect signs of fraud.
- No additional parameters.
Approve
Module ID: USER_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.
forceApproval(optional, defaults tofalse): bool?. Iftrue, the user is approved regardless of score. Force-approved users still receive a validApproveresult andcustomerUUID. The SDK does not attach a flag to the result indicating force approval; whether the backend logs force-approved sessions distinctly is outside the SDK's scope. Regulated customers should contact their Incode representative for details on backend audit trails.
Captcha
Module ID: OTP
Presents a CAPTCHA challenge during onboarding to verify human interaction and reduce automated abuse. Returns the user's response to your app.
- No additional parameters.
CombinedConsent
Module ID: COMBINED_CONSENT
Asks the user for data sharing consent.
consentId(required): String. The ID for the combined consent. You can create a consent in Dashboard at Configuration > Consents.
CURP
Module ID: 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.
- No additional parameters.
CustomWatchlist
Module ID: INCODE_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.
- No additional parameters.
DocumentScan
Module ID: DOCUMENT_CAPTURE
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.
showTutorials(optional, defaults totrue): bool?. Shows a tutorial before document scan.showDocumentProviderOptions(optional, defaults tofalse): bool?. Controls whether the V1 capture flow offers file or image upload alongside the camera. Applies to the V1 UI only.documentType(optional, defaults toDocumentType.addressStatement): The expected document type. Possible values:addressStatement,paymentProof,medicalDoc,otherDocument1,otherDocument2.
eKYB
Module ID: EKYB
Collects and verifies a business entity's identity data, such as business name, address, and tax ID.
checkBusinessName(optional, defaults totrue): bool?checkAddress(optional, defaults totrue): bool?checkTaxId(optional, defaults totrue): bool?
eKYC
Module ID: 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.
checkName(optional, defaults totrue): bool?checkEmail(optional, defaults totrue): bool?checkAddress(optional, defaults totrue): bool?checkPhone(optional, defaults totrue): bool?checkSsn(optional, defaults totrue): bool?checkDob(optional, defaults totrue): bool?checkNationality(optional, defaults totrue): bool?
Module ID: EMAIL
Collects a user's email address and can confirm email ownership by sending a one-time password (OTP) to that address.
otpVerificationEnabled(optional): bool?. Enables one-time password verification of the entered email.
FaceAuthentication
Module ID: AUTHENTICATION
Captures a returning user's face with their device’s camera and matches it against the face already enrolled for that user. It then returns a pass or fail result.
Info
Not the same as Face Login
The FaceAuthentication module runs as a step inside an onboarding Flow or Workflow. To authenticate a user as a standalone capability (outside a Flow or Workflow), use Face Login and its startFaceLogin method.
showTutorials(optional, defaults totrue): bool?. Shows a tutorial before face authentication.autoCaptureTimeout(optional, defaults to16): number?. Timeout in seconds for automatic face capture.captureAttempts(optional, defaults to3): number?. Number of allowed capture attempts before the step fails.eyesClosedCheck(optional, defaults totrue): bool?. Checks whether the user's eyes are closed.headCoverCheck(optional, defaults totrue): bool?. Checks for head coverings that may obstruct face recognition.lensesCheck(optional, defaults totrue): bool?. Checks whether the user is wearing lenses or glasses.faceMaskCheck(optional, defaults totrue): bool?. Checks whether the user is wearing a face mask.
FaceMatch
Module ID: 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.
Older documentation may refer to faceMatchType as matchType; the current name is faceMatchType.
This module must be added after the IdScan and SelfieScan modules.
idCategory(optional, defaults toprimary):IdCategory.primaryorIdCategory.secondary.showUserExists(optional, defaults totrue): bool.faceMatchType(optional): Determines which comparisons the SDK performs to verify the user's identity.Value What it compares Required modules Assurance level idSelfiePrinted ID photo ↔ selfie IdScan,SelfieScanStandard nfcSelfieNFC chip photo ↔ selfie NFCScan,SelfieScanHigher (chip photo is issuer-signed) nfc3WayAll three: selfie ↔ chip, selfie ↔ printed ID, chip ↔ printed ID NFCScan,IdScan,SelfieScanHighest nfcSelfieandnfc3Wayrequire an NFC-capable document and a device with an NFC reader. Usenfc3Wayfor strict KYC/AML or high-risk onboarding where you need to verify the person, the physical document, and the chip are all mutually consistent.
Thenfc3Waychip-to-printed-ID comparison detects documents whose printed photo was altered but whose chip is genuine (or vice versa), which neitheridSelfienornfcSelfiecatches.
FullName
Module ID: NAME_CAPTURE
Collects the user's name and sends it to the server. Older documentation may refer to this module as Name; the current name is FullName.
- No additional parameters.
Geolocation
Module ID: 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.
isSkippable(optional, defaults tofalse): bool. Allows the step to be skipped. Whentrue, skipping or denying the location permission advances the flow instead of ending the session with a permission error.
GlobalWatchlist
Module ID: 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.
- No additional parameters.
GovernmentValidation
Module ID: INE_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.
isBackgroundExecuted(optional, defaults tofalse): bool?. Iftrue, hides the module UI during execution.
IdScan
Module ID: ID
Captures the front and back of a government-issued ID, with auto-capture and quality checks, and produces clean images for processing.
showTutorials(optional, defaults totrue): bool?. Shows a tutorial before ID scan.idType(optional):IdType.idorIdType.passport. If omitted, a chooser screen is displayed.idCategory(optional):IdCategory.primaryorIdCategory.secondary.scanStep(optional): Separates front and back ID captures. SpecifyScanStepType.frontorScanStepType.backto capture one side;ScanStepType.both(default) captures both and processes the ID. If you specifyfrontorback, you must add theProcessIdmodule after the captures.showRetakeScreenForManualCapture(optional, defaults totrue): bool?. Set tofalseto omit the photo review screen for manual captures.showRetakeScreenForAutoCapture(optional, defaults tofalse): bool?. Set totrueto show the photo review screen for auto captures.enableFrontShownAsBackCheck(optional, defaults tofalse): bool?. Iftrue, shows real-time feedback during back ID capture if the user appears to be capturing the front side again.enableBackShownAsFrontCheck(optional, defaults tofalse): bool?. Iftrue, shows real-time feedback during front ID capture if the user appears to be capturing the back side.enableRotationOnRetakeScreen(optional, defaults totrue): bool?. Set tofalseto turn off image rotation when the user enters the photo review screen.autocaptureUxMode(deprecated): Does not apply in V2. In V1, specifyingIdScanAutocaptureUXMode.countdownintroduces a 3-2-1 timer before auto-capture.showIDOverlay(optional, defaults tofalse): bool?. Iftrue, shows an ID overlay during capture.autoCaptureBestFrameTimeout(optional, defaults to 25 seconds): Timer that starts when an ID is first detected. If the ID is not auto-captured successfully before the timer expires, manual capture mode is activated.autoCaptureNoIdTimeout(optional, defaults to 60 seconds): Timer that starts when ID scan auto-capture starts. If no ID is detected before the timer expires, manual capture mode is activated.streamFrames(optional, defaults tofalse): bool. Enables streaming of the camera feed. Requires the SDK-vcvariant. See SDK variants.showIdTypeChooser(optional): bool?. Iftrue, displays the ID type chooser screen to the user.
MLConsent
Module ID: ML_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.
type(required):MLConsentType.gdprorMLConsentType.us.
NFCScan
Module ID: NFC_SCAN
Reads the secure NFC 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.
idType(optional):IdType.idorIdType.passport. The ID type to use for NFC scanning. If unset andIdScanis enabled, the ID type fromIdScanis reused; otherwise, an ID chooser screen is presented.showNFCSymbolConfirmationScreen(optional, defaults totrue): bool?. Iftrue, shows a screen asking the user whether their document contains an NFC chip. Disabling this is not recommended unless your app handles users without NFC documents, since they can otherwise get stuck.showInitialDataConfirmationScreen(optional, defaults totrue): bool?. Iftrue, shows the document OCR data confirmation screen before the first NFC scan.processNFCData(optional, defaults totrue): bool?. Iftrue, the data read from the NFC chip is used to validate identity. Behavior depends on howFaceMatchis configured.
OCREdit
Module ID: ID_OCR
Reviews OCR data.
isEditable(optional, defaults tofalse): bool?. Iftrue, the user can edit the OCR data.
Phone
Module ID: PHONE
Collects a user's phone number and can confirm phone ownership by sending a one-time password (OTP) via SMS.
defaultRegionPrefix(optional): int?. Default region prefix for phone input. If set, overrides the default prefix based on the user's device region.otpVerificationEnabled(optional): bool?. Enables one-time password verification of the entered phone number.
ProcessId
Module ID: PROCESS_ID
Processes the ID when the IdScan module was separated into front and back captures (that is, when ScanStepType.front or ScanStepType.back was specified as scanStep for IdScan).
idCategory(optional):IdCategory.primaryorIdCategory.secondary.enableIdSummaryScreen(deprecated): Does not apply in V2. In V1, defaults totrue. Set tofalseto turn off the ID capture summary screen.
Info
Note
Call this module only after both ScanStepType.front and ScanStepType.back IdScan modules have completed.
QRScan
Module ID: QR_SCAN
Captures the QR code on the back of an ID, decodes its identity data, and sends it to the server.
showTutorials(optional, defaults totrue): bool?. Shows a tutorial before QR scan.
SelfieScan
Module ID: SELFIE
Captures a 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 or 1:N face authentication.
showTutorials(optional, defaults totrue): bool?.lensesCheck(optional, defaults totrue): bool?. Checks whether the user is wearing glasses during the selfie scan.cameraFacing(optional, defaults toIdScanCameraFacing.front): Specifies which camera is used during selfie capture. SetIdScanCameraFacing.backto use the back camera.IdScanCameraFacingis intentionally shared across theIdScan,SelfieScan, andVideoSelfiemodules.faceMaskCheck(optional, defaults totrue): bool?. Checks whether the user is wearing a face mask.streamFrames(optional, defaults tofalse): bool. Enables streaming of the camera feed. Requires the SDK-vcvariant. See SDK variants.
Signature
Module ID: 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.
title(optional): String. Title displayed at the top of the screen.description(optional): String. Description displayed below the title.
UserConsent
Module ID: USER_CONSENT
Shows a custom consent agreement for the user to accept or reject.
title(required): String. Title for the user consent screen.content(required): String. Content for the user consent screen.
UserScore
Module ID: SHOW_RESULTS
Shows the info and scoring for all the steps performed.
mode(optional, defaults toaccurate):UserScoreFetchMode.accurateorUserScoreFetchMode.fast. Withaccurate, results are fetched from the server (more reliable, some latency). Withfast, on-device processing results are used.
VideoSelfie
Module ID: ACCEPT_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.
showTutorials(optional, defaults totrue): bool?. Shows a tutorial before video selfie.selfieScanMode(optional, defaults toselfieMatch):SelfieScanMode.selfieMatchorSelfieScanMode.faceMatch. Selects whether to compare against a captured selfie or the photo from the ID.selfieLivenessCheck(optional, defaults tofalse): bool?. Checks user liveness during the video selfie.enableFrontShownAsBackCheck(optional, defaults tofalse): bool?. Iftrue, shows real-time feedback during back ID capture if the user appears to be capturing the front side.enableBackShownAsFrontCheck(optional, defaults tofalse): bool?. Iftrue, shows real-time feedback during front ID capture if the user appears to be capturing the back side.showIdScan(optional, defaults totrue): bool?. Asks for an ID scan during the video selfie.showDocumentScan(optional, defaults totrue): bool?. Asks for proof of address during the video selfie.showVoiceConsent(optional, defaults totrue): bool?. Asks for voice consent during the video selfie.voiceConsentQuestionsCount(optional, defaults to3): int?. Number of voice consent questions.showRandomQuestions(optional): bool?. Iftrue, the module shows random questions the user must answer aloud during recording. Iffalse, no random questions are shown. If not set, the module decides whether to show them.randomQuestionsCount(optional): int?. The number of random questions to show whenshowRandomQuestionsistrue.idScanCameraFacing(optional, defaults toback):IdScanCameraFacing.frontorIdScanCameraFacing.back. Specifies which camera is used for ID scan during video selfie.IdScanCameraFacingis intentionally shared across theIdScan,SelfieScan, andVideoSelfiemodules.
Required ordering
Some modules must appear in a specific position relative to others. Add modules to your OnboardingFlowConfiguration in an order that satisfies all of the following:
ProcessIdmust followIdScanwith bothScanStepType.frontandScanStepType.back.FaceMatchmust follow bothIdScanandSelfieScan.VideoSelfierequiresIdScan(infaceMatchmode) orSelfieScan(inselfieMatchmode) to be present.Aes(Advanced Electronic Signature) must followPhone,IdScan, andSelfieScan.UserScoremust be at the end of the flow. Can be before or afterApprove.Approvemust be at the end of the flow. Can be before or afterUserScore.