9.19.0
29 October 2026
CurpValidation Module
- Breaking change Renamed the
CURPmodule toCurpValidationin flow configuration, in the completion event, and in the exportedCurpValidationCompleteEventtype (wasCURPCompleteEvent). Listeners must be updated. See the migration guide. - Breaking change Changed
statusto follow RENAPO's answer on both platforms. When validation is enabled,statusissuccessonly if RENAPO accepts the CURP. A RENAPO rejection setsstatustofail. Before, Android reported a rejected CURP assuccess, and iOS reported it asfail. - Breaking change Changed Android to emit one
CurpValidationevent, for the final result. Before, Android also emitted an event for each failed attempt. iOS already emitted one event. - Breaking change Changed
curpto be omitted when the SDK has no CURP, instead of"". Check whether the key is present. - Added
valid,data, andresultCodeto theCurpValidationresult on both platforms:validindicates whether RENAPO accepted the CURP.datais the server response for the CURP check, as an object.resultCodehas the same values as on thePhone,Email, andFullNamemodules.
- Changed the result for
validationEnabled: false.validanddataare omitted, because no server check ran, and a captured CURP is reported assuccesson both platforms.
Flow Methods
The flow methods startOnboarding, startOnboardingSection, startFlow, startWorkflow, and startFlowFromDeepLink now end the same way on Android and iOS, and always settle their promise exactly once. Some of these changes are breaking; see the migration guide for the steps to update your app.
- Breaking change Changed
startOnboarding,startOnboardingSection,startFlow,startWorkflow, andstartFlowFromDeepLinkto reject withuserCancelledwhen the user cancels, instead of resolving with{ status: 'userCancelled' }. - Breaking change Changed some method rejection codes that were
unknownbefore.- On both platforms:
- A Video Selfie failure that is not a denied permission now rejects with
videoSelfieNotCompleted. - A missing biometric consent now rejects with
biometricConsentNotGivenorbiometricConsentNotReceived.
- A Video Selfie failure that is not a denied permission now rejects with
- On Android:
- A missing location rejects with
locationUnavailable. - A denied location permission rejects with
permissionsDenied. - Not enough free disk space rejects with
insufficientDiskSpace - An incompatible on-device processing setup rejects with
onDeviceProcessingNotCompatible.
- A missing location rejects with
- On iOS:
- A denied audio permission or a fake-permission check rejects with
permissionsDenied. - A flow without an onboarding session rejects with
noActiveSession.
- A denied audio permission or a fake-permission check rejects with
- On both platforms:
- Breaking change Changed the iOS rejection codes to
sessionCreationFailedwhen the onboarding session cannot be created (wasunknown), and tocaptchaNotVerifiedwhen the Captcha cannot be verified (wasIncd::ONBOARDING_ERROR). - Breaking change Changed the start-up rejection codes of
startFlow:activityNotPresentwhen there is no host Activity (Android) or view controller (iOS), previouslyIncdSDK:startFlowon iOS.configErrorwhensessionConfighas neither aconfigurationIdnor atoken, previouslyunknownfrom the flow on Android.unknownwhen the flow cannot start, previouslyIncd::startFlowExceptionon Android.
- Breaking change An unknown
moduleIdnow runs the whole flow on Android, the same as iOS. It previously rejected withIncd::invalidModuleId. - Added these error codes to
IncodeSdkFlowErrorCode:videoSelfieNotCompleted,interrupted,biometricConsentNotGiven,biometricConsentNotReceived,sessionCreationFailed(iOS only),captchaNotVerified(iOS only),sectionAlreadyRunning,noActiveSession,insufficientDiskSpace(Android only) andonDeviceProcessingNotCompatible(Android only). startFlownow runs through the shared Incode bridge, so it starts and fails the same way on Android and iOS. See the migration guide.- Changed
startWorkflowto reject withactivityNotPresentinstead ofunknownwhen there is no host Activity or view controller. - Fixed these methods never settling on Android when the system ends the flow: for example, it destroys the SDK screen while the app is in the background. They now reject with the new code
interrupted, the same as iOS, which rejected withunknownbefore. - Fixed these methods possibly settling their promise more than once. The first outcome wins.
- Fixed
startFlownever settling its promise on Android when there was no host Activity. It now rejects withactivityNotPresent.
startOnboardingSection
startOnboardingSection now works the same way on Android and iOS. Some of these changes are breaking; see the migration guide.
- Breaking change
sectionTagis now required and must not be blank. If it is missing or blank, the call rejects withconfigError. - Breaking change Renamed
recordSessionConfig.forcePermissionstoforcePermissionforstartOnboardingSection. The new exported type isOnboardingSectionRecordSessionConfig, and both of its fields are optional.startOnboardingstill usesOnboardingRecordSessionConfigwithforcePermissions. - Breaking change A second call while a section runs now rejects with
sectionAlreadyRunningon both platforms. The running section continues. - Breaking change A
flowConfigvalue that cannot be read, or arecordSessionConfigthat is not an object, now rejects withconfigError. startOnboardingSectionnow rejects withactivityNotPresentwhen there is no host Activity (Android) or view controller (iOS), and withnoActiveSessionwhen no onboarding session is set up.
Geolocation Module
The Geolocation module now follows the shared native contract. This is a breaking change; see the migration guide.
- Breaking change The
Geolocationstep result is now{ addressFields?, latitude?, longitude?, status, resultCode, error? }instead of five flat address keys. Address values are absent when unknown, instead of"". - Breaking change A skipped, denied, or unavailable location is now reported through
onStepCompletedwithstatus: 'fail'and anerrorcode, on both platforms. It was previously anonStepErrorevent, withmodule: 'GEOLOCATION'and a nested status on Android.onStepErrorno longer fires forGeolocation, and theGeolocationErrorEventtype is removed. - Breaking change Changed
stateon Android to hold the country name, as it already did on iOS. It previously held the region.citynow falls back to the region when the city is unknown, on both platforms. - Added the
latitudeandlongitudecoordinates to theGeolocationresult. - Fixed Android reporting every unavailable location as
permissionsDenied. Theerrorcode now reflects the actual cause. - Changed
onErroron Android to reportpermissionsDeniedorlocationUnavailablefor a non-skippableGeolocationfailure, instead ofunknown.
Appearance
- Added the
setLogomethod. It sets a custom logo for the SDK screens, including every UX V2 screen, such asFaceAuthentication. Pass the name of an image of your app: a drawable resource name on Android, and an image asset name on iOS. Alogoset on theSelfieScanorVideoSelfiemodule has priority in that module. If the name cannot be resolved,setLogorejects withappearanceError. On Android, add the drawable tores/raw/keep.xml, or the Android shrinker removes it from release builds. SeesetLogo.
Other Fixes
- Fixed
approveon Android crashing the app when the native call throws. It now rejects withbridgeFailure. - Fixed
approve's promise never settling on Android when the installed native SDK has no handler for the method. It now rejects withmethodNotSupportedByBridge. - Fixed
startOnboardingandstartOnboardingSectionon Android never settling the promise when aflowConfigvalue cannot be read, such as a value of the wrong type.startOnboardingnow rejects withIncd::StartOnboardingException.startOnboardingSectionnow rejects withconfigError. - Fixed
startOnboardingSectionon Android never settling the promise when no activity is present. It now rejects withactivityNotPresent, likestartOnboardingandapprove. - Breaking change (types):
IncodeSdkFlowErrorCodegains'unknownModule','methodNotSupportedByBridge','bridgeFailure', and'activityNotPresent', the codes that the SDK already rejects with. Exhaustiveswitchstatements over it need new cases. See the migration guide.
Working with Android SDK 5.55.0 and iOS SDK 5.51.0.
9.18.0
7 October 2026
9.18.0
approve, getUserScore, faceMatch, and startWorkflow now return the same payloads and error codes on Android and iOS, and the Phone, Email, and FullName modules now follow the shared native contract. Several of these changes are breaking; see the migration guide for the steps to update your app.
approve
approvenow resolves{ success, uuid, customerToken, error }instead of{ status, id, customerToken }. Thestatusstring is replaced by thesuccessboolean,idis renamed touuid, and the newerrorfield reports an iOS-only approval error (alwaysnullon Android).uuid,customerToken, anderrorarenullwhen the SDK has no value for them, instead of an empty string.approvenow rejects on every failure with the native error code and message. It previously resolved{ status: 'userCancelled' }on Android when the user cancelled, and never settled at all on iOS on a non-success path.- The
Approvemodule step event now carries the same{ success, uuid, customerToken, error }payload asapproveon both platforms. - Standalone
approvenow emits anONBOARDING_STEP_COMPLETEDevent for theApprovemodule on iOS, matching Android. - The
forceApprovalargument ofapproveis now optional and defaults tofalse.
getUserScore and the UserScore module
- Added optional
interviewIdparameter to thegetUserScoremethod. - Added
userScoreFailedanduserCancellederror codes, reported by thegetUserScoremethod. - Renamed the
getUserScoremethod'smodeparameter tofetchMode. The old name is no longer read, so a call still passingmodesilently falls back to theaccuratedefault. - Changed the result shape of the
getUserScore. It now contains the same payload on both Android and iOS. And it has the full score surface asUserScoreResult—overall,idValidation(with thephotoSecurityAndQualityandidSpecificcheck lists),liveness(withlivenessScoreandphotoQuality),faceRecognition(withexistingUser),governmentValidation(withrecognitionConfidence,validationStatusandocrValidation), plusextendedUserScoreJsonData. - Changed the
UserScoremodule's step-complete event, it now delivers that sameUserScoreResultshape, replacing{ extendedUserScoreJsonData, data: { overallScore, status, facialRecognitionScore, existingUser, idVerificationScore, livenessOverallScore } }. TheUserScoretype is removed. - Changed user score values to no longer include the
/100suffix on Android, in bothgetUserScoreresults and theonUserScoreFetchedcallback. - Changed
getUserScoreon Android to reportuserScoreFailedwhen a session produced no score, instead of completing with an empty result. - Changed the SDK to report
warnwhere it previously reportedwarningstatus on iOS, and absent values arenullinstead of"". - Changed the SDK on iOS to reject the promise when the score cannot be fetched, instead of resolving with an empty result.
- Changed the SDK to no longer emit a
{ debug: … }payload on iOS when the score is empty, the result is always well-formed.
faceMatch
- Added optional
interviewId,matchType, andidCategoryparameters tofaceMatch. - Added
idCategory,isFaceMatched,isNameMatched,nfcVsIdConfidence,nfcVsSelfieConfidence, andsecondIdConfidencetofaceMatch's result on Android. These already existed on iOS. - Renamed
faceMatch's result fieldexistingUsertoisExistingUseron Android. iOS already usedisExistingUser. - Changed
faceMatch's rejection code tofaceMatchErrorwith the native error message, fromIncdSDK:faceMatch/"Error"on iOS andEUNSPECIFIEDon Android. - Changed
faceMatch's user-cancellation code touserCancelled, fromIncd::FaceMatch::UserCancelled. Other methods keep their ownIncd::…::UserCancelledcodes. - Changed
faceMatch's result fields on iOS to be omitted when the native SDK has no value, instead of defaulted tofalse/0. - Changed
faceMatch'sconfidence,nfcVsIdConfidenceandnfcVsSelfieConfidenceon Android to be omitted when there was nothing to compare, instead of returned as-1. Check whether the key is present instead of comparing to-1. - Changed
faceMatchto resolve, with those fields omitted, instead of rejecting when no confidence score can be produced. - Removed
statusfromfaceMatch's result. Derive it fromisFaceMatched. - Fixed
faceMatch's promise never settling when the installed native SDK has no handler for the method. It now rejects withmethodNotSupportedByBridge. - Split the
faceMatchTypeScript types:FaceMatchResultis the standalone result;FaceMatchCompleteEventkeeps its own shape for the module event.
startWorkflow
- Added the
configErrorflow error code.startWorkflownow rejects with it whensessionConfighas neither aconfigurationIdnor atoken. Previously this failed withunknownon Android, and on iOS only after failed network requests.IncodeSdkFlowErrorCodegains'configError', so exhaustiveswitchstatements over it need a new case. - Changed
startWorkflow's rejection code for a missing presenting screen tounknownon both platforms, fromIncd::StartWorkflowExceptionon Android andIncdSDK:startWorkflowon iOS.
startOnboarding and startOnboardingSection
- Breaking change A
flowConfigentry with a module name that the SDK does not recognize now rejects the promise withunknownModule. Before, iOS omitted the step and the flow still resolved withsuccess, and Android threw an uncaught exception instead of rejecting. A flow that still uses the oldNamemodule now rejects; rename it toFullName.
Phone, Email, and FullName modules
- Breaking change
Namemodule renamed toFullName— in flow configuration, in the completion event, and in the exportedFullNameCompleteEventtype (wasNameCompleteEvent). Listeners must be updated. - Omitting
otpVerificationon thePhoneandEmailmodules now leaves the native SDK setting in place instead of forcingfalse. - Added
defaultRegionPrefixto thePhonemodule — a dialing-code override in the range1–9999. Out-of-range values are ignored. Phone,Email, andFullNameresults now share one shape:status(success/fail) plusresultCode, both populated on both platforms.resultCodeis the finer detail — both platforms reportsuccessanderror, and Android additionally reportsuserCancelledandemulatorDetected, since on iOS a cancellation is reported at the session level rather than through a module callback.Phonegainsstatus;EmailandFullNamegainresultCode.- Breaking change On Android, a failed
FullNamereported the native SDK's error message asstatus, so the value was an arbitrary sentence. It is nowfail, like every other module. - Breaking change On iOS, a failed
Phonearrived as a step error while Android delivered a completed event. It is now a completed event carryingstatus: "fail"on both platforms, matchingEmailandFullName. - Breaking change The captured value (
phone,email,name) is now omitted when the SDK has none, instead of arriving asnullor"". Check whether the key is present. - If the native SDK cannot add a
Phone,Email, orFullNamestep from its configuration, the SDK now logs a warning (Module <name> was not added: <reason>) and omits that step. The flow still starts and resolves without the step, so a faulty configuration does not reject the promise. Check the device log if one of these steps does not show. - Breaking change (types):
resultCodeonPhonewas declared as'success' | 'error' | 'userCancelled' | 'emulatorDetected'but the runtime delivered the SDK's upper-snake names (SUCCESS,USER_CANCELLED). The runtime now matches the declared type.FullNameCompleteEventalso gains thenamefield, which it emitted but never declared.
iOS Installation
- The plugin now depends on
IncodeBridgeCommon.
Working with Android SDK 5.54.0 and iOS SDK 5.50.0.
9.17.0
15 September 2026
9.17.0
- Added optional
logoparameter to theSelfieScanmodule. - Added optional
logoparameter to theVideoSelfiemodule. - Added
storageUnavailabletoIncodeSdkFlowErrorCode. Android only. It is reported when the device cannot provide a writable images directory at flow start. - Breaking change On Android, every event name delivered through
onEventsnow uses the SDK's camelCase value form (for example,userCanceled,moduleOpened) instead of the SDK enum constant name (for example,USER_CANCELLED,MODULE_OPENED). The{ status: 'userCancelled' }value resolved by the flow promises is unchanged. - On Android, the Video Selfie V2 camera steps hide the close (X) button, so
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. - Added an optional
documentSourcesparameter to theDocumentScanmodule (camera,photoUpload,fileUpload). It supersedes the now-deprecatedshowDocumentProviderScreenflag, which is still honored whendocumentSourcesis omitted. - Added
combinedConsentsNotReceivedtoIncodeSdkFlowErrorCode. The flow rejects with this code when a mandatory Combined Consent cannot be shown because it has no readable text or checkbox ID. iOS only. - Fixed
onStepCompletednot firing for theVideoSelfiemodule on Android. The event was previously only emitted on iOS. It now emits{ module: 'VideoSelfie', result: { status: boolean } }on both platforms.
Working with Android SDK 5.53.0 and iOS SDK 5.49.0.
9.16.0
28 August 2026
9.16.0
- Added optional
sslPinningConfig.forceSSLPinningtoinitialize(defaults tofalsewhen omitted). - Added
sendDiagnosticsData(iOS only) parameter toinitialize. Set tofalseto prevent the Incode SDK from sending diagnostics data. Defaults totrue. - Removed
waitForTutorialsparameter frominitializemethod. - Fixed Android build failure on React Native 0.80+ caused by a Kotlin nullability mismatch in
BaseActivityEventListeneroverrides. - Fixed Android build failure on React Native 0.81+ (
Unresolved reference 'currentActivity'). setThemenow takes{ theme }instead of{ jsonTheme }.setFaceAuthenticationHintnow takes{ identityId }instead of a string or{ faceAuthenticationHint }. The TypeScript parameter forshowCloseButtonis nowallowUserToCancel(wasshouldShowCloseButton); call sites stayshowCloseButton(true).setThemeandsetUXConfignow reject withappearanceErroron failure instead of resolving{ success: false }.- On iOS
showCloseButton,setLocalizationLanguage, andsetStringnow settle their promises. They previously returned immediately without waiting for the native call. - Appearance methods
setSdkMode,setTheme,setUXConfig, andsetLocalizationLanguagenow type asPromise<void>.setLocalizationLanguagewas previously typed asPromise<string>. - Added new required parameters
localeandquantityStringsto thesetQuantityStringsmethod. - Removed
stringsparameter from thesetQuantityStringsmethod. - Modified the
setQuantityStringsmethod to, when erroring out, return a code specific to the cause of the error alongside a message and native stack trace, instead of returning aSET_QUANTITY_STRINGS_ERRORcode.
Working with Android SDK 5.51.0 and iOS SDK 5.47.0.
9.15.0
28 July 2026
9.15.0
- Added
integrityCompromisedand removedjailbreakDetectedfromIncodeSdkFlowErrorCode. - Removed
disableJailbreakDetectionparameter frominitializemethod.
Working with Android SDK 5.50.0 and iOS SDK 5.46.0.
9.14.0
26 June 2026
9.14.0
- Added
setSdkModemethod to change the SDK mode (standard,captureOnly, orsubmitOnly) after initialization. - Added optional
voiceConsentLanguageparameter toOnboardingSessionConfigto set the voice consent language in theVideoSelfiemodule. Supported values: 'en', 'es', 'pt', and 'he'. Default is English. - Updated
IncodeSdkFlowError. RemovedbadEnvDetectedfromIncodeSdkFlowErrorCode. - Deprecated
showTutorialparameter inDocumentScanmodule for Android. - Fixed
setStringon Android always applying string overrides for theenlocale regardless of the language set viasetLocalizationLanguage.
Working with Android SDK 5.49.0 and iOS SDK 5.44.0.
9.13.0
26 May 2026
9.13.0
- Added
isInitializedmethod to provide a hint on whether the native SDK has been initialized or not. - Updated
onStepUpdatedto fire per-attempt events forIdScanFront,IdScanBack, andSelfieScanmodules, in addition to the existingConferenceupdates. - Updated
onStepUpdatedsignature to take a{ module, listener }object (matchingonStepCompleted/onStepError), replacing the previous bare-listener form. - Updated the default values of the
lensesCheckandfaceMaskCheckparameters totruein theSelfieScanmodule.
Working with Android SDK 5.48.0 and iOS SDK 5.44.0.
9.12.0
13 May 2026
9.12.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.
Working with Android SDK 5.47.0 and iOS SDK 5.43.0.
9.11.0
28 April 2026
9.11.0
- Breaking change On iOS, setting
idTypeno longer hides the document chooser in theIdScanandIdScanFrontmodules: passshowIdTypeChooser: falseto hide it. See the migration guide. - 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.
9.10.0
26 March 2026
9.10.0
- Added support for Android SDK initialization without api key with e2ee url.
- Breaking change Added the
showIdTypeChooserparameter to theIdScanandIdScanFrontmodules. On Android, settingidTypeno longer hides the document chooser: passshowIdTypeChooser: falseto hide it. See the migration guide. - Added new parameter
e2eeEncryptionEnabledforstartFaceLoginmethod that enables End-to-End Encryption (E2EE) on Android. - Deprecated
autocaptureUxModeparameter from theIdScanmodule. - Deprecated
enableIdSummaryScreenparameter from theProcessIdmodule. - Removed parameters
disableHookCheck,disableEmulatorDetection,disableRootDetection,disableVirtualEnvironmentDetectionfrominitializemethod. - Removed
simulatorDetected,rootDetected,hookDetected,virtualEnvDetectedfromIncodeSdkFlowError.
Working with Android SDK 5.45.0 and iOS SDK 5.40.0.
9.9.0
27 February 2026
9.9.0
- 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. - 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.
9.8.0
09 January 2026
9.8.0
- Fixed 'TypeError' appearing for API methods
finishOnboardingFlow,approve,deleteLocalUserDataand 'faceMatch' for React Native versions 0.8+. - Added
CombinedConsentmodule.
Working with Android SDK 5.43.0 and iOS SDK 5.39.1.
9.7.0
24 November 2025
9.7.0
- Fixed error handling on Android.
Working with Android SDK 5.41.1 and iOS SDK 5.38.0.
9.6.1
23 October 2025
9.6.1
- Fixed compatibility issue for new React Native architectures.
Working with Android SDK 5.40.1 and iOS SDK 5.37.0.