What it does
The IDV journey walks an applicant through camera-based document capture and a biometric selfie, extracts the document data, optionally lets the applicant review it, submits for verification, and settles with a single decision. FrankieOne assembles and maintains every screen and the transitions between them — you mount a container and read the result.What your applicant sees
1
Start (off by default)
An introductory screen before the flow begins. Enable with
withStart.2
Welcome (off by default)
An orientation screen. Enable with
withWelcome.3
Consent (off by default)
Captures consent for data processing. Enable with
withConsent.4
Capture
Vendor-driven camera capture of the identity document and a biometric selfie.
5
Extraction
The captured document is processed and its data extracted. A loading screen covers this gap —
see
captureLoader below.6
Review (off by default)
The applicant confirms or corrects the extracted data. Enable with
withReview — see
Review screen.7
Verifying (skipped when triggerVerificationOnSubmit: false)
Verification runs against the submitted data. A loading screen covers this gap — see
verifying below. With triggerVerificationOnSubmit: false, this step and its loading screen
are skipped entirely — nothing is submitted for verification, and the journey settles
success / captured instead.8
Result
The journey settles with a
JourneyResult. See Outcomes.Example
Options that apply
See Configuration for what each option controls, and the
Journey reference for the exhaustive type and default for every
option.
Review screen
SettingwithReview: true inserts a review screen between extraction and verification. The applicant
sees the data the vendor extracted from their document and can correct it before submission proceeds —
this is what catches an OCR misread before it reaches a verification check.
The review option itself is not a journey concept — it’s the form module’s own configuration,
forwarded verbatim. The journey does not read, validate, or reshape it, which means it keeps the form
module’s per-country and per-state field structure exactly as documented there. For the actual field
shapes, required properties, and how the per-country and per-state structure is built, see
Form module: Configuration — this page does not repeat
that structure.
withReview; on idv and ocr it is off unless you
turn it on. The review configuration applies whenever the screen mounts, whether or not withReview
is set.
If the review screen’s address field uses autocomplete, that autocomplete is powered by the Google
Places API and needs a
googleApiKey set in the form module’s provider configuration to work — see
Form module: Configuration for where it goes. Without
it, address autocomplete will not work.Requirements and caveats
- The applicant needs a working camera to complete document and selfie capture.
- Capture is vendor-driven. The journey abstracts over which vendor runs it, so nothing about a specific vendor’s SDK is documented here — see Outcomes for how a vendor-side failure surfaces.
- Vendor selection happens outside
journey()entirely, in the recipe passed toOneSdk({ recipe })at initialization —JourneyOptionshas no vendor key.journey('idv')needsrecipe.idv.provider.nameset, or the idv module throwsNo IDV provider specified in the recipe. Every journey, idv included, also needsrecipe.formconfigured, or the form module throwsForm recipe configuration is missing. See SDK Initialization for the recipe shape and Vendor Customizations for per-vendor settings. - If the review screen is enabled and its address field needs autocomplete, set
googleApiKeyon the form module’s provider configuration (see the note above) — this is a one-time SDK setup step, not ajourney()option.
Outcomes
An idv journey settles with the sameJourneyResult shape as every other flow — see
Results for the full outcome and reason-code contract.
One idv-specific note: because capture depends on a vendor SDK, a vendor-side failure settles the
journey with outcome: 'error' and either reason: 'vendor_load_failed' (the vendor SDK failed to
load) or reason: 'vendor_offline' (the vendor was unreachable once loaded). Check recoverable and
error.code on both before deciding whether to offer a retry.