4.11.0
30 October 2026
CurpValidation
- Breaking change The
CURPValidationmodule has been renamed toCurpValidation, the name used on the other platforms. The old name now fails with anunknownModuleerror. See the Migration Guide. - Breaking change The
CurpValidationresult key has been renamed fromcurpDatatocurpValidationData. See the Migration Guide. - Breaking change The
Phone,Email, andCurpValidationmodules no longer accept booleans and numbers in string form. Passtrueand52, not"true"and"52". A string value is now ignored and the native default applies, sovalidationEnabled: "false"leaves server validation on. The plugin logs a warning that names the module and the key. OmittingvalidationEnabledleaves server validation on, which is the native SDK default. curpValidationDatanow has the same shape on both platforms:curp,valid,data,status(success/fail), andresultCode.validandresultCodeare new. See Results.- Breaking change On Android,
curpValidationData.statusis nowfailwhen RENAPO rejects the CURP. Previously, it wassuccesson Android andfailon iOS for the same CURP. - Breaking change On Android,
curpValidationData.statusis nowfailorsuccess. Previously, it could contain the native error message. - Breaking change
curpValidationData.curpandcurpValidationData.dataare now omitted when the SDK has no value. Previously,curpwas""on both platforms anddatawas""on iOS. - When
validationEnabledisfalse,curpValidationDatahas novalidordatakey, because no server check ran. Itsstatusissuccesswhen a CURP was captured, andfailotherwise.
Flow Methods
- Breaking change For
startOnboardingSection, pass real booleans forrecordSessionConfig.recordSessionandrecordSessionConfig.forcePermission. RenameforcePermissionstoforcePermission. Strings such as"true"and"false"are ignored, sorecordSession: "true"now leaves recording off without an error callback. Both fields default tofalse.startOnboardingkeeps its previous recording configuration. - Breaking change
startOnboardingSectionrequires a non-blank stringsectionTag. A missing, null, blank, or non-string tag fails withconfigError. - Breaking change A
startOnboardingSectionstart-up error now returns{ code, message, cause }instead of a string.causeis an object ornullon both platforms. Unknown modules reportunknownModule, other module configuration errors reportconfigError, and start exceptions reportunknown. - Breaking change Calling a second
startOnboardingSectionwhile a section is running fails withsectionAlreadyRunningon both platforms. The running section keeps its callback and results. Wait for its callback before starting another section. See the Migration Guide. - Breaking change Changed the cancel error of
startOnboarding,startOnboardingSection,startFlowandstartWorkflowon Android touserCancelled, the same as iOS. Previously, Android reportedonUserCancelled. See the Migration Guide. - Breaking change
startFlownow runs through the shared Incode bridge, the same asstartWorkflow:- A start-up failure calls the error callback with
{ code, message, cause }:activityNotPresentwithout a presenting view controller.configErrorwhensessionConfighas neither aconfigurationIdnor atoken.unknownwhen the flow cannot start.
- Previously, iOS passed a plain message string, and Android failed with an invalid-action error. See the Migration Guide.
- A start-up failure calls the error callback with
- Changed
startOnboarding,startOnboardingSection,startFlowandstartWorkflowto report more specific error codes. Previously, these wereunknown. See the Migration Guide.- Android:
locationUnavailablewhen the location is unavailablepermissionsDeniedwhen the permission is denied.insufficientDiskSpaceandonDeviceProcessingNotCompatible.
- iOS:
permissionsDeniedfor a denied fake-camera or audio permission.sessionCreationFailed,captchaNotVerified,sectionAlreadyRunningandnoActiveSession.
- Both platforms:
videoSelfieNotCompleted.biometricConsentNotGivenandbiometricConsentNotReceived.
- Android:
startWorkflownow reportsactivityNotPresentinstead ofunknownwhen there is no presenting view controller or Activity.- Fixed flows on Android that never ended when the system destroyed the SDK screen. The error callback now receives the new
interruptedcode, the same as iOS, which reportedunknownbefore. See the Migration Guide. - Fixed flows that could call the success or error callback more than once. Each flow call now ends with exactly one callback.
- Fixed module results of a previous flow showing up in the result of the next flow on iOS, and after a section on Android.
Geolocation
- Renamed the
addGeolocationmodule toGeolocation. The old name still works but is deprecated and logs a warning; it will be removed in a future release.isSkippablenow accepts a boolean (true), which fixes iOS ignoring a booleanisSkippable: true. See the Migration Guide. - Breaking change
isSkippablemust be a real boolean, with bothGeolocationandaddGeolocation. The 4.10.0 string form (isSkippable: "true") is now ignored, so the step is not skippable. The plugin logs a warning that names the module and the key. PassisSkippable: true. This also fixes iOS ignoring a booleanisSkippable: true. See the Migration Guide. - Breaking change Changed
geoLocationDatato the shared native contract:addressFields,latitude,longitude,status,resultCode, anderror. Address fields are absent instead of""when unknown. - Breaking change Changed
addressFields.stateon Android to hold the country name, as it already did on iOS. It previously held the region.addressFields.citynow falls back to the region when the city is unknown, on both platforms. - Fixed Android silently dropping an unavailable location. It is now reported in
geoLocationDatawithstatus: "fail". - Added
latitudeandlongitudetogeoLocationData, anderroron Android. - Changed Android to report a failed non-skippable
Geolocationstep toerrorCallbackaspermissionsDeniedorlocationUnavailableinstead ofunknown.
Appearance
- Added the
setLogo()method. It sets a custom logo for the SDK screens, including every UX V2 screen, such as theaddFaceAuthenticationscreens. Pass the name of an image of your app: a drawable resource name on Android, and an image asset name on iOS. If the name cannot be resolved, the error callback receivesappearanceError. On Android, add the drawable tores/raw/keep.xml, or the Android shrinker removes it from release builds. SeesetLogo()in the API Reference and the Migration Guide.
Working with Android SDK 5.55.0 and iOS SDK 5.51.0.
4.10.0
7 October 2026
4.10.0
- Breaking change If a flow configuration includes a module name the SDK doesn't recognize, the call now fails with an
unknownModuleerror. Previously, the SDK skipped the module, wrote a log message, and still reported the flow as successful even though the step never ran. Before you upgrade, check your flow configurations for outdated or misspelled module names. - Added an optional
documentSourcesparameter to theaddDocumentScanmodule. Pass an array of"camera","photoUpload", and"fileUpload"to restrict the submission methods offered on the source chooser. The parameter defaults to every source thedocumentTypesupports. - Added the
approvemethod, which allows you to start user approval from your code instead of relying on the flow configuration. - Changed the
approveDataresult of the in-flowapprovemodule to the same shape the newapprovemethod returns:statusandidare nowsuccessanduuid.- A new
errorkey was added. See the Migration Guide.
- Added an
integrityCompromisederror case on iOS. - Added an optional
interviewIdparameter to thegetUserScoremethod. - The
getUserScoremethod can now return two new error codes:userScoreFailed: No score could be retrieved for the session, for example in submit-only mode or after a network error.userCancelled: The user canceled before the score was returned. Android only. On iOS,getUserScoreshows no UI, so the user can't cancel it.
- Breaking change If an Android session produces no score,
getUserScorenow fails withuserScoreFailed. Previously, it succeeded with an empty result. If your app treated an empty result as a valid outcome, move that handling to your error callback. - Changed the result shape of the
getUserScoremethod; it is now an object. It contains the same payload on both Android and iOS. It addsgovernmentValidation, the per-check lists,livenessScore,photoQualityandexistingUser. - Changed the user score values on Android to no longer include the
/100suffix, in bothgetUserScoreresults and theonUserScoreFetchedcallback. - Changed the SDK to report
warnwhere it previously reportedwarningstatus on iOS. Absent values arenullinstead of"". - On Android,
getUserScorenow usesfastmode when you passfetchMode: 'fast'. Previously, it always usedaccurate. - The plugin now depends on
IncodeBridgeCommon. - The plugin now adds the URL schemes that the iOS SDK checks for jailbreak detection to
LSApplicationQueriesSchemesin your app'sInfo.plist. Entries your app already has are kept. See the Installation guide. - Breaking change The
addPhonemodule has been renamed toPhone. See the Migration Guide. - Breaking change The
addEmailmodule has been renamed toEmail. See the Migration Guide. - Added the
FullNamemodule, which collects the user's first and last name. - Added
otpVerificationanddefaultRegionPrefixparameters to thePhonemodule. Neither was previously available in Cordova. - Breaking change The
Emailmodule'sotpVerificationEnabledparameter has been renamed tootpVerification, matching the name used on the other platforms. See the Migration Guide. otpVerificationaccepts a real boolean (true) in addition to the legacy string form ("true"). Omitting it leaves the native SDK setting in place.phoneData,emailData, andfullNameDatanow share one shape: the captured value,status(success/fail), andresultCode, with both outcome fields populated on both platforms.resultCodeis the finer detail; both platforms reportsuccessanderror, and Android additionally reportsuserCancelledandemulatorDetected. On iOS, a cancellation is reported at the session level, not through a module callback.phoneDatagainsstatus; all three gainresultCode.- Breaking change The captured value (
phone,email,name) is now omitted when the SDK has none, instead of arriving as"". Check whether the key is present. - Breaking change On Android, the
setTheme()colorpositive800has been renamed topositive750, matching its name on iOS. It is the same color. The old key is ignored. See the Migration Guide.
Changes to standalone faceMatch()
- Added optional
matchType,interviewId, andidCategoryparameters. - Added
secondIdConfidenceto the result. - Renamed the
existingUserresult field toisExistingUser. - Removed
statusfrom the result. Derive it fromisFaceMatched. - Changed the error callback to receive
{ code, message, cause }instead of a bare string. Codes arefaceMatchErroranduserCancelled, replacing"FaceMatchFailed"and"onUserCancelled". - Changed the result on iOS to be returned flat, matching Android. It was nested under
faceMatchData. - When the native SDK has no value for one of these fields, the plugin now leaves the field out of the result. Previously, it filled in a default of
0,false, or"".- Android and iOS:
nfcVsIdConfidence,nfcVsSelfieConfidence - iOS only:
isFaceMatched,isNameMatched, andexistingInterviewId
- Android and iOS:
- When there's no value for one of these fields—for example, because there was nothing to compare—the plugin now leaves the field out of the result. Previously, it filled in a default.
To check whether a field has no value, test forundefinedinstead of comparing to the old default. For the fields listed above, a0orfalseis now always a real result.
| Field | Platform | Old Default |
|---|---|---|
confidence |
Android | -1 |
nfcVsIdConfidence |
Android | -1 |
| iOS | 0 |
|
nfcVsSelfieConfidence |
Android | -1 |
| iOS | 0 |
|
isFaceMatched |
iOS | false |
isNameMatched |
iOS | false |
existingInterviewId |
iOS | "" |
- Fixed the error callback never firing on iOS: failures arrived at the success callback as
faceMatchData: { debug: "..." }.
Changes to startWorkflow()
- Changed the error callback to receive
{ code, message, cause }instead of a bare string. It previously read"Failed to start workflow: <message>"on Android and"No presenting view controller available."on iOS. See the Migration Guide. - Added the
configErrorerror code.startWorkflow()now reports it whensessionConfighas neither aconfigurationIdnor atoken, instead of failing withunknownon Android or after failed network requests on iOS. - Changed
sessionConfigto be optional, matching React Native. A missing value now falls back to SDK defaults instead of rejecting the call.
Working with Android SDK 5.54.0 and iOS SDK 5.50.0
4.9.0
16 September 2026
4.9.0
- Added an
appleWalletMerchantIDparameter toinitializeSDK(), for iOS only. - Added the
combinedConsentsNotReceivederror case on iOS. A mandatory combined consent that has no readable text or checkbox ID now stops the flow instead of being accepted silently. - Added the
storageUnavailableerror code, for Android only. The error callback ofstartOnboarding()andstartOnboardingSection()receives it when the device cannot provide a writable images directory, so the flow now fails at start instead of losing captures later on. - Changed
MLConsentData.statuson iOS to report the choice the user made:truewhen the consent was accepted andfalsewhen it was declined. It previously reportedtruewhenever the submission succeeded. See the Migration Guide. - On Android, the Video Selfie V2 camera steps hide the close (X) button, so
cordova.exec(resolve, reject, "Cplugin", "showCloseButton", ["true"])no longer applies to them. - On Android, Signature V2 reads the title and description from the new
onboard_sdk_signature_capture_titleandonboard_sdk_signature_capture_descriptionstring resources. V1 keeps usingonboard_sdk_signature_titleandonboard_sdk_signature_description.
Working with Android SDK 5.53.0 and iOS SDK 5.49.0
4.8.0
28 August 2026
4.8.0
- Added the
setQuantityStringsmethod, which is used to localize plural texts on Android. - Added optional
initializeSDK()parameters:sdkMode,externalAnalyticsEnabled, andexternalScreenshotsEnabled. - Added a
sendDiagnosticsDataparameter toinitializeSDK(), for iOS only. Set it tofalseto prevent the Incode SDK from sending diagnostic data. Defaults totrue. - Removed the
isExternalTokenEnabledparameter from theinitializeSDK()method. - Added the
setSdkMode,setLocalizationLanguage, andsetStringmethods. - Renamed the
setFaceAuthenticationHintparameter fromfaceAuthenticationHinttoidentityId. - Renamed the
setUXConfigparameter fromconfigtojsonConfig. - Fixed a bug on iOS where a denied or unavailable location permission during the
addGeolocationmodule ended thestartOnboardingSectioncall immediately, before the section itself had finished. - Updated the Android build requirements:
compileSdk36, Kotlin Gradle plugin2.2.21, Android Gradle Plugin8.9.1, Gradle8.14.5, kotlinx-coroutines1.9.0and JDK 17 are now the minimums. See the Migration Guide.
Working with Android SDK 5.51.0 and iOS SDK 5.47.0
4.7.0
30 July 2026
4.7.0
- Removed parameter
disableJailbreakDetectionfrominitializeSDK()method. - Added
integrityCompromisederror case on iOS. - Removed the deprecated
setCommonConfig()method. UseshowCloseButton()instead.
Working with Android SDK 5.50.0 and iOS SDK 5.46.0
4.6.1
3 July 2026
4.6.1
- Fixed the problem where
initializemethod was freezing UI on Android. It now runs on a background thread.
Working with Android SDK 5.49.0 and iOS SDK 5.44.0
4.6.0
23 June 2026
4.6.0
- Added
showCloseButtonmethod to show or hide the close button during onboarding. DeprecatedsetCommonConfigin favour ofshowCloseButton.setCommonConfignow internally callsshowCloseButtonand logs a deprecation warning; it will be removed in a future major release. - Added
setSdkModemethod to switch betweenstandard,captureOnly, andsubmitOnlymodes at runtime without reinitializing the SDK. - Added
setLocalizationLanguagemethod to change the UI language at runtime (e.g.en,es,pt,he). - Added
setStringmethod to override individual UI strings with custom copy, keyed by the current locale. - Added
isInitializedmethod that returns a boolean indicating whether the SDK has been fully initialized. - Added optional
voiceConsentLanguageparameter tosessionConfigto set the voice consent language in the VideoSelfie module. Supported values: 'en', 'es', 'pt', and 'he'. Default is English. - Increased minimum Java version to 11.
Working with Android SDK 5.49.0 and iOS SDK 5.44.0
4.5.0
2 June 2026
4.5.0
- Added
eyesClosedCheckEnabledparameter toaddSelfieScanmodule. - Fixed
eyesClosedCheckEnabled,headCoverCheckEnabled,lensesCheckEnabled, andmaskCheckEnabledon iOS not properly disabling checks when set to"false"(was passingfalseinstead ofnilto the native SDK). - Changed default values for
maskCheckEnabledinaddSelfieScanmodule fromfalsetotrue. - Changed default values for
faceMaskCheck,headCoverCheck,lensesCheck, andeyesClosedCheckinaddFaceAuthenticationmodule fromfalsetotrue. - Removed the hardcoded Android compileSdkVersion from the Cordova plugin so it inherits the SDK configuration from the host Cordova application.
Working with Android SDK 5.48.0 and iOS SDK 5.44.0
4.4.0
12 May 2026
4.4.0
- Added optional
sslPinningConfigto theinitializemethod. - Added
isSkippableflag to theaddGeolocationmodule. 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 toaddIdandaddSelfieScanresults indicating when capture or upload retries are no longer available. - Fixed bug preventing session recording on iOS unless
forcePermissionswas explicitly provided.
Working with Android SDK 5.47.0 and iOS SDK 5.43.0
4.3.0
30 April 2026
4.3.0
- Added new internal Android dependency
com.incode.sdk.hybrid-bridgethat 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.
Working with Android SDK 5.46.0 and iOS SDK 5.42.0
4.2.0
16 April 2026
4.2.0
- Added support for Android SDK initialization without api key with e2ee url.
- Added optional
showIdTypeChooserparameter to theaddIdmodule. - Added ability to pass
SessionConfigtostartFaceLogin()method. This allows enabling of end-to-end encryption (E2EE) in Face Login mode on Android. TheSessionConfigwill have no effect on iOS. - Added
startOnboardingmethod. - Added
CURPValidationmodule to thestartOnboardingSectionmethod. - Updated
startOnboardingSectionmethod to supportrecordSessionConfigandsectionTagparameters, both of which are mandatory. - Changed
setupOnboardingSession,startWorkflow, andstartFlowto accept a JSON session config object instead of a plain stringconfigurationId. - Removed
autocaptureUXModeparameter fromaddIdon iOS and Android. - Removed
enableIdSummaryScreenparameter fromaddIdon Android. - Removed optional parameters
disableHookCheck,disableEmulatorDetection,disableRootDetectionanddisableVirtualEnvironmentDetectionfrominitializeSDKmethod.
Working with Android SDK 5.45.1 and iOS SDK 5.41.0
4.1.0
5 March 2026
4.1.0
- Fixed issue preventing custom V2 theme from applying when configured via JSON.
- Introduced
startFlowmethod. - Added
addEmailmodule to thestartOnboardingSectionmethod.
Working with Android SDK 5.44.0 and iOS SDK 5.40.0
4.0.0
28 January 2026
4.0.0
- Introduced
setCommonConfigmethod to enable setting of a shared runtime configuration outside of SDK initialization. - Added
setShowCloseButtonparameter insetCommonConfigthat shows a close button when set totrue. Defaults tofalse. - Fixed issue in
addIdmodule on iOS preventingenableFrontShownAsBackCheckandenableBackShownAsFrontCheckfrom being configurable. - Fixed issue in
addVideoSelfiemodule on iOS and Android preventingenableFrontShownAsBackCheckandenableBackShownAsFrontCheckfrom being configurable. - Added support for End-to-End Encryption (E2EE).
- Aligned module results on Android and iOS.
Working with Android SDK 5.43.0 and iOS SDK 5.39.1
3.0.0
19 November 2025
3.0.0
- Introduced
startWorkflowmethod. - Removed hardcoded Artifactory credentials from Cordova SDK
build.gradleon Android. - Deprecated
enableIdSummaryScreenparameter fromaddIdon iOS. Screen will not appear when using v2 UI. IdSummaryScreen will be removed in future update. - Updated setTheme method to also configure theme on Android platform for V2 UX.
- Fixed error handling for IncodeException errors on Android.
Working with Android SDK 5.41.1 and iOS SDK 5.38.0