---
title: "Results"
url: "https://developer.incode.com/sdk-reference/android-results-reference/"
section: "sdk-reference"
group: "Android SDK"
version: "v1.1"
status: "live"
---
Every module in an onboarding flow reports its outcome to your `IncodeWelcome.OnboardingListener`. Most modules deliver a **result object** through a dedicated callback. A few modules only signal completion, using a no-argument callback or a Boolean callback.

This page lists every result and error object. The groups match the categories on [Modules](/sdk-reference/android-individual-modules). For the full field list of a result type, go to its module page or [API Reference](/sdk-reference/android-api-reference).

Call `IncodeWelcome.deleteUserLocalData(context)` from `onSuccess()`, `onError(Throwable)`, and `onUserCancelled()` after you finish a session to [clean up local user data](/sdk-reference/android-capture-only-sdk#clean-up-local-user-data).

## Result Delivery

Results arrive on the module's success callback, such as `onIdProcessed(IdProcessResult)`. `IncodeWelcome.OnboardingListener` declares this callback. Some callbacks also appear on narrower listener interfaces, such as `IdProcessListener` and `PhoneNumberListener`.

`ResultCode` is the shared status most result objects carry, typically inherited from `BaseResult`. It reports the module's outcome, such as `SUCCESS`, `ERROR`, `USER_CANCELLED` or `EMULATOR_DETECTED`. See `ResultCode` in [API Reference](/sdk-reference/android-api-reference).

Some modules do not return a result object. They signal completion with a no-argument callback, such as `onUserConsentCompleted()`, or a Boolean callback, such as `onTaxIdValidationCompleted(boolean)`. When a related result type exists internally, the tables below name it so you can find its fields in [API Reference](/sdk-reference/android-api-reference), even though the type is never passed to your listener.

## Error Delivery

Errors surface on the shared `OnboardingListener.onError(Throwable)` path. The throwable is a generic `Throwable` unless a module defines its own exception subtype. Each table's Module-Specific Errors section notes any exception types.

When a result object has an `error` field, that field carries the same failure cause for that step.

## Collect Identity Data

| Module                                    | Result Object              | Delivered Via                                                                                         |
| ----------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------- |
| [Document Scan](/sdk-reference/android-document-scan) | `DocumentValidationResult` | `onDocumentValidationCompleted(DocumentType, DocumentValidationResult)`                               |
| [Dynamic Forms](/sdk-reference/android-dynamic-forms) | `DynamicFormsResult`       | `onDynamicFormsCompleted(DynamicFormsResult)`                                                         |
| [Email](/sdk-reference/android-email)                 | `EmailAddressResult`       | `onAddEmailCompleted(EmailAddressResult)`                                                             |
| [Geolocation](/sdk-reference/android-geolocation)     | `GeolocationResult`        | `onGeolocationFetched(GeolocationResult)`; `onGeolocationUnavailable(Throwable)` when there is no fix |
| [ID Info](/sdk-reference/android-id-info)             | `IdInfoResult`             | `onIdInfoCompleted(IdInfoResult)`                                                                     |
| [ID Scan](/sdk-reference/android-id-scan)             | `IdScanResult`             | `onIdFrontCompleted(IdScanResult)` and `onIdBackCompleted(IdScanResult)`                              |
| [Name](/sdk-reference/android-name)                   | `NameResult`               | `onAddNameCompleted(NameResult)`                                                                      |
| [NFC Scan](/sdk-reference/android-nfc-scan-2)           | `NfcScanResult`            | `onNfcScanCompleted(NfcScanResult)`                                                                   |
| [Phone](/sdk-reference/android-phone)                 | `PhoneNumberResult`        | `onAddPhoneCompleted(PhoneNumberResult)`                                                              |
| [QR Scan](/sdk-reference/android-qr-scan)             | `QRScanResult`             | `onQRScanCompleted(QRScanResult)`                                                                     |
| [Selfie Scan](/sdk-reference/android-selfie-scan)          | `SelfieScanResult`         | `onSelfieScanCompleted(SelfieScanResult)`                                                             |
| [Video Selfie](/sdk-reference/android-video-selfie)   | `VideoSelfieResult`        | `onVideoRecorded(VideoSelfieResult)`                                                                  |

### Module-Specific Errors

Unless noted below, a module's errors surface on the shared `onError` path.

- **Geolocation**: On `onGeolocationUnavailable`, `GeolocationUnavailableException` fires if there is no fix. `LocationPermissionDeniedException` fires if the user denies permission.
- **NFC Scan**: `MissingNfcDependencyException`, thrown when the `nfc` library dependency is absent.
- **QR Scan**: `QRCodeUploadException`, thrown when Incode cannot upload the decoded code.
- **Video Selfie**: `VideoSelfieException` subtypes: `SelfieNotMatchedException`, `AudioNotMatchedException`, `FacesNotMatchedException`, `MaxVideoLengthReachedException`, and `VideoUploadException`.

## Verify and Authenticate

| Module                                                    | Result Object                                           | Delivered Via                                             |
| --------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------- |
| [Antifraud](/sdk-reference/android-antifraud)                         | `AntifraudResult`                                       | `onAntifraudCompleted(AntifraudResult)`                   |
| [CURP Validation](/sdk-reference/android-curp-validation)             | `CurpValidationResult`                                  | `onCurpValidationCompleted(CurpValidationResult)`         |
| [Custom Watchlist](/sdk-reference/android-custom-watchlist)           | `CustomWatchlistResult`                                 | `onCustomWatchlistProcessed(CustomWatchlistResult)`       |
| [eKYB (Electronic Know-Your-Business)](/sdk-reference/android-ekyb)   | `EKYBResult`                                            | `onEKYBChecksCompleted(EKYBResult)`                       |
| [eKYC (Electronic Know-Your-Customer)](/sdk-reference/android-ekyc)   | `EKYCResult`                                            | `onEKYCChecksCompleted(EKYCResult)`                       |
| [Face Authentication](/sdk-reference/android-face-authentication)     | `FaceAuthenticationResult`                              | `onFaceAuthenticationCompleted(FaceAuthenticationResult)` |
| [Face Match](/sdk-reference/android-face-match)                       | `FaceMatchResult`                                       | `onFaceMatchCompleted(FaceMatchResult)`                   |
| [Global Watchlist](/sdk-reference/android-global-watchlist)           | `GlobalWatchlistResult`                                 | `onGlobalWatchlistProcessed(GlobalWatchlistResult)`       |
| [Government Validation](/sdk-reference/android-government-validation) | No payload. Related type: `GovernmentValidationResult`. | `onGovernmentValidationCompleted(boolean success)`        |
| [Process ID](/sdk-reference/android-process-id)                       | `IdProcessResult`                                       | `onIdProcessed(IdProcessResult)`                          |
| [Tax ID Validation](/sdk-reference/android-tax-id-validation)         | No payload. Related type: `TaxIdValidationResult`.      | `onTaxIdValidationCompleted(boolean isSuccess)`           |

### Module-Specific Errors

Unless noted below, a module's errors surface on the shared `onError` path.

- **Face Authentication**: `FaceAuthenticationException`, carrying a `FaceAuthenticationErrorCode`, such as a detected spoof attempt.

## Capture Signatures and Consent

These modules' errors surface on the shared `onError` path.

| Module                                                          | Result object                                  | Delivered via                                                                                       |
| --------------------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| [AES (Advanced Electronic Signature)](/sdk-reference/android-aes-advanced-electronic-signature)           | `AESResult`                                    | `onAESCompleted(AESResult)`                                                                         |
| [Combined Consent](/sdk-reference/android-combined-consent)                 | `CombinedConsentResult`                        | `onCombinedConsentCompleted(CombinedConsentResult)`                                                 |
| [Machine Learning Consent](/sdk-reference/android-machine-learning-consent) | `MachineLearningConsentResult`                 | `onMachineLearningConsentCompleted(MachineLearningConsentResult)`                                   |
| [QES (Qualified Electronic Signature)](/sdk-reference/android-qes)          | `QESResult`                                    | `onQESCompleted(QESResult)`                                                                         |
| [Signature](/sdk-reference/android-signature)                               | `SignatureFormResult`                          | `onSignatureCollected(SignatureFormResult)`                                                         |
| [User Consent](/sdk-reference/android-user-consent)                         | No payload. Related type: `UserConsentResult`. | `onUserConsentCompleted()`, a no-argument callback. `onUserCancelled()` fires if the user declines. |

## Add Human-Assisted Verification

This module's errors surface on the shared `onError` path.

| Module                                               | Result object                                                                  | Delivered via                                                                                                        |
| ---------------------------------------------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- |
| [Conference (Assisted Video)](/sdk-reference/android-conference-assisted-video) | No payload. Related type: `VideoConferenceResult`. Not passed to the callback. | `onConferenceEnded()`. Queue updates arrive through `onQueuePositionChanged(int)` and `onEstimatedWaitingTime(int)`. |

## Configure the User Experience

This module's errors surface on the shared `onError` path.

| Module                                    | Result object | Delivered via                                                                                                                                               |
| ----------------------------------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Custom Module](/sdk-reference/android-custom-module) | No payload.   | `CustomModuleListener.onCustomModuleStarted(callbackName, onCustomModuleCompleted)`. You return a `CustomModuleStatus`: `OK`, `FAIL`, `WARN`, or `UNKNOWN`. |

## Configure Android-Specific Experiences

These modules' errors surface on the shared `onError` path.

| Module                                                | Result object                                        | Delivered via                                          |
| ----------------------------------------------------- | ---------------------------------------------------- | ------------------------------------------------------ |
| [Accept Video Selfie](/sdk-reference/android-accept-video-selfie) | No payload. Related type: `AcceptVideoSelfieResult`. | `onUserAcceptedVideoSelfie()`, a no-argument callback. |
| [Approval](/sdk-reference/android-approval)                       | `ApproveResult`                                      | `onApproveCompleted(ApproveResult)`                    |
| [Captcha](/sdk-reference/android-captcha)                         | `CaptchaResult`                                      | `onCaptchaCollected(CaptchaResult)`                    |
| [Intro](/sdk-reference/android-intro)                             | No payload.                                          | `onIntroCompleted()`, a no-argument callback.          |
| [Results](/sdk-reference/android-results)                         | `UserScoreResult`                                    | `onResultsShown(UserScoreResult)`                      |