4.22.0
7 October 2026
Enhancements
Added the
configErrorcode toIncodeSdkFlowError.startWorkflowreports it before the Workflow starts whensessionConfighas neither aconfigurationIdnor atoken. Previously Android reported a generic SDK error, and iOS failed only after making network requests.Added optional
interviewIdparameter to thegetUserScoremethod.Added
userScoreFailedanduserCancellederror codes toIncodeSdkFlowErrorfor thegetUserScoremethod.Added additional fields to the
UserScoreResultclass and turned its sections into structured objects. See Migration Guide and Results for more details.Added
approvemethod to programmatically initiate approval of the user.Added
errortoApprovalResult. It reports the module-level error from the native SDK usingIncodeSdkFlowErrorvalues.Added optional
documentSourcesparameter to theDocumentScanmodule. It takes aList<DocumentSource>(camera,photoUpload,fileUpload) and defines which capture sources are offered to the user. It applies to both the V1 and V2 UI.fileUploadis ignored on both Android and iOS for document types that don't support PDF uploads (medicalDoc); if it was the only source, the native SDK default applies.Added optional
mergeSessionRecordingstoOnboardingSessionConfiguration. It is only honoured bystartWorkflow()and ignored by the other entry points that take anOnboardingSessionConfiguration. Omit it to keep current behaviour.Breaking change
startWorkflow'sonErrornow receives anIncodeSdkFlowErrorcode, such aspermissionsDenied, instead of the native error message. Convert it witherror.toIncodeSdkFlowError(). See the Migration Guide.Breaking change The
otpVerificationEnabledparameter on thePhoneandEmailmodules is now namedotpVerification, matching the native SDK. It affectsaddPhone(),addEmail(),PhoneModule, andEmailModule. See the Migration Guide.Breaking change
PhoneNumberResult.phoneis now nullable (String?). It was non-nullable, but the value is absent when the SDK captured no number, for example when the user cancelled, which would have thrown at runtime. See the Migration Guide.Breaking change On Android: user score values no longer include the
/100suffix, in bothgetUserScoreresults and theonUserScoreFetchedcallback. A score whose status wasmanualpreviously came through as a localized phrase rather than a number.Breaking change On Android:
getUserScore'sfetchModenow defaults toaccurate, previouslyfast.Breaking change On Android:
getUserScorenow reportsuserScoreFailedwhen a session produced no score, instead of completing with an empty result.Breaking change On iOS: the plugin now depends on
IncodeBridgeCommon, which requires a new spec repository source in your Podfile.Breaking change On iOS:
getUserScore'sonErrornow deliversIncodeSdkFlowErrorcodes instead of the native SDK's error strings.Breaking change Renamed
faceMatch()'sfaceMatchTypeparameter tomatchType. TheFaceMatchmodule's flow-config parameter is stillfaceMatchType.Breaking change Renamed
OnboardingSessionConfiguration'suserRegionparameter toregion, andonboardingValidationModulestovalidationModules. Affects every entry point taking anOnboardingSessionConfiguration.regionno longer defaults toALLwhen omitted; pass it explicitly if you relied on that.regionremains Android only. See the Migration Guide.Breaking change Changed
faceMatch()'sonErrorsignature fromFunction(String error)toFunction(String code, String message, PlatformException? cause), matchingsetQuantityStrings. Codes arefaceMatchErrorand, on Android,userCancelled, replacing the previous"UserCancelled"string. A cancellation reachesonErrorasuserCancelledwhen noonUserCancelledcallback is supplied.Breaking change Changed
faceMatch()'sconfidence,nfcVsIdConfidenceandnfcVsSelfieConfidenceon Android to returnnullwhen there was nothing to compare, instead of-1. Check fornullinstead of comparing to-1.Phone,Email, andFullNameresults now share one shape on both platforms: the captured value, plusstatusandresultCodeonPhoneNumberResult,AddEmailResultandAddFullNameResult. Both are non-nullable, so every result carries them on both platforms.status(success/fail) is the portable outcome;resultCodeis the finer detail, reportingsuccessanderroron both platforms and additionallyuserCancelledandemulatorDetectedon Android, since on iOS a cancellation is reported at the session level rather than through a module callback.ApprovalResult.uuidandApprovalResult.customerTokenare nownullon iOS when the user was not approved. Previously they were reported as empty strings. See the Migration Guide.PhoneModule.defaultRegionPrefixis now validated consistently on both platforms. Values outside1-9999are ignored and the device's own region prefix is used, matching the documented behavior. Previously an out-of-range value was ignored on Android but passed through on iOS.Deprecated the
showDocumentProviderOptionsparameter of theDocumentScanmodule. It maps to the deprecated native chooser flags, is not applied in V2, and is ignored whendocumentSourcesis provided. UsedocumentSourcesinstead. See the Migration Guide.Enhanced jailbreak detection on iOS. Add the URL schemes it queries to
LSApplicationQueriesSchemesin your app'sInfo.plist. See Installation.
Fixes
- Breaking change A flow configuration naming an unrecognized module now reports
unknownModulethroughonErrorinstead of being skipped. Previously, Android silently dropped the module with no log at all; iOS logged it withprint, which does not reach device logs in release. Either way, the flow ran without the step and still reported success, so a stale module name was invisible. See the Migration Guide. - Fixed a crash on iOS when a user score contained a
warnstatus, or a status the SDK left unset. - Fixed
faceMatch()'sFaceMatchResult.isFaceMatched,isNameMatched,nfcVsIdConfidence,nfcVsSelfieConfidenceandsecondIdConfidenceon iOS returningfalse/0when there was no data to compare. They now returnnull, sofalse/0means a real result. No action needed unless you need to tell the two apart.
Working with Android SDK 5.54.0 and iOS SDK 5.50.0
4.21.0
16 September 2026
4.21.0
- Added optional
minVideoLengthRequiredparameter to theVideoSelfiemodule. - Added
locationUnavailabletoIncodeSdkFlowError. - Added
storageUnavailabletoIncodeSdkFlowError. Android only. Flow APIs report it when the device cannot provide a writable images directory, so the flow now fails at start instead of losing captures later on. - On Android, the SDK reports the user-cancel tracking event as
userCanceledinstead ofuserCancelled. TheonUserCancelledcallback is unchanged. See the Migration Guide. - On Android, the Video Selfie V2 camera steps hide the close (X) button, so
showCloseButtonno longer applies to them. Other screens are unaffected. - On Android, Signature V2 reads its title and description from the new
onboard_sdk_signature_capture_titleandonboard_sdk_signature_capture_descriptionstring resources. See the Migration Guide. - Fixed a bug on iOS where a skipped, denied or unavailable location during the
Geolocationmodule ended thestartOnboarding/startOnboardingSectioncall immediately.
Working with Android SDK 5.53.0 and iOS SDK 5.49.0
4.20.0
27 August 2026
4.20.0
- Added a
setQuantityStringsmethod, used to localize plural texts on Android. setThemeandsetUXConfignow take a JSONStringinstead ofMap<String, dynamic>. Encode maps withjsonEncodebefore calling. See the Migration Guide.- Added an optional
sdkModeparameter toinit(). It accepts the same values assetSdkMode, so you can set the mode during initialization. - Added a
sendDiagnosticsDataparameter toinit(), for iOS only. Set tofalseto prevent the Incode SDK from sending diagnostic data. If omitted, the native SDK default is used (true). Ignored on Android. - Added
configErrorandinvalidInitParamscodes toIncodeSdkInitError. Initialize failures now also include a human-readablemessage;onErrorstill receives the error code. - Removed unused
waitForTutorialsparameter frominit(). Tutorial behavior is configured per module withshowTutorials; see Modules. - Updated the Android build requirements:
compileSdk36, Kotlin Gradle plugin2.2.21, Android Gradle Plugin8.9.1, and Gradle8.14.5are now the minimums. See the Migration Guide.
Working with Android SDK 5.51.0 and iOS SDK 5.47.0
4.19.0
29 July 2026
4.19.0
- Added support for Dart 3.x. The plugin's SDK constraint was widened to
>=2.12.0 <4.0.0. - Added optional
voiceConsentLanguageparameter toOnboardingSessionConfigurationto set the voice consent language in theVideoSelfiemodule. Supported values: 'en', 'es', 'pt', and 'he'. Default is English. - Added SNA (Silent Network Authentication) to
PhoneModule(only available via Flows integration and on a new variant-sna). - Replaced
jailbreakDetectederror code withintegrityCompromisedinIncodeSdkFlowErrorto indicate that the device integrity has been compromised (e.g., jail-broken or rooted). - Removed
disableJailbreakDetectionparameter frominit()method.
Working with Android SDK 5.50.0 and iOS SDK 5.46.0
4.18.0
23 June 2026
4.18.0
- Added
isInitializedmethod that returns a boolean indicating whether the SDK has been fully initialized. - Deprecated
FaceAuthMode.serverinstartFaceLogin. Migrate to theFaceAuthenticationmodule instead.FaceAuthMode.localandstartFaceLogin()with local mode remain fully supported. - Deprecated
IncodeSdkFlowError.badEnvDetected. It is no longer reported: the native SDK now terminates the process when a compromised device environment is detected, so the error can never be delivered viaonError. It will be removed in a future release. - Fixed an Android ANR ("Input dispatching timed out" /
FocusEvent) that could occur at startup. SDK setup calls (initialize,setSdkMode,setTheme,setUXConfig, etc.) now run off the platform main thread, with results marshaled back to it.
Working with Android SDK 5.49.0 and iOS SDK 5.44.0
4.17.0
28 May 2026
4.17.0
- Updated the default values of the
faceMaskCheck,eyesClosedCheck,headCoverCheckandlensesCheckparameters totruein theFaceAuthenticationmodule. - Updated the default values of the
faceMaskCheckandlensesCheckparameters totruein theSelfieScanmodule. - Fixed a bug on iOS where the
MLConsentmodule screen was not shown whentypewas not provided. Thetypeparameter ofMLConsentmodule is now required. - Fixed:
showCloseButton(allowUserToCancel: false)now correctly hides the close button on Android. Previously the button was always shown regardless of the parameter value.
Working with Android SDK 5.48.0 and iOS SDK 5.44.0
4.16.0
12 May 2026
4.16.0
- Added
isSkippableflag to theGeolocationmodule. It allows the geolocation step to be skipped. When set totrue, skipping or denying location permission advances the flow instead of ending the session with a permission error. - Added
allAttemptsExhaustedflag toIdScanResultandSelfieScanResultindicating when capture or upload retries are no longer available. - Added per-attempt
IdScancallbacksonIdFrontAttemptCompleted/onIdBackAttemptCompleted. They fire after every individual capture attempt, including intermediate failures. The terminal attempt is signaled whenIdScanResult.allAttemptsExhaustedistrueor when the attempt succeeds. - Added per-attempt
SelfieScancallbackonSelfieScanAttemptCompleted. It fires after every individual selfie capture attempt, including intermediate failures. The terminal attempt is signaled whenSelfieScanResult.allAttemptsExhaustedistrueor when the attempt succeeds.
Working with Android SDK 5.47.0 and iOS SDK 5.43.0
4.15.0
29 April 2026
4.15.0
- Added
deleteLocalUserDatamethod. - Added new internal Android dependency com.incode.sdk.hybrid-bridge that is required to have to a successful build. In case you're experiencing issues fetching it during gradle sync phase please contact your Incode representative, as your account access might have to be updated.
- Fixed UIScene lifecycle crash on iOS.
Working with Android SDK 5.46.0 and iOS SDK 5.42.0
4.14.0
7 April 2026
4.14.0
- Added support for Android SDK initialization without api key and with e2ee url.
- Added parameter
showIdTypeChoosertoIDScanmodule. ID Document Chooser visibility is now controlled solely by theshowIdTypeChooserparameter inaddIdScan. Previously, settingidTypeimplicitly hid the chooser. The configuredidTypeis now only used as a pre-selection when the chooser is disabled(showIdTypeChooser == false) - Added new parameter
e2eeEncryptionEnabledforstartFaceLoginmethod that enables End-to-End Encryption (E2EE) on Android. - Introduced
startFaceMatchmethod to perform a face match without showing UI. - Fixed a bug caused by
flowTaghaving been an optional parameter ofstartNewOnboardingSection. It is now required to provide aflowTagto usestartNewOnboardingSection. - Removed parameters
disableHookDetection,disableEmulatorDetection,disableRootDetection,disableVirtualEnvironmentDetectionfrominitmethod. - Removed
simulatorDetected,rootDetected,hookDetected,virtualEnvDetectedfromIncodeSdkFlowError.
Working with Android SDK 5.45.1 and iOS SDK 5.41.0
4.13.0
26 February 2026
4.13.0
- Added
enableFrontShownAsBackCheckandenableBackShownAsFrontCheckoptional parameters to theVideoSelfiemodule. - Deprecated
autocaptureUxModeparameter from theIdScanmodule. - Deprecated
enableIdSummaryScreenparameter from theProcessIdmodule. - Fixed issue preventing custom V2 theme from applying when configured via JSON.
Working with Android SDK 5.44.0 and iOS SDK 5.40.0
4.12.0
6 February 2026
4.12.0
- Added new Flutter SDK variant '-l', so now Flutter SDK is delivered in multiple variants: 4.12.0: Standard variant 4.12.0-vc: Includes streaming 4.12.0-nfc: Includes NFC 4.12.0-l: Includes local face recognition models
- Removed the
enableRotationOnRetakeScreenparameter from theIdScanmodule. Captured documents are now always displayed in a vertical orientation on the Review Screen. - Renamed the
showRetakeScreenparameter toshowRetakeScreenForManualCapturein theIdScanmodule. - Renamed the
showAutoCaptureRetakeScreenparameter toshowRetakeScreenForAutoCapturein theIdScanmodule.
Working with Android SDK 5.43.0 and iOS SDK 5.39.1
4.11.0
2 December 2025
4.11.0
- Added optional
sslPinningEnabledandforceSSLPinningparameters to theinitmethod to support SSL pinning configuration. - Added
titleanddescriptionparams to theSignaturemodule. - Fixed error handling on Android.
Working with Android SDK 5.41.1 and iOS SDK 5.38.0