Release notes, Releases Rn SDK

React Native SDK Release Notes

9.19.0

29 October 2026

CurpValidation Module

  • Breaking change Renamed the CURP module to CurpValidation in flow configuration, in the completion event, and in the exported CurpValidationCompleteEvent type (was CURPCompleteEvent). Listeners must be updated. See the migration guide.
  • Breaking change Changed status to follow RENAPO's answer on both platforms. When validation is enabled, status is success only if RENAPO accepts the CURP. A RENAPO rejection sets status to fail. Before, Android reported a rejected CURP as success, and iOS reported it as fail.
  • Breaking change Changed Android to emit one CurpValidation event, for the final result. Before, Android also emitted an event for each failed attempt. iOS already emitted one event.
  • Breaking change Changed curp to be omitted when the SDK has no CURP, instead of "". Check whether the key is present.
  • Added valid, data, and resultCode to the CurpValidation result on both platforms:
    • valid indicates whether RENAPO accepted the CURP.
    • data is the server response for the CURP check, as an object.
    • resultCode has the same values as on the Phone, Email, and FullName modules.
  • Changed the result for validationEnabled: false. valid and data are omitted, because no server check ran, and a captured CURP is reported as success on 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, and startFlowFromDeepLink to reject with userCancelled when the user cancels, instead of resolving with { status: 'userCancelled' }.
  • Breaking change Changed some method rejection codes that were unknown before.
    • On both platforms:
      • A Video Selfie failure that is not a denied permission now rejects with videoSelfieNotCompleted.
      • A missing biometric consent now rejects with biometricConsentNotGiven or biometricConsentNotReceived.
    • 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.
    • On iOS:
      • A denied audio permission or a fake-permission check rejects with permissionsDenied.
      • A flow without an onboarding session rejects with noActiveSession.
  • Breaking change Changed the iOS rejection codes to sessionCreationFailed when the onboarding session cannot be created (was unknown), and to captchaNotVerified when the Captcha cannot be verified (was Incd::ONBOARDING_ERROR).
  • Breaking change Changed the start-up rejection codes of startFlow:
    • activityNotPresent when there is no host Activity (Android) or view controller (iOS), previously IncdSDK:startFlow on iOS.
    • configError when sessionConfig has neither a configurationId nor a token, previously unknown from the flow on Android.
    • unknown when the flow cannot start, previously Incd::startFlowException on Android.
  • Breaking change An unknown moduleId now runs the whole flow on Android, the same as iOS. It previously rejected with Incd::invalidModuleId.
  • Added these error codes to IncodeSdkFlowErrorCode: videoSelfieNotCompleted, interrupted, biometricConsentNotGiven, biometricConsentNotReceived, sessionCreationFailed (iOS only), captchaNotVerified (iOS only), sectionAlreadyRunning, noActiveSession, insufficientDiskSpace (Android only) and onDeviceProcessingNotCompatible (Android only).
  • startFlow now runs through the shared Incode bridge, so it starts and fails the same way on Android and iOS. See the migration guide.
  • Changed startWorkflow to reject with activityNotPresent instead of unknown when 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 with unknown before.
  • Fixed these methods possibly settling their promise more than once. The first outcome wins.
  • Fixed startFlow never settling its promise on Android when there was no host Activity. It now rejects with activityNotPresent.

startOnboardingSection

startOnboardingSection now works the same way on Android and iOS. Some of these changes are breaking; see the migration guide.

  • Breaking change sectionTag is now required and must not be blank. If it is missing or blank, the call rejects with configError.
  • Breaking change Renamed recordSessionConfig.forcePermissions to forcePermission for startOnboardingSection. The new exported type is OnboardingSectionRecordSessionConfig, and both of its fields are optional. startOnboarding still uses OnboardingRecordSessionConfig with forcePermissions.
  • Breaking change A second call while a section runs now rejects with sectionAlreadyRunning on both platforms. The running section continues.
  • Breaking change A flowConfig value that cannot be read, or a recordSessionConfig that is not an object, now rejects with configError.
  • startOnboardingSection now rejects with activityNotPresent when there is no host Activity (Android) or view controller (iOS), and with noActiveSession when 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 Geolocation step 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 onStepCompleted with status: 'fail' and an error code, on both platforms. It was previously an onStepError event, with module: 'GEOLOCATION' and a nested status on Android. onStepError no longer fires for Geolocation, and the GeolocationErrorEvent type is removed.
  • Breaking change Changed state on Android to hold the country name, as it already did on iOS. It previously held the region. city now falls back to the region when the city is unknown, on both platforms.
  • Added the latitude and longitude coordinates to the Geolocation result.
  • Fixed Android reporting every unavailable location as permissionsDenied. The error code now reflects the actual cause.
  • Changed onError on Android to report permissionsDenied or locationUnavailable for a non-skippable Geolocation failure, instead of unknown.

