---
schema_version: "1"
id: 041864b577dae02d5265156d42dfb0e8a6dcc988db33c6c566eaef84e5dcbecc
title: IdentityVerificationExt Interface
collection: legacydeveloper
version: current
locale: en-us
portal_url: https://docs.salesforce.com/legacydeveloper/current/en-us/health_cloud_object_reference/apex_interface_id_verification_IdentityVerificationExt.md
canonical_url: https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_interface_id_verification_IdentityVerificationExt.htm
source_site: developer.salesforce.com
content_type: documentation
content_hash: 7b59d59f8e9c1d79ecbaacfcbc7c9a840d1cb44bd97456a66243eca7b693725f
description: The IdentityVerificationExt interface enables you to verify a caller’s identity.Returns the verification data that contains the columns to be verified.Returns the search result that includes the verification data.
---
# IdentityVerificationExt Interface

The IdentityVerificationExt interface enables you to verify a caller’s identity.

## Namespace

[id\_verification](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_namespace_id_verification.htm "The id_verification namespace provides an interface and classes for Health Cloud to verify the caller’s identity.")

## Usage

The id\_verification.IdentityVerificationExt interface is called by the Verify Customer Identity flow.

To implement this interface, you must first declare a class with the implements keyword as follows:

public class IdentityVerificationExtImpl implements id\_verification.IdentityVerificationExt{}

Next, your class must also provide implementation for the following methods:

public id\_verification.SearchResult search(id\_verification.SearchRequest searchRequest){
 //Your code here
}
 
public id\_verification.VerificationContext getVerifiers(id\_verification.VerificationContext verificationContext){
 //Your code here
}
 
public id\_verification.ProcessDetail getProcessDetail(id\_verification.ProcessDetail processDetail){
 //Your code here
}

The method you implemented must be declared as global or public.

