Skip to main content

Overview

This flow extends the basic IDV flow by adding an OCR review screen after document capture. After the camera captures and processes the document, the extracted data is shown in a review form for the user to confirm or correct before verification is submitted. This is useful when you want users to verify OCR accuracy. Modules used: idv, form (WELCOME, CONSENT, REVIEW, LOADING, RESULT screens)
Instead of building from scratch, fork an existing flow from the public sample codes.

Flow Diagram

1

Welcome Screen

Initial greeting and introduction to the verification process.
2

Consent Screen

Capture user consent for data processing.
3

IDV Capture

Camera capture UI for document scanning. Document is automatically detected and captured.
4

Loading / Extraction

SDK extracts data from the captured document. A loading screen is shown.
5

Review Screen

Extracted data is displayed in a review form for user confirmation.
6

Verification Submitted

After review confirmation, verification is submitted automatically.
7

Result

Verification outcome is shown.
This flow requires a Google Places API key (googleApiKey) in the form provider configuration. The key powers the address autocomplete field in the review form. Without it, the address search will not work. Get a key from the Google Cloud Console with the Places API enabled.

Full Implementation

Step-by-Step Breakdown

1. Initialize the SDK

Pass the session object to OneSDK(). Include the recipe.form.provider configuration with a googleApiKey since this flow uses form components for the WELCOME, CONSENT, REVIEW, LOADING, and RESULT screens. The Google Places API key is required for the address autocomplete field in the review form.

2. Configure Components

Create WELCOME and CONSENT form components to collect user consent before starting capture. Create the IDV flow and form components for the REVIEW, LOADING, and RESULT screens.

3. Wire Up Events

Listen for events:
  • form:welcome:ready on welcome — user completed the welcome screen, mount consent
  • form:consent:ready on consent — user gave consent, mount the IDV flow
  • loading on IDV — show/hide loading screen while IDV component initializes (before capture)
  • detection_complete on IDV — document capture finished, show extraction loading screen
  • results on IDV — extraction complete, mount the review screen
  • form:review:ready on review — user confirmed data, submit verification

4. Handle Results

After the review form emits form:review:ready, mount a loading screen, then call sdk.individual().submit({ verify: true }) and mount the result screen. The loading screen prevents a blank screen during the async submission. See Error Scenarios for details.

Loading Screens

Three loading screens cover the async gaps in this flow:
Unmount clears the container. Calling .unmount() on a component removes all content from the element it was mounted to — not just the component itself. If you mount a LOADING screen and the IDV flow to the same container, unmounting the loading screen will also destroy the IDV content. Always mount loading screens to a separate element when they need to overlay another component.
IDV loading — shown while the IDV component initializes. The loading screen is mounted to a separate overlay div (#loading-overlay) that sits on top of the main container, so unmount() only clears the overlay without affecting the IDV content underneath:
Extraction loading — shown after document capture while the SDK extracts data. Mount it on detection_complete and unmount when results fires:
Submission loading — shown after the user confirms the review while submit() completes. Mount it immediately in the form:review:ready handler before calling submit():

Review Screen Configuration

The review screen displays extracted OCR data for user confirmation:
Set type: "ocr" so the review form knows to display OCR-extracted fields. See Form Screens for customization options.

Submitting After Review

When the user confirms the review, the form:review:ready event fires. Mount a loading screen first so the user is not left with a blank screen during submission:

Customization Reference