Supplementary documents

AI Tools

Yoti offers the ability to request additional documents to enhance the verification of the user. You can request this on its own as part of a new session or include in your current session.

Please see our document comparison feature to complement the supplementary documents.

Good to know
Yoti will only compare the NAME of the users between the documents uploaded.

Yoti supports the ability to upload the following documents:

Document type

Validity

Utility bill

From the past three months.

Council tax bill

From the past 12 months.

Phone bill

From the past three months.

Bank statement

From the past three months.

const supplementaryDocumentObjective = new ProofOfAddressObjectiveBuilder().build(); const supplementaryDocument = new RequiredSupplementaryDocumentBuilder() .withObjective(supplementaryDocumentObjective) .build(); const sessionSpec = new SessionSpecificationBuilder() // ... .withRequiredDocument(supplementaryDocument) // ... .build();
ProofOfAddressObjective proofOfAddressObjective = ProofOfAddressObjective .builder() .build(); RequiredSupplementaryDocument supplementaryDocument = RequiredSupplementaryDocument .builder() .withObjective(proofOfAddressObjective) .build(); SessionSpec sessionSpec = SessionSpec.builder() // ... .withRequiredDocument(supplementaryDocument) // ... .build();
<?php $supplementaryDocumentObjective = (new ProofOfAddressObjectiveBuilder())->build(); $supplementaryDocument = (new RequiredSupplementaryDocumentBuilder()) ->withObjective($supplementaryDocumentObjective) ->build(); $sessionSpec = (new SessionSpecificationBuilder()) // ... ->withRequiredDocument($supplementaryDocument) // ... ->build();
var supplementaryDocumentObjective = new ProofOfAddressObjectiveBuilder().Build(); var supplementaryDocument = new RequiredSupplementaryDocumentBuilder() .WithObjective(supplementaryDocumentObjective) .Build(); var sessionSpec = new SessionSpecificationBuilder() // ... .WithRequiredDocument(supplementaryDocument) // ... .Build();
proofOfAddressObjective, err := objective.NewProofOfAddressObjectiveBuilder().Build() supplementaryDoc, err := filter.NewRequiredSupplementaryDocumentBuilder(). WithObjective(proofOfAddressObjective). Build() sessionSpec, err = create.NewSessionSpecificationBuilder(). //.. WithRequiredDocument(supplementaryDoc). //.. Build()
{ "required_documents": [ { "type": "SUPPLEMENTARY_DOCUMENT", "objective": { "type": "PROOF_OF_ADDRESS" } } ] }

Text Extraction

A request to obtain the data printed visually on a document, in structured form. If machine data extraction is not successful, there is an option (selected at session creation) to fall back to manual data extraction. This generates a ‘text data check’ automatically.

const supplementaryDocumentDataExtraction = new RequestedSupplementaryDocTextExtractionTaskBuilder() .withManualCheckFallback() .build(); const sessionSpec = new SessionSpecificationBuilder() // ... .withRequestedTask(supplementaryDocumentDataExtraction) // ... .build();
RequestedSupplementaryDocTextExtractionTask supplementaryDocumentDataExtraction = RequestedSupplementaryDocTextExtractionTask .builder() .withManualCheckFallback() .build(); SessionSpec sessionSpec = SessionSpec.builder() // ... .withRequestedTask(supplementaryDocumentDataExtraction) // ... .build();
<?php $supplementaryDocumentDataExtraction = (new RequestedSupplementaryDocTextExtractionTaskBuilder()) ->withManualCheckFallback() ->build(); $sessionSpec = (new SessionSpecificationBuilder()) // ... ->withRequestedTask($supplementaryDocumentDataExtraction) // ... ->build();
var supplementaryDocumentDataExtraction = new RequestedSupplementaryDocTextExtractionTaskBuilder() .WithManualCheckFallback() .Build(); var sessionSpec = new SessionSpecificationBuilder() // ... .WithRequestedTask(supplementaryDocumentDataExtraction) // ... .Build();
var supplementaryDocTextExtractionTask *task.RequestedSupplementaryDocTextExtractionTask supplementaryDocTextExtractionTask, err = task.NewRequestedSupplementaryDocTextExtractionTaskBuilder(). WithManualCheckFallback(). Build() sessionSpec, err = create.NewSessionSpecificationBuilder(). //.. WithRequestedTask(supplementaryDocTextExtractionTask). //.. Build()
{ "requested_tasks": [ { "type": "SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION", "config": { "manual_check": "FALLBACK" } } ] }

