SDK reference · iOS SDK

Results

Every module in an onboarding flow reports its outcome to your IncdOnboardingDelegate. Most modules deliver a result object through a dedicated callback. A few modules signal completion without a result object: for example, Video Conference reports a success Bool and an optional error.

This page lists every result and error object. The groups match the categories on Modules. For the full field list of a result type, see its module page.

The flow's terminal callbacks are onSuccess() when the flow finishes, userCancelledSession() when the user cancels, and onError(_:) when it fails.


Result Delivery

Results arrive on the module's success callback, such as onIdProcessed(_ result: IdProcessResult). IncdOnboardingDelegate declares all of these result callbacks. The SDK also defines narrower delegate protocols for specific scenarios:

  • IDCaptureControllerDelegate: Real-time callbacks while capturing an ID.
  • IncdLoginDelegate: Face-login sync progress.
  • IncdOnboardingVideoConferenceDelegate: Assisted-video-conference callbacks.

The iOS SDK has no single shared status type. Each result struct carries its own fields describing the module's outcome. For example, GovernmentValidationResult exposes success: Bool and error: IncdError?, while IdScanResult exposes scanStatus: IncdIdScanStatus (an enum with cases such as ok, errorGlare, and errorSharpness). See each individual module's page.

A few modules do not return a result object. They signal completion with a callback that carries only a status: for example, onVideoConferenceCompleted(_ success: Bool, _ error: VideoConferenceError?).


Error Delivery

Errors surface on the shared onError(_ error: IncdFlowError) path. IncdFlowError is a single enum with cases such as initError(_:), error(_:) (wrapping an IncdError), sessionCreationFailed(_:), permissionsDenied, declinedToSignDocument, captchaNotVerified(_:), videoSelfieNotCompleted(_:), sectionAlreadyRunning(_:), watchlistProcessFailed(_:), and interrupted.

Flow-level failures are reported through IncdFlowError on onError(_:). In addition, several modules define their own error enum, carried by the error field of that module's result object: for example, VideoSelfieResult.error (VideoSelfieError), IdScanResult.error (IncdIdScanError), and FaceAuthenticationResult.error (FaceAuthenticationError). When a result object has such an error field, it carries that module's specific failure cause for the step.

Face Capture and Face Authentication Video Recording Errors

SelfieScanResult and FaceAuthenticationResult gain a new optional field:

public var videoRecordingError: SelfieScanError?          // on SelfieScanResult
public var videoRecordingError: FaceAuthenticationError?  // on FaceAuthenticationResult

SelfieScanError and FaceAuthenticationError each gain a new case:

case insufficientStorageForVideoRecording  // new

The case is reported when Deepsight video recording is skipped because the device has less than 15 MB of free storage. It is non-fatal: the face capture itself completes normally, and the skip is surfaced only via videoRecordingError. The error field remains reserved for terminal failures, so existing error handling is unaffected. If you switch exhaustively over SelfieScanError or FaceAuthenticationError, add a handler for this case.


Collect Identity Data

Module Result Object Delivered Via
Document Capture DocumentScanResult onDocumentScanCompleted(_ result: DocumentScanResult)
Dynamic Forms DynamicFormsResult onDynamicFormCompleted(_ result: DynamicFormsResult)
Email EmailAddressResult onAddEmailAddressCompleted(_ result: EmailAddressResult)
Full Name UserNameInfoResult onAddFullNameCompleted(_ result: UserNameInfoResult)
Geolocation GeolocationResult onGeolocationCompleted(_ result: GeolocationResult)
ID Capture IdScanResult onIdFrontCompleted(_ result: IdScanResult)
onIdFrontAttemptCompleted(_ result: IdScanResult)
onIdBackCompleted(_ result: IdScanResult)
onIdBackAttemptCompleted(_ result: IdScanResult)
ID OCR OcrResult onOcrCompleted()
NFC NFCScanResult onNFCScanCompleted(_ result: NFCScanResult)
Phone PhoneNumberResult onAddPhoneNumberCompleted(_ result: PhoneNumberResult)
QR Scan QRScanResult onQRScanCompleted(_ result: QRScanResult)
Selfie SelfieScanResult onSelfieScanCompleted(_ result: SelfieScanResult)
onSelfieAttemptCompleted(_ result: SelfieScanResult)
Video Selfie VideoSelfieResult onVideoSelfieCompleted(_ result: VideoSelfieResult)

Module-Specific Errors

