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) |
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.errorremains the terminal selfie failure.SelfieScanResult.videoRecordingErrorreports a non-fatal Deepsight recording problem independently. If the device has less than 15 MB of free storage, capture continues without video andvideoRecordingErrorisinsufficientStorageForVideoRecording. - Video Selfie: Unlike most modules, a Video Selfie failure ends the flow.
VideoSelfieResult.error(VideoSelfieError) is delivered throughonVideoSelfieCompleted(_:)whenever captured video or audio data exists; iferroris non-nil, the SDK additionally callsonError(_:)withIncdFlowError.videoSelfieNotCompleted(_:), wrapping that sameVideoSelfieError. Cases includevideoSelfieNotAuthorized,screenRecordingPermissionsDenied,recordingMicrophonePermissionsDenied,voiceConsentMicrophonePermissionsDenied,internalError(_:), anderror(_:)(wrapping anIncdError).
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:
FaceAuthenticationErroris a dedicated face-authentication error enum, carried by theerrorfield ofFaceAuthenticationResult. Its cases includespoofAttemptDetected(_:),userIsNotRecognized(_:),faceMaskDetected(_:),deniedCameraPermissions,userCancelled, anderror(_:)(wrapping anIncdError).FaceAuthenticationResult.videoRecordingErrorseparately reports non-fatal Deepsight recording problems. If the device has less than 15 MB of free storage, authentication continues without video andvideoRecordingErrorisinsufficientStorageForVideoRecording.
Capture Signatures and Consent
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). |