- **[IdentityVerificationExt Methods](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_interface_id_verification_IdentityVerificationExt.htm#apex_id_verification_IdentityVerificationExt_methods)**
- **[IdentityVerificationExt Example Implementation](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_interface_id_verification_IdentityVerificationExt.htm#apex_interface_id_verification_IdentityVerificationExt_Example)**

## IdentityVerificationExt Methods

The following are methods for IdentityVerificationExt.

- **[getVerifiers(var1)](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_interface_id_verification_IdentityVerificationExt.htm#apex_id_verification_IdentityVerificationExt_getVerifiers)**  
    Returns the verification data that contains the columns to be verified.
- **[search(var1)](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_interface_id_verification_IdentityVerificationExt.htm#apex_id_verification_IdentityVerificationExt_search)**  
    Returns the search result that includes the verification data.

### getVerifiers(var1)

Returns the verification data that contains the columns to be verified.

#### Signature

public id\_verification.VerificationContext getVerifiers(id\_verification.VerificationContext var1)

#### Parameters

var1

Type: [id\_verification.VerificationContext](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_class_id_verification_VerificationContext.htm#apex_class_id_verification_VerificationContext "Contains information about the verification context, including the process definition, selected search result, selected verified result, and verified result.")

Contains information about the verification context, including the process definition, selected search result, selected verified result, and verified result.

#### Return Value

Type: [id\_verification.VerificationContext](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_class_id_verification_VerificationContext.htm#apex_class_id_verification_VerificationContext "Contains information about the verification context, including the process definition, selected search result, selected verified result, and verified result.")

### search(var1)

Returns the search result that includes the verification data.

#### Signature

public id\_verification.SearchResult search(id\_verification.SearchRequest var1)

#### Parameters

var1

Type: [id\_verification.SearchRequest](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_class_id_verification_SearchRequest.htm#apex_class_id_verification_SearchRequest "Contains information about the search request data. The search request represents search filters for object-based search, search terms for text-based search, and the verification context that includes the process definition, process details, and process fields.")

Contains information about the search request data. The search request represents search filters for object-based search, search terms for text-based search, and the verification context that includes the process definition, process details, and process fields.

#### Return Value

Type: [id\_verification.SearchRequest](https://developer.salesforce.com/docs/atlas.en-us.health_cloud_object_reference.meta/health_cloud_object_reference/apex_class_id_verification_SearchRequest.htm#apex_class_id_verification_SearchRequest "Contains information about the search request data. The search request represents search filters for object-based search, search terms for text-based search, and the verification context that includes the process definition, process details, and process fields.")

## IdentityVerificationExt Example Implementation

This example shows an implementation of the id\_verification.IdentityVerificationExt interface.

The MockIdentityVerificationExt implements the id\_verification.IdentityVerificationExt interface and MockIdentityVerificationExtHelper contains the logic for each method.

public class MockIdentityVerificationExt implements id\_verification.IdentityVerificationExt {
    public id\_verification.SearchResult search(id\_verification.SearchRequest searchRequest) {
        id\_verification.SearchResult searchResult = MockIdentityVerificationExtHelper.getDefaultSearchResult(
            searchRequest.searchTerm, searchRequest.searchFilters);
        return searchResult;
    }
    
    public id\_verification.VerificationContext getVerifiers(id\_verification.VerificationContext verificationContext) {
        id\_verification.VerificationContext context = MockIdentityVerificationExtHelper.getVerificationContext();
        return context;
    }
    
    public id\_verification.ProcessDetail getProcessDetail(id\_verification.ProcessDetail processDetail) {
        return MockIdentityVerificationExtHelper.getAccountProcessDetail(null, null);
    }
}

public class MockIdentityVerificationExtHelper {
        
    // Mock records for search, in an ideal implementation these values will come from an API call
    private static List <String\[\]> mockDb = new List<String\[\]> {
        //MockAccountName, MockAccountNumber, MockPhone, MockPostalCode
        new String\[\] {'James Smith', '263872', '4156546635', '94117'},
        new String\[\] {'Michelle Smith', '123872', '3237654456', '56400'},
        new String\[\] {'Robert Smith', '329478', '6548987709', '56410'},
        new String\[\] {'David Smith', '428476', '6099176652', '08701'},
        new String\[\] {'Mary Smith', '238476', '6155123342', '08790'},
        new String\[\] {'Maria Garcia', '349872', '4156754040', '94108'},
        new String\[\] {'Lee Hartman', '949857', '6457833434', '94110'}
    };
 
    public static id\_verification.SearchResult getDefaultSearchResult(String searchTerm, List < id\_verification.FieldValue > searchFilters) {
        id\_verification.SearchResult searchResult = new id\_verification.SearchResult();
        searchResult.searchResultHeaders = getSearchResultHeaders();
        searchResult.searchResultRows = getSearchResultRows(searchTerm, searchFilters);
        return searchResult;
    }
    
    private static List <id\_verification.SearchResultHeader> getSearchResultHeaders() {
        List <id\_verification.SearchResultHeader> searchResultHeaders = new List <id\_verification.SearchResultHeader>();
        
        id\_verification.SearchResultHeader nameHeader = new id\_verification.SearchResultHeader();
        nameHeader.developerName = 'MockName';
        nameHeader.displayLabel = 'Name';
        nameHeader.dataType = 'Name';
        searchResultHeaders.add(nameHeader);
        
        id\_verification.SearchResultHeader accountNoHeader = new id\_verification.SearchResultHeader();
        accountNoHeader.developerName = 'MockAccountNo';
        accountNoHeader.displayLabel = 'Account #';
        accountNoHeader.dataType = 'Text';
        searchResultHeaders.add(accountNoHeader);
        
        return searchResultHeaders;
    }
 
    private static List <id\_verification.SearchResultRow> getSearchResultRows(String searchTerm, List < id\_verification.FieldValue > searchFilters) {
        List <id\_verification.SearchResultRow> searchResultRows = new List <id\_verification.SearchResultRow>();
 
        for (String\[\] row : mockDb) {
            id\_verification.SearchResultRow resultRow = new id\_verification.SearchResultRow();
            List <id\_verification.FieldValue> fieldValues = new List <id\_verification.FieldValue>();
            
            Boolean found = false;
            
            if (!String.isBlank(searchTerm)) { // Text Based Search else block can hold logic for object based search
                found = textBasedSearch(searchTerm, row);
            }
 
            if (found) {
                id\_verification.FieldValue fieldValue = new id\_verification.FieldValue();
                fieldValue.developerName = 'MockAccountName';
                fieldValue.value = row\[0\];
                fieldValues.add(fieldValue);
                
                fieldValue = new id\_verification.FieldValue();
                fieldValue.developerName = 'MockAccountNumber';
                fieldValue.value = row\[1\];
                fieldValues.add(fieldValue);
                
                fieldValue = new id\_verification.FieldValue();
                fieldValue.developerName = 'MockPhone';
                fieldValue.value = row\[2\];
                fieldValues.add(fieldValue);
    
                fieldValue = new id\_verification.FieldValue();
                fieldValue.developerName = 'MockPostalCode';
                fieldValue.value = row\[3\];
                fieldValues.add(fieldValue);
    
                resultRow.searchResultFieldValues = fieldValues;
                searchResultRows.add(resultRow);
            }
        }
        return searchResultRows;
    }
    
    private static Boolean textBasedSearch(String searchTerm, String\[\] row) {
        Boolean found = false;
        List<String\> terms = searchTerm.split(' ');
        String allTxt = '';
        
        for (String col : row) {
            allTxt = allTxt + ' ' + col;
        }
        
        for (String term : terms) {
            if (allTxt.toLowercase().contains(term.toLowercase())) {
                found = true;
            } else {
                found = false;
                break;
            }
        }
        return found;
    }
    
    public static id\_verification.VerificationContext getVerificationContext() {
        id\_verification.VerificationContext context = new id\_verification.VerificationContext();
        context.selectedSearchResult = new id\_verification.SelectedSearchResult();
        context.verifiedResult = new id\_verification.VerifiedResult();
        context.message = 'Success!';
        context.isSuccess = true;
 
        context.processDefinition = new id\_verification.ProcessDefinition();
        context.processDefinition.layoutType = 'Tab';
        context.processDefinition.processDetail = new List <id\_verification.ProcessDetail>();
        
        context.processDefinition.processDetail.add(getAccountProcessDetail(context.selectedSearchResult, context.verifiedResult));
        return context;
    }
    
    /\* This method will return static/mock values for the context, these values can also be
    pulled from the setup entities for Identity Verification
    \*/
    public static id\_verification.ProcessDetail getAccountProcessDetail(
        id\_verification.SelectedSearchResult selectedSearchResult, id\_verification.VerifiedResult verifiedResult) {
        Integer numberOfOptionalVerifiers = 1;
        id\_verification.ProcessDetail accountProcessDetail = new id\_verification.ProcessDetail();
        accountProcessDetail.developerName = 'External\_Process\_Detail';
        accountProcessDetail.label = 'External Process Detail';
        accountProcessDetail.dataSourceType = 'External';
        accountProcessDetail.searchObjectName = 'Account';
        accountProcessDetail.searchSequenceNo = 1;
        accountProcessDetail.searchType = 'Object-Based';
        accountProcessDetail.searchResultUniqueIdField = 'MockAccountNo';
        accountProcessDetail.searchResultFilter = '';
        accountProcessDetail.searchResultSortOrder = '';
        accountProcessDetail.optionalVerifierCount = 2;
        //This should be the ID of the apex class implementing the interface
        accountProcessDetail.apexClassName = '01pRM0000002iUX';
        accountProcessDetail.verificationProcessFieldList = new id\_verification.VerificationProcessFieldList();
        accountProcessDetail.verificationProcessFieldList.verificationProcessFields = getAccountProcessFields(selectedSearchResult, verifiedResult, numberOfOptionalVerifiers);
 
        return accountProcessDetail;
    }
    
    // This method does not populate all fields, this is just an example.
    public static List < id\_verification.VerificationProcessField > getAccountProcessFields(id\_verification.SelectedSearchResult selectedSearchResult, id\_verification.VerifiedResult verifiedResult, Integer numberOfOptionalVerifiers) {
        List < id\_verification.VerificationProcessField > processFields = new List < id\_verification.VerificationProcessField >();
        
        List < id\_verification.FieldValue > selectedRecordFieldValues = new List < id\_verification.FieldValue >();
        List < id\_verification.Verifier > requiredVerifiers = new List <id\_verification.Verifier>();
        List < id\_verification.Verifier > optionalVerifiers = new List <id\_verification.Verifier>();
        
        List < id\_verification.FieldValue > selectedPlaceholderOptionalFieldValues = new List < id\_verification.FieldValue >();
        List < id\_verification.VerificationProcessField > optionalVerifierProcessFields = setOptionalVerifierProcessFields(selectedPlaceholderOptionalFieldValues);
        
        id\_verification.VerificationProcessField nameRequiredField = new id\_verification.VerificationProcessField();
        nameRequiredField.dataSourceType = 'External';
        nameRequiredField.dataType = 'Name';
        nameRequiredField.developerName = 'MockAccountName';
        nameRequiredField.fieldName = 'Name';
        nameRequiredField.fieldType = 'requiredVerifier';
        nameRequiredField.label = 'AccountName';
        processFields.add(nameRequiredField);
        
        id\_verification.FieldValue nameRequiredSelectedRecord = new id\_verification.FieldValue();
        nameRequiredSelectedRecord.developerName = nameRequiredField.developerName;
        nameRequiredSelectedRecord.value = 'Monica Green';
        selectedRecordFieldValues.add(nameRequiredSelectedRecord);
        requiredVerifiers.add(new id\_verification.Verifier(nameRequiredField.developerName, 'unset'));
        
        id\_verification.VerificationProcessField accountNumberRequiredField = new id\_verification.VerificationProcessField();
        accountNumberRequiredField.dataSourceType = 'External';
        accountNumberRequiredField.dataType = 'Text';
        accountNumberRequiredField.developerName = 'MockAccountNumber';
        accountNumberRequiredField.fieldName = 'AccountNumber';
        accountNumberRequiredField.fieldType = 'requiredVerifier';
        accountNumberRequiredField.label = 'AccountNumber';
        processFields.add(accountNumberRequiredField);
        
        id\_verification.FieldValue accountNumberRequiredSelectedRecord = new id\_verification.FieldValue();
        accountNumberRequiredSelectedRecord.developerName = accountNumberRequiredField.developerName;
        accountNumberRequiredSelectedRecord.value = '923384';
        selectedRecordFieldValues.add(accountNumberRequiredSelectedRecord);
        requiredVerifiers.add(new id\_verification.Verifier(accountNumberRequiredField.developerName, 'unset'));
 
        selectedSearchResult.selectedRecordObject = selectedRecordFieldValues;
        
        for (Integer i =0; i< optionalVerifierProcessFields.size(); i++) {
            processFields.add(optionalVerifierProcessFields.get(i));
            selectedRecordFieldValues.add(selectedPlaceholderOptionalFieldValues.get(i));
            optionalVerifiers.add(new id\_verification.Verifier(optionalVerifierProcessFields.get(i).developerName, 'unset'));
        }
        verifiedResult.requiredVerifiers = requiredVerifiers;
        verifiedResult.optionalVerifiers = optionalVerifiers;
        
        return processFields;
    }
 
    public static List < id\_verification.VerificationProcessField > setOptionalVerifierProcessFields(List < id\_verification.FieldValue > selectedPlaceholderValues) {
        List < id\_verification.VerificationProcessField > optionalVerifierProcessFields = new List < id\_verification.VerificationProcessField >();
 
        id\_verification.VerificationProcessField postalCodeOptionalField = new id\_verification.VerificationProcessField();
        postalCodeOptionalField.dataSourceType = 'External';
        postalCodeOptionalField.dataType = 'Text';
        postalCodeOptionalField.developerName = 'MockPostalCode';
        postalCodeOptionalField.fieldName = 'BillingPostalCode';
        postalCodeOptionalField.fieldType = 'optionalVerifier';
        postalCodeOptionalField.label = 'Zip Code';
        optionalVerifierProcessFields.add(postalCodeOptionalField);
        
        selectedPlaceholderValues.add(new id\_verification.FieldValue(postalCodeOptionalField.developerName, '94117'));
        
        id\_verification.VerificationProcessField birthdateOptionalField = new id\_verification.VerificationProcessField();
        birthdateOptionalField.dataSourceType = 'External';
        birthdateOptionalField.dataType = 'Text';
        birthdateOptionalField.developerName = 'MockBirthdate';
        birthdateOptionalField.fieldName = 'Birthdate';
        birthdateOptionalField.fieldType = 'optionalVerifier';
        birthdateOptionalField.label = 'Date of Birth';
        optionalVerifierProcessFields.add(birthdateOptionalField);
        
        selectedPlaceholderValues.add(new id\_verification.FieldValue(birthdateOptionalField.developerName, '05/18/1986'));
        
        return optionalVerifierProcessFields;
    }
}

The following example tests the implementation:

@isTest
private class MockIdentityVerificationExtTest {
   static testMethod void getSearchResults() {
        MockIdentityVerificationExt mock = new MockIdentityVerificationExt();
        id\_verification.SearchRequest searchRequest= new id\_verification.SearchRequest('Smith',null,null);
        mock.search(searchRequest);
   }
   
   static testMethod void getVerificationContext() {
        MockIdentityVerificationExt mock = new MockIdentityVerificationExt();
        //To keep it simple here, we are passing null in the paramater & returning a default mock context
        mock.getVerifiers(null);
   }
}