Unless noted below, a module's errors surface on the shared onError(_:) path.

  • Selfie: SelfieScanResult.error remains the terminal selfie failure. SelfieScanResult.videoRecordingError reports a non-fatal Deepsight recording problem independently. If the device has less than 15 MB of free storage, capture continues without video and videoRecordingError is insufficientStorageForVideoRecording.
  • Video Selfie: Unlike most modules, a Video Selfie failure ends the flow. VideoSelfieResult.error (VideoSelfieError) is delivered through onVideoSelfieCompleted(_:) whenever captured video or audio data exists; if error is non-nil, the SDK additionally calls onError(_:) with IncdFlowError.videoSelfieNotCompleted(_:), wrapping that same VideoSelfieError. Cases include videoSelfieNotAuthorized, screenRecordingPermissionsDenied, recordingMicrophonePermissionsDenied, voiceConsentMicrophonePermissionsDenied, internalError(_:), and error(_:) (wrapping an IncdError).

Verify and Authenticate

Module Result Object Delivered Via
Antifraud AntifraudResult onAntifraudCompleted(_ result: AntifraudResult)
CURP Validation CURPValidationResult onCURPValidationCompleted(_ result: CURPValidationResult)
Custom Watchlist CustomWatchlistResult onCustomWatchlistCompleted(_ result: CustomWatchlistResult)
eKYB (electronic Know-Your-Business) EkybResult onExternalValidationEkybCompleted(_ result: EkybResult)
eKYC (electronic Know-Your-Customer) EKYCResult onEKYCCompleted(_ result: EKYCResult)
Face Authentication FaceAuthenticationResult onFaceAuthenticationCompleted(_ result: FaceAuthenticationResult)
Face Match FaceMatchResult onFaceMatchCompleted(_ result: FaceMatchResult)
Global Watchlist GlobalWatchlistModuleResult onGlobalWatchlistCompleted(_ result: GlobalWatchlistModuleResult)
Government Validation GovernmentValidationResult onGovernmentValidationCompleted(_ result: GovernmentValidationResult)
Process ID IdProcessResult onIdProcessed(_ result: IdProcessResult)

Module-Specific Errors

Unless noted below, a module's errors surface on the shared onError(_:) path.

  • Face Authentication: FaceAuthenticationError is a dedicated face-authentication error enum, carried by the error field of FaceAuthenticationResult. Its cases include spoofAttemptDetected(_:), userIsNotRecognized(_:), faceMaskDetected(_:), deniedCameraPermissions, userCancelled, and error(_:) (wrapping an IncdError). FaceAuthenticationResult.videoRecordingError separately reports non-fatal Deepsight recording problems. If the device has less than 15 MB of free storage, authentication continues without video and videoRecordingError is insufficientStorageForVideoRecording.

These modules' errors surface on the shared onError(_:) path.

Module Result Object Delivered Via
AES (Advanced Electronic Signature) AESResult onAESCompleted(result: AESResult)
Combined Consent CombinedConsentResult onCombinedConsentsGiven(_ result: CombinedConsentResult)
Machine Learning Consent MachineLearningConsentResult onMachineLearningConsentCompleted(_ result: MachineLearningConsentResult)
QES (Qualified Electronic Signature) QESResult onQESCompleted(result: QESResult)
Signature SignatureFormResult onSignatureCollected(_ result: SignatureFormResult)
User Consent UserConsentResult onUserConsentGiven(_ result: UserConsentResult)

Add Human-Assisted Verification

This module's errors surface on the shared onError(_:) path.

Module Result Object Delivered Via
Video Conference No result payload. onVideoConferenceCompleted(_ success: Bool, _ error: VideoConferenceError?). Queue updates arrive through onQueuePositionChanged(_ newQueuePosition: Int) and onEstimatedWaitingTime(_ waitingTimeInSeconds: Int).

Configure the User Experience

This module's errors surface on the shared onError(_:) path.

Module Result Object Delivered Via
Custom Module No result payload. onCustomModuleStarted(callbackName: String, onCustomModuleCompleted: @escaping (CustomModuleStatus) -> Void). You return a CustomModuleStatus: ok, fail, warn, or unknown. Completion is also reported through onCustomModuleCompleted(_ result: IncdError?).

View Results

This module's errors surface on the shared onError(_:) path.

Module Result Object Delivered Via
Results UserScore onUserScoreFetched(_ result: UserScore)

Configure iOS-Specific Experiences

Module Result Object Delivered Via
Approval ApprovalResult onApproveCompleted(_ result: ApprovalResult)
Captcha CaptchaResult onCaptchaCompleted(_ result: CaptchaResult)
Intro No result payload. On success, the flow advances to the next module with no callback. If the user dismisses the step, userCancelledSession() is called; any other failure surfaces through onError(_ error: IncdFlowError).

Was this page helpful?