Releases: getyoti/yoti-java-sdk
v3.10.0
Changes
IDV Client
Added
- Ability to fetch Text Extraction task recommendation
- Allow the Brand ID to be set at session creation
- Allow the biometric consent flow to be set at session creation
- Allow expanded document fields to be requested at session creation
- Ability to configure client dark mode options at session creation
- Support for retrieving and deleting tracked devices for a given session
- Helper methods for finding resources that were used in a check
IDV Sandbox Client
Added
- Support for static liveness checks
- Support for configuring a response delay for synchronous checks
v3.9.0
v3.8.0
New Feature
Support of Digital Identity share service
Yoti Digital ID is now being upgraded!
We have a new API that is improving the sharing flow, for both end-users and integrators like you.
- share is now session based (must create a share session on the server, using the SDK)
- share session details (status, progress) can be fetched anytime
- can subscribe to share session events notification
- share data can be retrieved anytime until expiration of the receipt
This comes as a replacement of the Dynamic Sharing and Profile services combination.
⚠️ You must use the new browser client to fully integrate this new version with your front-end
📖 How to
Here are some snippets of basic use cases.
Create a Digital Identity Client:
DigitalIdentityClient client = DigitalIdentityClient.builder()
.withClientSdkId(clientSdkId) // Your Yoti Client SDK ID
.withKeyPairSource(pemKey) // The content of your Yoti .pem key
.build();
Create a share session:
Policy policy = Policy.builder()
.withFullName()
.withEmail()
// any other methods supported
.build();
/*
OR with a IdentityProfileRequirements
Map<String, Object> scheme = new HashMap<>();
scheme.put("type", "RTW");
Map<String, Object> identityProfile = new HashMap<>();
identityProfile.put("trust_framework", "UK_TFIDA");
identityProfile.put("scheme", scheme);
.withIdentityProfile(identityProfile)
*/
Map<String, Object> subject = new HashMap<>();
subject.put("subject_id", "this is a new share");
ShareSessionNotification notification = ShareSessionNotification.builder(URI.create("https://service.com/yoti-notifications"))
.withHeader("X-CUSTOM", "custom")
.withMethod("GET")
.withVerifyTls(true)
.build();
ShareSessionRequest shareSessionRequest = ShareSessionRequest.builder()
.withRedirectUri(URI.create("/profile"))
.withPolicy(policy)
.withSubject(subject)
.withNotification(notification)
// .withExtension(ExtensionBuilderByType)
.build();
ShareSession shareSession = client.createShareSession(shareSessionRequest);
// shareSession.getId()
// shareSession.getStatus()
// shareSession.getExpiry()
Get the receipt of a share session:
ShareSession session = client.fetchShareSession(sessionId);
String receiptId = session.getReceiptId();
Receipt receipt = client.fetchShareReceipt(receiptId);
// Checking error
receipt.getError();
// Assuming no error, getting profile
Optional<HumanProfile> profile = receipt.getProfile();
// profile.getSelfie()
// profile.getFullName()
// profile.getFamilyName()
// profile.getGivenNames()
// profile.getDateOfBirth()
// profile.getGender()
// profile.getNationality()
// profile.getPhoneNumber()
// profile.getEmailAddress()
// profile.getPostalAddress()
// profile.getStructuredPostalAddress()
// profile.getDocumentDetails()
// profile.getDocumentImages()
// profile.getIdentityProfileReport()
Demo
Share v2 demo available, when running the Java Spring Boot example project, at https://localhost:8443/v2/digital-identity-share
v3.7.0
Added
- Support for non-latin documents
- Identity Profile Preview
- Applicant Profile resource from a relying business
- Applicant Profile Resources on GET /session
- Import Token support
- Allow Relying Business to configure user price of IBV session
- Support for IBV checks
- Support for Synectics Identity Fraud check
v3.6.0
Added
- Ability to specific attempts configuration for ID Document Text Extraction Tasks
- Ability to allow/disallow non-latin documents for resource requirements at session creation
- Support for Static Liveness Check
- Support for Face Comparison Check
- Ability to allow/disallow expired documents for resource requirements at session creation
v3.5.1
Profile
Demo available, when running the Java Spring Boot example project, at https://localhost:8443/dbs-check
Added
ErrorDetails getter in ActivityFailureException
ErrorDetails exError = ex.errorDetails();
exError.getCode();
exError.getDescription();
Fixed
- typo in DBS check example project when setting subject_id to the subject objet
v3.5.0
Profile
Demo available, when running the Java Spring Boot example project, at https://localhost:8443/dbs-check
Added
- Error code and description is returned from the failed share in the following format
Error[code='REASON_CODE', description='REASON_DESCRIPTION']
v3.4.0
Profile
Demo available, when running the Java Spring Boot example project, at https://localhost:8443/dbs-check
Added
- Specify Identity Profile using RequirementsWithIdentityProfile() in DynamicPolicyBuilder
identityProfileJson
{
"trust_framework": "UK_TFIDA",
"scheme": {
"type": "DBS",
"objective": "STANDARD"
}
}
DynamicPolicy dynamicPolicy = DynamicPolicy.builder()
.withIdentityProfile(<identityProfileJson>)
.build();
- Specify subject_id, when used with WithIdentityProfile(), using WithSubject() in DynamicScenarioBuilder
DynamicScenario dynamicScenario = DynamicScenario.builder()
.withSubject(<subjectId>)
.withPolicy(dynamicPolicy)
.build();
ShareUrlResult shareUrl = yotiClient.createShareUrl(dynamicScenario);
- Retrieve the Identity Profile Report using GetIdentityProfileReport() in HumanProfile
YotiClient yotiClient = YotiClient.builder()
.withClientSdkId(<clientSdkId>)
.withKeyPair(<clientKeyPair>)
.build();
HumanProfile profile = yotiClient.getActivityDetails(<sharingToken>).getUserProfile();
Attribute<Map<String, Object>> identityProfileReport = profile.getIdentityProfileReport();
Map<String, Object> valueRepresentation = identityProfileReport.getValue();
valueRepresentation
{
"identity_assertion": {
"current_name": {
"given_names": "JOHN JIM FRED",
"first_name": "JOHN",
"middle_name": "JIM FRED",
"family_name": "FOO",
"full_name": "JOHN JIM FRED FOO"
},
"date_of_birth": "1979-01-01"
},
"verification_report": {
"report_id": "61b99534-116d-4a25-9750-2d708c0fb168",
"timestamp": "2022-01-02T15:04:05Z",
"subject_id": "f0726cb6-97c1-4802-9feb-eb7c6cd07949",
"trust_framework": "UK_TFIDA",
"schemes_compliance":
[
{
"scheme": {
"type": "RTW"
},
"requirements_met": true
}
],
"assurance_process": {
"level_of_assurance": "MEDIUM",
"policy": "GPG45",
"procedure": "M1C",
"assurance":
[
{
"type": "EVIDENCE_STRENGTH",
"classification": "4",
"evidence_links":
[
"41960172-ca91-487c-8bb3-2c547f80fe54"
]
},
{
"type": "EVIDENCE_VALIDITY",
"classification": "3",
"evidence_links":
[
"41960172-ca91-487c-8bb3-2c547f80fe54"
]
},
{
"type": "VERIFICATION",
"classification": "3",
"evidence_links":
[
"41960172-ca91-487c-8bb3-2c547f80fe54",
"fb0880ca-5dd5-4776-badb-17549123c50b"
]
}
]
},
"evidence": {
"documents":
[
{
"evidence_id": "41960172-ca91-487c-8bb3-2c547f80fe54",
"timestamp": "2022-01-02T15:04:05Z",
"document_fields": {
"full_name": "JOHN JIM FRED FOO",
"date_of_birth": "1979-01-01",
"nationality": "GBR",
"given_names": "JOHN JIM FRED",
"family_name": "FOO",
"place_of_birth": "SAMPLETOWN",
"gender": "MALE",
"document_type": "PASSPORT",
"issuing_country": "GBR",
"document_number": "123456789",
"expiration_date": "2030-01-01",
"date_of_issue": "2020-01-01",
"issuing_authority": "HMPO",
"mrz": {
"type": 2,
"line1": "P<GBRFOO<<JOHN<JIM<FRED<<<<<<<<<<<<<<<<<<<<<",
"line2": "1234567892GBR7901018M3001215<<<<<<<<<<<<<<02"
}
},
"passed_checks":
[
{
"check": "CHIP_DIGITAL_SIGNATURE"
},
{
"check": "AUTOMATED_FACE_MATCH"
},
{
"check": "FRAUD_DOCUMENTS_LIST"
}
],
"verifying_org": "Yoti Ltd.",
"user_activity_ids":
[
"d4764f67-2992-4a69-9ff4-55b0e77cb3d0"
],
"document_images_attribute_id": "f253c8ab-f07b-4aeb-9dd0-50e670c7ebaf"
}
],
"face": {
"evidence_id": "fb0880ca-5dd5-4776-badb-17549123c50b",
"initial_liveness": {
"type": "ACTIVE",
"timestamp": "2022-01-02T15:04:05Z"
},
"verifying_org": "Yoti Ltd.",
"user_activity_ids":
[
"a8e41187-7f5b-4e83-83d5-dc471452f1a8"
],
"selfie_attribute_id": "cc507f84-f1aa-476a-877b-850e949e0fc8"
}
}
},
"authentication_report": {
"report_id": "d7202b65-657e-47a7-9679-7596db617b8c",
"timestamp": "2022-01-02T15:04:05Z",
"policy": "GPG44",
"level": "MEDIUM"
},
"proof": "<signature provided here>"
}
- Retrieve Attribute by id using GetAttributeById() in HumanProfile
Attribute<Object> selfie = profile.getAttributeById(<attribute_id_1>);
Attribute<Object> documentImage = profile.getAttributeById(<attribute_id_2>);
IDV
Added
- Create session with Identity profile using WithIdentityProfileRequirements() and WithSubject() in SessionSpecificationBuilder
DocScanClient docScanClient = DocScanClient.builder()
.withClientSdkId(<clientSdkId>)
.withKeyPair(<clientKeyPair>)
.build();
subjectJson
{
"subject_id": "<sessionId>"
}
identityProfileRequirementsJson
{
"trust_framework": "UK_TFIDA",
"scheme": {
"type": "DBS",
"objective": "STANDARD"
}
}
SessionSpec sessionSpec = SessionSpec.builder()
.withSubject(<subjectJson>)IdentityProfile to IDV
.withIdentityProfile(<identityProfileRequirementsJson>)
.build();
CreateSessionResult session = docScanClient.createSession(sessionSpec);
String sessionId = session.getSessionId();
- Retrieve session identity profile report using GetIdentityProfile() in GetSessionResult
GetSessionResult sessionResult = docScanClient.getSession(sessionId);
IdentityProfileResponse identityProfile = sessionResult.getIdentityProfile();
String subjectId = identityProfile.getSubjectId();
String result = identityProfile.getResult();
String failureReasonCode = identityProfile.getFailureReason().getReasonCode();
Object identityProfileReport = identityProfile.getIdentityProfileReport();
identityProfileReportJson
{
"trust_framework": "UK_TFIDA",
"schemes_compliance":
[
{
"scheme": {
"type": "DBS",
"objective": "STANDARD"
},
"requirements_met": true,
"requirements_not_met_info": "some string here"
}
],
"media": {
"id": "c69ff2db-6caf-4e74-8386-037711bbc8d7",
"type": "IMAGE",
"created": "2022-03-29T11:39:24Z",
"last_updated": "2022-03-29T11:39:24Z"
}
}
v3.3.0
Changes
Added
- Ability to request a session be performed In-Branch (IBV)
- Support for managing instructions flow as Relying Business for IBV
- Setting the instructions
- Retrieving currently set instructions
- Fetching the contact profile set by the end user
- Retrieving the generated instructions PDF
- Triggering the email notification
- Ability to create Face Capture resources, and upload images to created resources
- Ability to fetch session configuration
- Flag for enabling/disabling mobile handoff
- Ability to request an Issuing Authority sub-check for a Document Authenticity check
- Ability to set the session deadline using a ZonedDateTime
- This is instead of using the current client session token expiry (set in seconds)