Appearance

  • Added the setLogo method. It sets a custom logo for the SDK screens, including every UX V2 screen, such as FaceAuthentication. Pass the name of an image of your app: a drawable resource name on Android, and an image asset name on iOS. A logo set on the SelfieScan or VideoSelfie module has priority in that module. If the name cannot be resolved, setLogo rejects with appearanceError. On Android, add the drawable to res/raw/keep.xml, or the Android shrinker removes it from release builds. See setLogo.

Other Fixes

  • Fixed approve on Android crashing the app when the native call throws. It now rejects with bridgeFailure.
  • Fixed approve's promise never settling on Android when the installed native SDK has no handler for the method. It now rejects with methodNotSupportedByBridge.
  • Fixed startOnboarding and startOnboardingSection on Android never settling the promise when a flowConfig value cannot be read, such as a value of the wrong type. startOnboarding now rejects with Incd::StartOnboardingException. startOnboardingSection now rejects with configError.
  • Fixed startOnboardingSection on Android never settling the promise when no activity is present. It now rejects with activityNotPresent, like startOnboarding and approve.
  • Breaking change (types): IncodeSdkFlowErrorCode gains 'unknownModule', 'methodNotSupportedByBridge', 'bridgeFailure', and 'activityNotPresent', the codes that the SDK already rejects with. Exhaustive switch statements 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

  • approve now resolves { success, uuid, customerToken, error } instead of { status, id, customerToken }. The status string is replaced by the success boolean, id is renamed to uuid, and the new error field reports an iOS-only approval error (always null on Android). uuid, customerToken, and error are null when the SDK has no value for them, instead of an empty string.
  • approve now 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 Approve module step event now carries the same { success, uuid, customerToken, error } payload as approve on both platforms.
  • Standalone approve now emits an ONBOARDING_STEP_COMPLETED event for the Approve module on iOS, matching Android.
  • The forceApproval argument of approve is now optional and defaults to false.

getUserScore and the UserScore module

  • Added optional interviewId parameter to the getUserScore method.
  • Added userScoreFailed and userCancelled error codes, reported by the getUserScore method.
  • Renamed the getUserScore method's mode parameter to fetchMode. The old name is no longer read, so a call still passing mode silently falls back to the accurate default.
  • 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 as UserScoreResult — overall, idValidation (with the photoSecurityAndQuality and idSpecific check lists), liveness (with livenessScore and photoQuality), faceRecognition (with existingUser), governmentValidation (with recognitionConfidence, validationStatus and ocrValidation), plus extendedUserScoreJsonData.
  • Changed the UserScore module's step-complete event, it now delivers that same UserScoreResult shape, replacing { extendedUserScoreJsonData, data: { overallScore, status, facialRecognitionScore, existingUser, idVerificationScore, livenessOverallScore } }. The UserScore type is removed.
  • Changed user score values to no longer include the /100 suffix on Android, in both getUserScore results and the onUserScoreFetched callback.
  • Changed getUserScore on Android to report userScoreFailed when a session produced no score, instead of completing with an empty result.
  • Changed the SDK to report warn where it previously reported warning status on iOS, and absent values are null instead 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, and idCategory parameters to faceMatch.
  • Added idCategory, isFaceMatched, isNameMatched, nfcVsIdConfidence, nfcVsSelfieConfidence, and secondIdConfidence to faceMatch's result on Android. These already existed on iOS.
  • Renamed faceMatch's result field existingUser to isExistingUser on Android. iOS already used isExistingUser.
  • Changed faceMatch's rejection code to faceMatchError with the native error message, from IncdSDK:faceMatch / "Error" on iOS and EUNSPECIFIED on Android.
  • Changed faceMatch's user-cancellation code to userCancelled, from Incd::FaceMatch::UserCancelled. Other methods keep their own Incd::…::UserCancelled codes.
  • Changed faceMatch's result fields on iOS to be omitted when the native SDK has no value, instead of defaulted to false/0.
  • Changed faceMatch's confidence, nfcVsIdConfidence and nfcVsSelfieConfidence on 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 faceMatch to resolve, with those fields omitted, instead of rejecting when no confidence score can be produced.
  • Removed status from faceMatch's result. Derive it from isFaceMatched.
  • Fixed faceMatch's promise never settling when the installed native SDK has no handler for the method. It now rejects with methodNotSupportedByBridge.
  • Split the faceMatch TypeScript types: FaceMatchResult is the standalone result; FaceMatchCompleteEvent keeps its own shape for the module event.

