Overview
The Individual module manages individual identity verification (KYC). It provides methods to collect, update, and submit personal information for verification including name, date of birth, documents, addresses, and consents.Accessing the Module
The Individual module is accessed through the SDK context after initialization:Module Options
When initializing the SDK, you can configure how much detail the Individual module retrieves from the API:IndividualLevel
Controls the level of detail retrieved for entity data, particularly document scans:| Value | Description |
|---|---|
'base64' | Retrieves full entity data including document scan images as base64-encoded strings. Use when you need to display or process document images. |
'meta' | Retrieves only metadata without document scan images. More efficient when you don’t need the actual images. |
State Management Methods
isLoading()
Returns whether the module is currently performing an async operation (search, submit, etc.).
Signature:
boolean - true if loading, false otherwise
Description:
Indicates if the module is actively fetching or submitting data. Set to true at the start of search() or submit() calls, and false when completed.
Example:
isPreloaded()
Returns whether existing entity data was found and loaded.
Signature:
boolean - true if existing data was loaded, false if starting fresh
Description:
After calling search(), this indicates whether the entity already exists in the system with existing verification data. true means you’re continuing an existing verification; false means this is a new entity.
Example:
isPersisted()
Returns whether all changes have been submitted to the server.
Signature:
boolean - true if all data is saved, false if there are unsaved changes
Description:
Whenever you make changes to the individual’s data (name, documents, addresses, etc.), this flag is set to false. After successfully calling submit(), it’s set back to true. Use this to track whether there are pending changes.
Example:
Data Fetching Methods
search()
Searches for and loads existing entity data from the server.
Signature:
Promise<void> - Resolves when search completes
Description:
Queries the server for any existing data associated with the current session’s entity. If data exists, it’s loaded into the module and can be accessed via the access() method. Sets isPreloaded() to true if data is found.
Warning: Calling search() will overwrite any unpersisted local changes with server data.
Events Emitted:
data_loaded- When search completes (whether data was found or not)loading- Loading state changes
syncEntityId()
Synchronizes the entity ID from the session into the individual module.
Signature:
void
Description:
Updates the individual’s entity ID to match the current session’s entity ID. Useful if the session entity ID changes after module initialization.
Example:
Data Submission Methods
submit()
Persists all entity data to the server.
Signature:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
options.verify | boolean | No | false | If true, triggers verification checks and returns results. If false, only saves data without verification. |
retryOptions.maxRetries | number | No | - | Maximum number of retry attempts on failure |
retryOptions.backoffDelayMs | number | No | - | Delay in milliseconds between retry attempts |
Promise<void>ifverifyisfalse(default) - Data saved, no verification runPromise<CheckSummary>ifverifyistrue- Returns verification results (see CheckSummary Structure below)
verify: true is passed, it also triggers verification checks and returns a summary of results.
Retry behavior is not enabled by default. Pass retryOptions explicitly to enable automatic retries with exponential backoff.
Events Emitted:
results- When verification completes (only ifverify: true)loading- Loading state changes
runChecks()
Runs verification checks without submitting data.
Signature:
Promise<CheckSummary> - Verification results
Description:
Triggers verification checks on the current entity data without performing a data submission. Use this to re-run checks on already-submitted data or to check verification status.
Events Emitted:
results- When checks completeloading- Loading state changes
CheckSummary Structure
Bothsubmit({ verify: true }) and runChecks() return a CheckSummary object containing verification results.
Properties
| Property | Type | Description |
|---|---|---|
status | object | Overall verification status object: • type: "passed" | "failed" | "fail_manual" | "pass_manual" | "refer" | "wait" | "unchecked" | "archived" | "inactive" | null - The verification result type• label: string - Human-readable status label (e.g., “Verified”, “Failed”, “Needs Review”)• key: string - Status key identifier (e.g., “VERIFIED”, “FAILED”)• action?: string - Optional action required |
checkDate | string | ISO 8601 timestamp indicating when verification checks were performed (e.g., "2024-01-15T10:30:00.000Z") |
checkTypes | string[] | Array of check type names that were executed during verification. Common values: "name", "dob", "document", "address", "watchlist", "pep", "sanctions" |
personalChecks | object | Validation results for personal information fields: • name: boolean | null - Name validation result• dateOfBirth: boolean | null - DOB validation result• phoneNumber: boolean | null - Phone validation result• email: boolean | null - Email validation result• chineseName: string | null - Chinese name if provided• addresses: { [addressId: string]: boolean | null } - Address validation results by address IDFor boolean fields: true = validated successfully, false = validation failed, null = not checked |
risk | object | Risk assessment: • level: number | null - Numeric risk level (lower numbers indicate lower risk)• class: "low" | "medium" | "high" | "unacceptable" | null - Risk classification |
checkResults | array (optional) | Array of detailed check results: Each item contains: • type: string | null - Check type identifier (e.g., "document_verification", "watchlist_aml")• result: Status object with type, label, key (same structure as main status)• issues: Array<{ code: string | null, description: string | null }> - Issues found in this specific check |
checkCounts | object | Count of data sources used for verification: • name: string[] | null - Data sources that verified name• dob: string[] | null - Data sources that verified date of birth• address: { [addressId: string]: string[] | null } - Data sources per address• document: { [documentId: string]: string[] | null } - Data sources per document |
kycMethod | string | KYC method used: "electronic" (automated) or "manual" (human review) |
issues | object | Dictionary of issues found during verification. Key-value pairs where keys are issue identifiers and values contain issue details |
alertList | array | Array of alerts or actions required: Each item can be an IIssue or IIssueAction:• term: string - Issue identifier (e.g., "document_expired", "additional_document_required")• type: "warning" | "action" | "alert" | "success" - Alert severity• extra?: { action: string, label?: string } - Additional action details (only for type: "action") |
blocklistPotentialMatches | array | Array of potential blocklist matches: Each item contains: • entityId: string - ID of the matched entity• matchStrength: number | null - Match confidence (0-1)• matches: Object with personal (string array of matched fields) and documents (matched document details) |
duplicatePotentialMatches | array | Array of potential duplicate entities found: Same structure as blocklistPotentialMatches. Indicates this entity may be a duplicate of an existing entity in the system |
duplicateBlocklistMatches | array | Array of entities found in both duplicate and blocklist checks: Same structure as blocklistPotentialMatches. These are high-priority matches requiring attention |
rulesetsMatches | array | Array of ruleset matching results: Each item contains: • name: string | null - Ruleset name• order: number | null - Ruleset execution order• result: string | null - Ruleset result (e.g., "passed", "failed")• rulesetMatchFields: Object with match counts for name, dob, address, govId - each containing { required: number | null, actual: number | null } |
retryPages | array | Array of pages that can be retried if verification failed: Each item contains: • name: string - Screen/page identifier that can be retried |
Status Types
Thestatus.type property indicates the overall verification result:
| Status | Description |
|---|---|
passed | Verification passed all checks |
failed | Verification failed automated checks |
pass_manual | Manually approved after review |
fail_manual | Manually rejected after review |
refer | Requires manual review |
wait | Waiting for additional information |
unchecked | No checks have been run |
archived | Entity has been archived |
inactive | Entity is inactive |
Example Structure
Data Access Methods
access(fieldName)
Accesses reactive data accessors for reading and updating entity fields.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
fieldName | string | Yes | Name of the field to access. See Available Fields table below. |
Accessor object
Accessor Interface:
access() vs search():
- Use
access()to read or write entity data within the module. You don’t have direct access to the full raw entity object —access()is the interface for it. - Use
search()to refresh entity data by fetching the latest state from FrankieOne’s backend.
| Field | Type | Description |
|---|---|---|
entityId | string | null | Entity identifier (read-only) |
name | { givenName, middleName, familyName, displayName } | Individual’s name |
dateOfBirth | string | null | Date of birth (ISO 8601 format: YYYY-MM-DD) |
consentsGiven | string[] | Array of consent strings |
documents | object[] | Array of identity documents. See Document Structure. |
addresses | object[] | Array of addresses. See Address Structure. |
profile | object | null | Verification profile configuration |
phoneNumber | { documentId, idNumber } | Phone number details |
email | { documentId, idNumber } | Email details |
extraData | object | Custom additional data |
device | object | Device fingerprinting details |
isLoading | boolean | Current loading state (read-only) |
isPersisted | boolean | Current persistence state (read-only) |
Name Methods
setEmail()
Sets the individual’s email address.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | null | Yes | Email address string or null to clear |
getEmail()
Gets the individual’s email address.
Signature:
string | null - Email address or null if not set
Example:
setPhoneNumber()
Sets the individual’s phone number.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
phone | string | null | Yes | Phone number string or null to clear |
getPhoneNumber()
Gets the individual’s phone number.
Signature:
string | null - Phone number or null if not set
Example:
Profile Methods
setProfileType()
Sets the verification profile type.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
profileType | string | Yes | Profile type name that determines which verification checks are performed |
| Profile Type | Description |
|---|---|
auto | Automatically selects appropriate profile based on available data |
gov_id | Government ID verification |
safe_harbour | Safe harbour compliance checks |
safe_harbour_id | Safe harbour with ID verification |
safe_harbour_plus | Enhanced safe harbour checks |
international | International verification profile |
gov_id_media | Government ID with media/AML checks |
safe_harbour_media | Safe harbour with media/AML checks |
safe_harbour_id_media | Safe harbour ID with media/AML checks |
safe_harbour_plus_media | Safe harbour plus with media/AML checks |
international_media | International with media/AML checks |
aml_only | AML checks only |
aml_media_only | AML media checks only |
getProfileType()
Gets the current verification profile type.
Signature:
void
Consent Methods
addConsent()
Adds a consent string to the entity’s list of consents.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Consent type identifier or consent text |
access('consentsGiven').
Example:
Document Methods
addDocument()
Adds a new identity document to the entity.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
details | object | Yes | Document object with identity document details. See Document Structure below. |
updateDocument()
Updates an existing document by its ID.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | null | Yes | Document ID to update |
details | object | Yes | Updated document object. See Document Structure. |
deleteDocument()
Deletes a document by its ID.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Document ID to delete |
Address Methods
addAddress()
Adds a new address to the entity.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
details | object | Yes | Address object. See Address Structure below. |
updateAddress()
Updates an existing address by its ID.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | null | Yes | Address ID to update |
details | object | Yes | Updated address object. See Address Structure. |
Reference Methods
addReference()
Attaches indexable references to the entity.
Signature:
- Single parameter - Sets the customer reference (won’t override if already set)
- Two parameters - Sets a custom key-value reference pair
| Parameter | Type | Required | Description |
|---|---|---|---|
customerReference | string | Yes (overload 1) | Your customer reference identifier |
key | string | Yes (overload 2) | Reference key name |
value | string | Yes (overload 2) | Reference value |
Extra Data Methods
setExtraData()
Sets custom extra data on the entity.
Signature:
| Parameter | Type | Required | Description |
|---|---|---|---|
data | object | Yes | Custom data object to attach to the entity |
Data Structures
Document Structure
When adding or updating documents, pass a plain object with these properties. The SDK will convert it internally.| Property | Type | Required | Description |
|---|---|---|---|
documentId | string | null | No | Unique document identifier. Leave null for new documents (auto-generated). |
idType | string | null | Yes | Document type: 'DRIVERS_LICENCE', 'PASSPORT', 'NATIONAL_ID', 'BIRTH_CERTIFICATE', 'MEDICARE_CARD', etc. |
idSubType | string | null | No | Document subtype if applicable (provider-specific). |
country | string | null | Yes | ISO 3166-1 alpha-3 country code (e.g., 'AUS', 'USA', 'GBR'). |
region | string | null | No | State or region code (e.g., 'NSW', 'CA', 'QLD'). |
idNumber | string | null | Yes | Document number or identifier. |
idExpiry | string | null | No | Expiry date in ISO 8601 format: YYYY-MM-DD. |
dateOfBirth | string | null | No | Date of birth as shown on document in ISO 8601 format: YYYY-MM-DD. |
gender | string | null | No | Gender as shown on document. |
extraData | object | No | Additional document-specific data (key-value pairs). |
Address Structure
When adding or updating addresses, pass a plain object with these properties. The SDK will convert it internally.| Property | Type | Required | Description |
|---|---|---|---|
addressId | string | null | No | Unique address identifier. Leave null for new addresses (auto-generated). |
addressType | string | null | Yes | Address type: 'RESIDENTIAL', 'MAILING', 'BUSINESS', etc. |
unitNumber | string | null | No | Unit or apartment number. |
streetNumber | string | null | Yes | Street number. |
streetName | string | null | Yes | Street name. |
streetType | string | null | No | Street type (e.g., 'Street', 'Road', 'Avenue', 'Lane'). |
suburb | string | null | No | Suburb or city district. |
town | string | null | Yes | Town or city name. |
state | string | null | No | State or province code. |
postalCode | string | null | Yes | Postal or ZIP code. |
country | string | null | Yes | ISO 3166-1 alpha-3 country code (e.g., 'AUS', 'USA'). |
buildingName | string | null | No | Building name if applicable. |
longForm | string | null | No | Complete address as a single string. |
Events
The Individual module emits the following events:data_loaded
Emitted when entity data has been loaded from the server.
Arguments:
data_updated
Emitted when any data field changes.
Arguments:
Common Events
The Individual module also emits common events inherited from the event system:error- When an error occurswarning- For non-critical warningsinfo- Informational messagesloading- Loading state changes
Complete Example
Best Practices
-
Always call
search()first - Load existing data before making changes to avoid overwriting user progress. -
Check
isPersisted()before navigation - Warn users if they have unsaved changes. -
Use
access()for reactive data - Subscribe to field changes for real-time UI updates. -
Handle verification results - Always check
checkStatusaftersubmit({ verify: true }). -
Validate data before submit - Check that required fields are populated before calling
submit(). -
Add proper error handling - Listen to
errorevents and wrap async calls in try-catch blocks. -
Set consents explicitly - Always record user consent with
addConsent()before verification.