Manual Data extraction

Description

withManualCheckFallback

This will initiate manual data extraction only if the automatic extraction fails. We strongly recommend this option.

withManualCheckNever

If the ID fails on automatic extraction, Yoti will not attempt manual extraction and will return a failure in the report.

withManualCheckAlways

The document is always referred for manual review at Yoti's Security Centre, regardless of whether machine data extraction has succeeded or failed.

Filtering documents

You can filter documents by country or by document type.

const supplementaryDocument = new RequiredSupplementaryDocumentBuilder() .withObjective(supplementaryDocumentObjective) .withCountryCodes(["GBR","USA"]) .withDocumentTypes(["UTILITY_BILL"]) .build();
RequiredSupplementaryDocument supplementaryDocument = RequiredSupplementaryDocument .builder() .withObjective(proofOfAddressObjective) .withCountryCodes(["GBR","USA"]) .withDocumentTypes(["UTILITY_BILL"]) .build();
$supplementaryDocument = (new RequiredSupplementaryDocumentBuilder()) ->withObjective($supplementaryDocumentObjective) ->withCountryCodes(["GBR","USA"]) ->withDocumentTypes(["UTILITY_BILL"]) ->build();
supplementaryDoc, err := filter.NewRequiredSupplementaryDocumentBuilder(). WithObjective(proofOfAddressObjective). WithCountryCodes([]string{"GBR"}). WithDocumentTypes([]string{"PASSPORT"}). Build()
{ "required_documents": [ { "type": "SUPPLEMENTARY_DOCUMENT", "country_codes": [ "GBR", "USA" ], "document_types": [ "UTILITY_BILL" ], "objective": { "type": "PROOF_OF_ADDRESS" } } ] }

Document comparison check

For comparing supplementary documents to any ID documents from the user please see below for the configuration:

const documentComparisonCheck = new RequestedIdDocumentComparisonCheckBuilder().build(); const sessionSpec = new SessionSpecificationBuilder() // ... .withRequestedCheck(documentComparisonCheck) // ... .build();
RequestedIdDocumentComparisonCheck requestedIdDocumentComparisonCheck = RequestedIdDocumentComparisonCheck.builder().build(); SessionSpec sessionSpec = SessionSpec.builder() // ... .withRequestedCheck(requestedIdDocumentComparisonCheck) // ... .build();
<?php $documentComparisonCheck = (new RequestedIdDocumentComparisonCheckBuilder())->build(); $sessionSpec = (new SessionSpecificationBuilder()) // ... ->withRequiredDocument($documentComparisonCheck) // ... ->build();
var sessionSpec = new SessionSpecificationBuilder() // ... .WithRequestedCheck( new RequestedThirdPartyIdentityCheckBuilder() .Build()) // ... .Build();
var idDocsComparisonCheck *check.RequestedIDDocumentComparisonCheck idDocsComparisonCheck, err = check.NewRequestedIDDocumentComparisonCheckBuilder(). Build() sessionSpec, err = create.NewSessionSpecificationBuilder(). //.. WithRequestedCheckidDocsComparisonCheck). //.. Build()
{ "requested_checks": [ { "type": "ID_DOCUMENT_COMPARISON", "config": {} } ] }

Yoti will check and compare the following user data and provide you with a sub check result:

  • Name