startWorkflow

  • Added the configError flow error code. startWorkflow now rejects with it when sessionConfig has neither a configurationId nor a token. Previously this failed with unknown on Android, and on iOS only after failed network requests. IncodeSdkFlowErrorCode gains 'configError', so exhaustive switch statements over it need a new case.
  • Changed startWorkflow's rejection code for a missing presenting screen to unknown on both platforms, from Incd::StartWorkflowException on Android and IncdSDK:startWorkflow on iOS.

startOnboarding and startOnboardingSection

  • Breaking change A flowConfig entry with a module name that the SDK does not recognize now rejects the promise with unknownModule. Before, iOS omitted the step and the flow still resolved with success, and Android threw an uncaught exception instead of rejecting. A flow that still uses the old Name module now rejects; rename it to FullName.

Phone, Email, and FullName modules

  • Breaking change Name module renamed to FullName — in flow configuration, in the completion event, and in the exported FullNameCompleteEvent type (was NameCompleteEvent). Listeners must be updated.
  • Omitting otpVerification on the Phone and Email modules now leaves the native SDK setting in place instead of forcing false.
  • Added defaultRegionPrefix to the Phone module — a dialing-code override in the range 1–9999. Out-of-range values are ignored.
  • Phone, Email, and FullName results now share one shape: status (success / fail) plus resultCode, both populated on both platforms. resultCode is the finer detail — both platforms report success and error, and Android additionally reports userCancelled and emulatorDetected, since on iOS a cancellation is reported at the session level rather than through a module callback. Phone gains status; Email and FullName gain resultCode.
  • Breaking change On Android, a failed FullName reported the native SDK's error message as status, so the value was an arbitrary sentence. It is now fail, like every other module.
  • Breaking change On iOS, a failed Phone arrived as a step error while Android delivered a completed event. It is now a completed event carrying status: "fail" on both platforms, matching Email and FullName.
  • Breaking change The captured value (phone, email, name) is now omitted when the SDK has none, instead of arriving as null or "". Check whether the key is present.
  • If the native SDK cannot add a Phone, Email, or FullName step 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): resultCode on Phone was 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. FullNameCompleteEvent also gains the name field, 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 logo parameter to the SelfieScan module.
  • Added optional logo parameter to the VideoSelfie module.
  • Added storageUnavailable to IncodeSdkFlowErrorCode. 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 onEvents now 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_title and onboard_sdk_signature_capture_description string resources. V1 keeps using onboard_sdk_signature_title and onboard_sdk_signature_description.
  • Added an optional documentSources parameter to the DocumentScan module (camera, photoUpload, fileUpload). It supersedes the now-deprecated showDocumentProviderScreen flag, which is still honored when documentSources is omitted.
  • Added combinedConsentsNotReceived to IncodeSdkFlowErrorCode. 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 onStepCompleted not firing for the VideoSelfie module 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.forceSSLPinning to initialize (defaults to false when omitted).
  • Added sendDiagnosticsData (iOS only) parameter to initialize. Set to false to prevent the Incode SDK from sending diagnostics data. Defaults to true.
  • Removed waitForTutorials parameter from initialize method.
  • Fixed Android build failure on React Native 0.80+ caused by a Kotlin nullability mismatch in BaseActivityEventListener overrides.
  • Fixed Android build failure on React Native 0.81+ (Unresolved reference 'currentActivity').
  • setTheme now takes { theme } instead of { jsonTheme }. setFaceAuthenticationHint now takes { identityId } instead of a string or { faceAuthenticationHint }. The TypeScript parameter for showCloseButton is now allowUserToCancel (was shouldShowCloseButton); call sites stay showCloseButton(true).
  • setTheme and setUXConfig now reject with appearanceError on failure instead of resolving { success: false }.
  • On iOS showCloseButton, setLocalizationLanguage, and setString now settle their promises. They previously returned immediately without waiting for the native call.
  • Appearance methods setSdkMode, setTheme, setUXConfig, and setLocalizationLanguage now type as Promise<void>. setLocalizationLanguage was previously typed as Promise<string>.
  • Added new required parameters locale and quantityStrings to the setQuantityStrings method.
  • Removed strings parameter from the setQuantityStrings method.
  • Modified the setQuantityStrings method to, when erroring out, return a code specific to the cause of the error alongside a message and native stack trace, instead of returning a SET_QUANTITY_STRINGS_ERROR code.

Working with Android SDK 5.51.0 and iOS SDK 5.47.0.

9.15.0

28 July 2026

9.15.0
  • Added integrityCompromised and removed jailbreakDetected from IncodeSdkFlowErrorCode.
  • Removed disableJailbreakDetection parameter from initialize method.

Working with Android SDK 5.50.0 and iOS SDK 5.46.0.

9.14.0

26 June 2026

9.14.0
  • Added setSdkMode method to change the SDK mode (standard, captureOnly, or submitOnly) after initialization.
  • Added optional voiceConsentLanguage parameter to OnboardingSessionConfig to set the voice consent language in the VideoSelfie module. Supported values: 'en', 'es', 'pt', and 'he'. Default is English.
  • Updated IncodeSdkFlowError. Removed badEnvDetected from IncodeSdkFlowErrorCode.
  • Deprecated showTutorial parameter in DocumentScan module for Android.
  • Fixed setString on Android always applying string overrides for the en locale regardless of the language set via setLocalizationLanguage.

Working with Android SDK 5.49.0 and iOS SDK 5.44.0.

9.13.0

26 May 2026

9.13.0
  • Added isInitialized method to provide a hint on whether the native SDK has been initialized or not.
  • Updated onStepUpdated to fire per-attempt events for IdScanFront, IdScanBack, and SelfieScan modules, in addition to the existing Conference updates.
  • Updated onStepUpdated signature to take a { module, listener } object (matching onStepCompleted/onStepError), replacing the previous bare-listener form.
  • Updated the default values of the lensesCheck and faceMaskCheck parameters to true in the SelfieScan module.

Working with Android SDK 5.48.0 and iOS SDK 5.44.0.

9.12.0

13 May 2026

9.12.0
  • Added isSkippable flag to the Geolocation module. It allows the geolocation step to be skipped. When set to true, skipping or denying location permission advances the flow instead of ending the session with a permission error.
  • Added allAttemptsExhausted flag to IdScanResult and SelfieScanResult indicating 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 idType no longer hides the document chooser in the IdScan and IdScanFront modules: pass showIdTypeChooser: false to hide it. See the migration guide.
  • 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.

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 showIdTypeChooser parameter to the IdScan and IdScanFront modules. On Android, setting idType no longer hides the document chooser: pass showIdTypeChooser: false to hide it. See the migration guide.
  • Added new parameter e2eeEncryptionEnabled for startFaceLogin method that enables End-to-End Encryption (E2EE) on Android.
  • Deprecated autocaptureUxMode parameter from the IdScan module.
  • Deprecated enableIdSummaryScreen parameter from the ProcessId module.
  • Removed parameters disableHookCheck, disableEmulatorDetection, disableRootDetection, disableVirtualEnvironmentDetection from initialize method.
  • Removed simulatorDetected, rootDetected, hookDetected, virtualEnvDetected from IncodeSdkFlowError.

Working with Android SDK 5.45.0 and iOS SDK 5.40.0.

9.9.0

27 February 2026

9.9.0
  • Removed the enableRotationOnRetakeScreen parameter from the IdScan module. Captured documents are now always displayed in a vertical orientation on the Review Screen.
  • Renamed the showRetakeScreen parameter to showRetakeScreenForManualCapture in the IdScan module.
  • Renamed the showAutoCaptureRetakeScreen parameter to showRetakeScreenForAutoCapture in the IdScan module.
  • 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, deleteLocalUserData and 'faceMatch' for React Native versions 0.8+.
  • Added CombinedConsent module.

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.

Was this page helpful?