Identity Verification
API reference for Identity Verification endpoints and webhooks
For how-to guidance, see the Identity Verification documentation.
| Endpoints | |
|---|---|
/identity_verification/create | Create a new identity verification |
/identity_verification/get | Retrieve a previously created identity verification |
/identity_verification/list | Filter and list identity verifications |
/identity_verification/retry | Allow a user to retry an identity verification |
| See also | |
|---|---|
/dashboard_user/get | Retrieve information about a dashboard user |
/dashboard_user/list | List dashboard users |
| Webhooks | |
|---|---|
STATUS_UPDATED | The status of an identity verification has been updated |
STEP_UPDATED | A step in the identity verification process has been completed |
RETRIED | An identity verification has been retried |
Endpoints
/identity_verification/create
Create a new Identity Verification
Create a new Identity Verification for the user specified by the client_user_id and/or user_id field. At least one of these two fields must be provided. The requirements and behavior of the verification are determined by the template_id provided. If user_id is provided, there must be an associated user otherwise an error will be returned.
If you don't know whether an active Identity Verification exists for a given client_user_id and/or user_id, you can specify "is_idempotent": true in the request body. With idempotency enabled, a new Identity Verification will only be created if one does not already exist for the associated client_user_id and/or user_id, and template_id. If an Identity Verification is found, it will be returned unmodified with a 200 OK HTTP status code.
If user_id is not provided, you can also use this endpoint to supply information you already have collected about the user; if any of these fields are specified, the screens prompting the user to enter them will be skipped during the Link flow. If user_id is provided, user information can not be included in the request body. Please use the /user/update endpoint to update user data instead.
Request fields
client_user_id/link/token/create client_user_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client_user_id.user_iduser_id generated by Plaid for the client-provided client_user_id. This field is currently in beta.is_shareabletemplate_idgave_consentIf
gave_consent is set to true, the accept_tos step will be marked as skipped and the end user's session will start at the next step requirement.false userEach of the following identity fields are optional:
email_addressphone_numberdate_of_birthnameaddressid_numberSpecifically, these fields are optional in that they can either be fully provided (satisfying every required field in their subschema) or omitted from the request entirely by not providing the key or value. Providing these fields via the API will result in Link skipping the data collection process for the associated user. All verification steps enabled in the associated Identity Verification Template will still be run. Verification steps will either be run immediately, or once the user completes the
accept_tos step, depending on the value provided to the gave_consent field.
If you are not using the shareable URL feature, you can optionally provide these fields via /link/token/create instead; both /identity_verification/create and /link/token/create are valid ways to provide this information. Note that if you provide a non-null user data object via /identity_verification/create, any user data fields entered via /link/token/create for the same client_user_id will be ignored when prefilling Link.email_addressemail phone_numberdate_of_birthdate namegiven_namefamily_nameaddressFor more context on this field, see Input Validation by Country.
streetstreet2cityregioncountry field.postal_codecountryid_numbernull. Otherwise, both fields are guaranteed to be filled.valuetypear_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_idclient_user_iduser.client_user_id is deprecated. Please provide client_user_id at the root level instead.client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.is_idempotentclient_user_id and template_id.
If idempotency is enabled, Plaid will return the existing Identity Verification. If idempotency is disabled, Plaid will reject the request with a 400 Bad Request status code if an Identity Verification already exists for the supplied client_user_id and template_id.const request: IdentityVerificationCreateRequest = {
client_user_id: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d',
is_shareable: true,
template_id: 'idvtmp_52xR9LKo77r1Np',
gave_consent: true,
user: {
email_address: 'acharleston@email.com',
phone_number: '+12345678909',
date_of_birth: '1975-01-18',
name: {
given_name: 'Anna',
family_name: 'Charleston',
},
address: {
street: '100 Market Street',
street2: 'Apt 1A',
city: 'San Francisco',
region: 'CA',
postal_code: '94103',
country: 'US',
},
id_number: {
value: '123456789',
type: 'us_ssn',
},
},
};
try {
const response = await client.identityVerificationCreate(request);
} catch (error) {
// handle error
}
Response fields
idclient_user_id/link/token/create client_user_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client_user_id.created_atdate-time completed_atdate-time previous_attempt_idshareable_urltemplateuserphone_numberdate_of_birthdate ip_addressemail_addressemail namegiven_namefamily_nameaddressAddresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
streetstreet2cityregioncountry field.postal_codecountryid_numbernull. Otherwise, both fields are guaranteed to be filled.valuetypear_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_idstatusactive - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed.success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification templatefailed - The user failed one or more steps in the session and was told to contact support.expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future.canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.active, success, failed, expired, canceled, pending_reviewstepsactive - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point.success - The Identity Verification attempt has completed this step.failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session.waiting_for_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback.not_applicable - This step will not be run for this session.skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped.expired - This step had not yet been completed when the Identity Verification attempt as a whole expired.canceled - The Identity Verification attempt was canceled before the user completed this step.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.manually_approved - The step was manually overridden to pass by a team member in the dashboard.manually_rejected - The step was manually overridden to fail by a team member in the dashboard.accept_tossuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedverify_smssuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedkyc_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedselfie_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedwatchlist_screeningsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedrisk_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationdocumentary_verification step. This field will be null unless steps.documentary_verification has reached a terminal state of either success or failed.statusdocumentary_verification step. This field will always have the same value as steps.documentary_verification.documentsdocumentary_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type.Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within
documents. If the overall documentary_verification is failed, the user has exhausted their retry attempts.statusdocumentary_verification.status that summarizes the verification outcome from one or more documents.success, failed, manually_approvedattemptattempt field begins with 1 and increments with each subsequent document upload.imagesGET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires.original_frontoriginal_backcropped_frontcropped_backfaceextracted_dataid_numbercategorydrivers_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privilegesid_card - A general national identification card, distinct from driver's licenses as it only establishes identitypassport - A travel passport issued by the associated country for one of its citizensresidence_permit_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside thereresident_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside therevisa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 monthsNote: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say
passportdrivers_license, id_card, passport, residence_permit_card, resident_card, visaexpiration_datedate issue_datedate issuing_countryissuing_regioncountry field.date_of_birthdate addressstreet, city, country. If any are missing or unable to be extracted, the address will be null.region, and postal_code may be null based on the addressing system. For example:Addresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document.
streetcityregioncountry field.postal_codecountrynamegiven_namefamily_nameanalysisanalysis object should help clarify why the document was rejected.authenticityFor example, most identity documents have formatting rules like the following:
The image of the person's face must have a certain contrast in order to highlight skin tone
The subject in the document's image must remove eye glasses and pose in a certain way
The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules
Security features like watermarks and background patterns must be present
So a
match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document.match, partial_match, no_match, no_dataimage_qualityFor example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks.
Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality.
high, medium, lowextracted_datanamematch, partial_match, no_match, no_datadate_of_birthmatch, partial_match, no_match, no_dataexpiration_dateNote: In the case where an expiration date is not present on the document or failed to be extracted, this value will be
no_data.not_expired, expired, no_dataissuing_countryNote: You can configure whether a
no_match on issuing_country fails the documentary_verification by editing your Plaid Template.match, no_matchaamva_verificationNote: This field is only available for U.S. driver's licenses issued by participating states.
is_verifiedid_numbermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_issue_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_expiration_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datastreetmatch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datacitymatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datapostal_codematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datadate_of_birthmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datagendermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataheightmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataeye_colormatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datafirst_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datamiddle_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datalast_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_dataredacted_atdate-time selfie_checkselfie_check step. This field will be null unless steps.selfie_check has reached a terminal state of either success or failed.statusselfie_check step. This field will always have the same value as steps.selfie_check.success, failedselfiesselfie_check step. Each entry represents one user submission.statusselfie_check.status that summarizes the verification outcome from one or more selfies.success, failedattemptattempt field begins with 1 and increments with each subsequent selfie upload.analysisanalysis object should help clarify why the selfie was rejected.document_comparisonmatch, no_match, no_inputliveness_checksuccess, failedkyc_checkkyc_check (Data Source Verification) step. This field will be null unless steps.kyc_check has reached a terminal state of either success or failed.statuskyc_check step. This field will always have the same value as steps.kyc_check.addressaddress field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputpo_boxyes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no_data when Plaid was not able to determine if the address is a P.O. box.yes, no, no_datatypeNote: This value will be
no_data when Plaid does not have sufficient data to determine the address's use.residential, commercial, no_datanamename field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputdate_of_birthdate_of_birth field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputid_numberid_number field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputphone_numberphone field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputarea_codematch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputrisk_checkrisk_check step.statussuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedbehaviorbehavior attributes of risk check, when available.user_interactionsgenuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely.neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome.risky indicates the user has low familiarity with the data they are providing, and that fraud is likely.no_data indicates there is not sufficient information to give an accurate signal.genuine, neutral, risky, no_datafraud_ring_detectedyes indicates that fraud ring activity was detected.no indicates that fraud ring activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_databot_detectedyes indicates that automated activity was detected.no indicates that automated activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_dataemailemail attributes of risk check.is_deliverableyes, no, no_databreach_countfirst_breached_atdate last_breached_atdate domain_registered_atdate domain_is_free _provideryes, no, no_datadomain_is_customyes, no, no_datadomain_is_disposableyes, no, no_datatop_level_domain_is _suspiciousyes, no, no_datalinked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohophonephone attributes of risk check.linked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohodevicesdevice attributes of risk check.ip_proxy_typenone_detected indicates the user is not on a detectable proxy network.tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network).vpn indicates the user is on a VPN (Virtual Private Network)web_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information.public_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance.none_detected, tor, vpn, web_proxy, public_proxyip_spam_list_countip_timezone_offsetidentity_abuse_signalsidentity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected.synthetic_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity.scorestolen_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity.scoreverify_smsverify_sms step.statusverify_sms step. This field will always have the same value as steps.verify_sms.success, failedverificationsverify_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications.statuspending, success, failed, canceledattemptphone_numberdelivery_attempt_countsolve_attempt_countinitially_sent_atdate-time last_sent_atdate-time redacted_atdate-time watchlist_screening_idbeacon_user_iduser_iduser_id generated by Plaid for the client-provided client_user_id. This field is currently in beta.redacted_atdate-time latest_scored_protect _eventevent_idtrust_indexfraud_attributesrequest_id{
"id": "idv_52xR9LKo77r1Np",
"client_user_id": "your-db-id-3b24110",
"created_at": "2020-07-24T03:26:02Z",
"completed_at": "2020-07-24T03:26:02Z",
"previous_attempt_id": "idv_42cF1MNo42r9Xj",
"shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f",
"template": {
"id": "idvtmp_4FrXJvfQU3zGUR",
"version": 2
},
"user": {
"phone_number": "+12345678909",
"date_of_birth": "1990-05-29",
"ip_address": "192.0.2.42",
"email_address": "user@example.com",
"name": {
"given_name": "Leslie",
"family_name": "Knope"
},
"address": {
"street": "123 Main St.",
"street2": "Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"id_number": {
"value": "123456789",
"type": "us_ssn"
}
},
"status": "success",
"steps": {
"accept_tos": "success",
"verify_sms": "success",
"kyc_check": "success",
"documentary_verification": "success",
"selfie_check": "success",
"watchlist_screening": "success",
"risk_check": "success"
},
"documentary_verification": {
"status": "success",
"documents": [
{
"status": "success",
"attempt": 1,
"images": {
"original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg",
"original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg",
"cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg",
"cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg",
"face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg"
},
"extracted_data": {
"id_number": "AB123456",
"category": "drivers_license",
"expiration_date": "2030-05-29",
"issue_date": "2020-05-29",
"issuing_country": "US",
"issuing_region": "IN",
"date_of_birth": "1990-05-29",
"address": {
"street": "123 Main St. Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"name": {
"given_name": "Leslie",
"family_name": "Knope"
}
},
"analysis": {
"authenticity": "match",
"image_quality": "high",
"extracted_data": {
"name": "match",
"date_of_birth": "match",
"expiration_date": "not_expired",
"issuing_country": "match"
},
"aamva_verification": {
"is_verified": true,
"id_number": "match",
"id_issue_date": "match",
"id_expiration_date": "match",
"street": "match",
"city": "match",
"postal_code": "match",
"date_of_birth": "match",
"gender": "match",
"height": "match",
"eye_color": "match",
"first_name": "match",
"middle_name": "match",
"last_name": "match"
}
},
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"selfie_check": {
"status": "success",
"selfies": [
{
"status": "success",
"attempt": 1,
"capture": {
"image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg",
"video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm"
},
"analysis": {
"document_comparison": "match",
"liveness_check": "success"
}
}
]
},
"kyc_check": {
"status": "success",
"address": {
"summary": "match",
"po_box": "yes",
"type": "residential"
},
"name": {
"summary": "match"
},
"date_of_birth": {
"summary": "match"
},
"id_number": {
"summary": "match"
},
"phone_number": {
"summary": "match",
"area_code": "match"
}
},
"risk_check": {
"status": "success",
"behavior": {
"user_interactions": "risky",
"fraud_ring_detected": "yes",
"bot_detected": "yes"
},
"email": {
"is_deliverable": "yes",
"breach_count": 1,
"first_breached_at": "1990-05-29",
"last_breached_at": "1990-05-29",
"domain_registered_at": "1990-05-29",
"domain_is_free_provider": "yes",
"domain_is_custom": "yes",
"domain_is_disposable": "yes",
"top_level_domain_is_suspicious": "yes",
"linked_services": [
"apple"
]
},
"phone": {
"linked_services": [
"apple"
]
},
"devices": [
{
"ip_proxy_type": "none_detected",
"ip_spam_list_count": 1,
"ip_timezone_offset": "+06:00:00"
}
],
"identity_abuse_signals": {
"synthetic_identity": {
"score": 0
},
"stolen_identity": {
"score": 0
}
}
},
"verify_sms": {
"status": "success",
"verifications": [
{
"status": "success",
"attempt": 1,
"phone_number": "+12345678909",
"delivery_attempt_count": 1,
"solve_attempt_count": 1,
"initially_sent_at": "2020-07-24T03:26:02Z",
"last_sent_at": "2020-07-24T03:26:02Z",
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"watchlist_screening_id": "scr_52xR9LKo77r1Np",
"beacon_user_id": "becusr_42cF1MNo42r9Xj",
"user_id": "usr_dddAs9ewdcDQQQ",
"redacted_at": "2020-07-24T03:26:02Z",
"latest_scored_protect_event": {
"event_id": "ptevt_7AJYTMFxRUgJ",
"timestamp": "2020-07-24T03:26:02Z",
"trust_index": {
"score": 86,
"model": "trust_index.1.0.1",
"subscores": {
"device_and_connection": {
"score": 87
},
"bank_account_insights": {
"score": 85
}
}
},
"fraud_attributes": {
"fraud_attributes": {
"link_session.linked_bank_accounts.user_pi_matches_owners": true,
"link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582,
"session.challenged_with_mfa": false,
"user.bank_accounts.num_of_frozen_or_restricted_accounts": 0,
"user.linked_bank_accounts.num_family_names": 1,
"user.linked_bank_accounts.num_of_connected_banks": 1,
"user.link_sessions.days_since_first_link_session": 150,
"user.pi.email.history_yrs": 7.03,
"user.pi.email.num_social_networks_linked": 12,
"user.pi.ssn.user_likely_has_better_ssn": false
}
}
},
"request_id": "saKrIBuEB9qJZng"
}/identity_verification/get
Retrieve Identity Verification
Retrieve a previously created Identity Verification.
Request fields
identity_verification _idsecretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.const request: IdentityVerificationGetRequest = {
identity_verification_id: 'idv_52xR9LKo77r1Np',
};
try {
const response = await plaidClient.identityVerificationGet(request);
} catch (error) {
// handle error
}
Response fields
idclient_user_id/link/token/create client_user_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client_user_id.created_atdate-time completed_atdate-time previous_attempt_idshareable_urltemplateuserphone_numberdate_of_birthdate ip_addressemail_addressemail namegiven_namefamily_nameaddressAddresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
streetstreet2cityregioncountry field.postal_codecountryid_numbernull. Otherwise, both fields are guaranteed to be filled.valuetypear_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_idstatusactive - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed.success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification templatefailed - The user failed one or more steps in the session and was told to contact support.expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future.canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.active, success, failed, expired, canceled, pending_reviewstepsactive - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point.success - The Identity Verification attempt has completed this step.failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session.waiting_for_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback.not_applicable - This step will not be run for this session.skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped.expired - This step had not yet been completed when the Identity Verification attempt as a whole expired.canceled - The Identity Verification attempt was canceled before the user completed this step.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.manually_approved - The step was manually overridden to pass by a team member in the dashboard.manually_rejected - The step was manually overridden to fail by a team member in the dashboard.accept_tossuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedverify_smssuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedkyc_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedselfie_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedwatchlist_screeningsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedrisk_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationdocumentary_verification step. This field will be null unless steps.documentary_verification has reached a terminal state of either success or failed.statusdocumentary_verification step. This field will always have the same value as steps.documentary_verification.documentsdocumentary_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type.Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within
documents. If the overall documentary_verification is failed, the user has exhausted their retry attempts.statusdocumentary_verification.status that summarizes the verification outcome from one or more documents.success, failed, manually_approvedattemptattempt field begins with 1 and increments with each subsequent document upload.imagesGET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires.original_frontoriginal_backcropped_frontcropped_backfaceextracted_dataid_numbercategorydrivers_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privilegesid_card - A general national identification card, distinct from driver's licenses as it only establishes identitypassport - A travel passport issued by the associated country for one of its citizensresidence_permit_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside thereresident_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside therevisa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 monthsNote: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say
passportdrivers_license, id_card, passport, residence_permit_card, resident_card, visaexpiration_datedate issue_datedate issuing_countryissuing_regioncountry field.date_of_birthdate addressstreet, city, country. If any are missing or unable to be extracted, the address will be null.region, and postal_code may be null based on the addressing system. For example:Addresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document.
streetcityregioncountry field.postal_codecountrynamegiven_namefamily_nameanalysisanalysis object should help clarify why the document was rejected.authenticityFor example, most identity documents have formatting rules like the following:
The image of the person's face must have a certain contrast in order to highlight skin tone
The subject in the document's image must remove eye glasses and pose in a certain way
The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules
Security features like watermarks and background patterns must be present
So a
match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document.match, partial_match, no_match, no_dataimage_qualityFor example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks.
Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality.
high, medium, lowextracted_datanamematch, partial_match, no_match, no_datadate_of_birthmatch, partial_match, no_match, no_dataexpiration_dateNote: In the case where an expiration date is not present on the document or failed to be extracted, this value will be
no_data.not_expired, expired, no_dataissuing_countryNote: You can configure whether a
no_match on issuing_country fails the documentary_verification by editing your Plaid Template.match, no_matchaamva_verificationNote: This field is only available for U.S. driver's licenses issued by participating states.
is_verifiedid_numbermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_issue_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_expiration_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datastreetmatch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datacitymatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datapostal_codematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datadate_of_birthmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datagendermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataheightmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataeye_colormatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datafirst_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datamiddle_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datalast_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_dataredacted_atdate-time selfie_checkselfie_check step. This field will be null unless steps.selfie_check has reached a terminal state of either success or failed.statusselfie_check step. This field will always have the same value as steps.selfie_check.success, failedselfiesselfie_check step. Each entry represents one user submission.statusselfie_check.status that summarizes the verification outcome from one or more selfies.success, failedattemptattempt field begins with 1 and increments with each subsequent selfie upload.analysisanalysis object should help clarify why the selfie was rejected.document_comparisonmatch, no_match, no_inputliveness_checksuccess, failedkyc_checkkyc_check (Data Source Verification) step. This field will be null unless steps.kyc_check has reached a terminal state of either success or failed.statuskyc_check step. This field will always have the same value as steps.kyc_check.addressaddress field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputpo_boxyes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no_data when Plaid was not able to determine if the address is a P.O. box.yes, no, no_datatypeNote: This value will be
no_data when Plaid does not have sufficient data to determine the address's use.residential, commercial, no_datanamename field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputdate_of_birthdate_of_birth field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputid_numberid_number field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputphone_numberphone field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputarea_codematch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputrisk_checkrisk_check step.statussuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedbehaviorbehavior attributes of risk check, when available.user_interactionsgenuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely.neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome.risky indicates the user has low familiarity with the data they are providing, and that fraud is likely.no_data indicates there is not sufficient information to give an accurate signal.genuine, neutral, risky, no_datafraud_ring_detectedyes indicates that fraud ring activity was detected.no indicates that fraud ring activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_databot_detectedyes indicates that automated activity was detected.no indicates that automated activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_dataemailemail attributes of risk check.is_deliverableyes, no, no_databreach_countfirst_breached_atdate last_breached_atdate domain_registered_atdate domain_is_free _provideryes, no, no_datadomain_is_customyes, no, no_datadomain_is_disposableyes, no, no_datatop_level_domain_is _suspiciousyes, no, no_datalinked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohophonephone attributes of risk check.linked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohodevicesdevice attributes of risk check.ip_proxy_typenone_detected indicates the user is not on a detectable proxy network.tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network).vpn indicates the user is on a VPN (Virtual Private Network)web_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information.public_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance.none_detected, tor, vpn, web_proxy, public_proxyip_spam_list_countip_timezone_offsetidentity_abuse_signalsidentity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected.synthetic_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity.scorestolen_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity.scoreverify_smsverify_sms step.statusverify_sms step. This field will always have the same value as steps.verify_sms.success, failedverificationsverify_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications.statuspending, success, failed, canceledattemptphone_numberdelivery_attempt_countsolve_attempt_countinitially_sent_atdate-time last_sent_atdate-time redacted_atdate-time watchlist_screening_idbeacon_user_iduser_iduser_id generated by Plaid for the client-provided client_user_id. This field is currently in beta.redacted_atdate-time latest_scored_protect _eventevent_idtrust_indexfraud_attributesrequest_id{
"id": "idv_52xR9LKo77r1Np",
"client_user_id": "your-db-id-3b24110",
"created_at": "2020-07-24T03:26:02Z",
"completed_at": "2020-07-24T03:26:02Z",
"previous_attempt_id": "idv_42cF1MNo42r9Xj",
"shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f",
"template": {
"id": "idvtmp_4FrXJvfQU3zGUR",
"version": 2
},
"user": {
"phone_number": "+12345678909",
"date_of_birth": "1990-05-29",
"ip_address": "192.0.2.42",
"email_address": "user@example.com",
"name": {
"given_name": "Leslie",
"family_name": "Knope"
},
"address": {
"street": "123 Main St.",
"street2": "Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"id_number": {
"value": "123456789",
"type": "us_ssn"
}
},
"status": "success",
"steps": {
"accept_tos": "success",
"verify_sms": "success",
"kyc_check": "success",
"documentary_verification": "success",
"selfie_check": "success",
"watchlist_screening": "success",
"risk_check": "success"
},
"documentary_verification": {
"status": "success",
"documents": [
{
"status": "success",
"attempt": 1,
"images": {
"original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg",
"original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg",
"cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg",
"cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg",
"face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg"
},
"extracted_data": {
"id_number": "AB123456",
"category": "drivers_license",
"expiration_date": "2030-05-29",
"issue_date": "2020-05-29",
"issuing_country": "US",
"issuing_region": "IN",
"date_of_birth": "1990-05-29",
"address": {
"street": "123 Main St. Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"name": {
"given_name": "Leslie",
"family_name": "Knope"
}
},
"analysis": {
"authenticity": "match",
"image_quality": "high",
"extracted_data": {
"name": "match",
"date_of_birth": "match",
"expiration_date": "not_expired",
"issuing_country": "match"
},
"aamva_verification": {
"is_verified": true,
"id_number": "match",
"id_issue_date": "match",
"id_expiration_date": "match",
"street": "match",
"city": "match",
"postal_code": "match",
"date_of_birth": "match",
"gender": "match",
"height": "match",
"eye_color": "match",
"first_name": "match",
"middle_name": "match",
"last_name": "match"
}
},
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"selfie_check": {
"status": "success",
"selfies": [
{
"status": "success",
"attempt": 1,
"capture": {
"image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg",
"video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm"
},
"analysis": {
"document_comparison": "match",
"liveness_check": "success"
}
}
]
},
"kyc_check": {
"status": "success",
"address": {
"summary": "match",
"po_box": "yes",
"type": "residential"
},
"name": {
"summary": "match"
},
"date_of_birth": {
"summary": "match"
},
"id_number": {
"summary": "match"
},
"phone_number": {
"summary": "match",
"area_code": "match"
}
},
"risk_check": {
"status": "success",
"behavior": {
"user_interactions": "risky",
"fraud_ring_detected": "yes",
"bot_detected": "yes"
},
"email": {
"is_deliverable": "yes",
"breach_count": 1,
"first_breached_at": "1990-05-29",
"last_breached_at": "1990-05-29",
"domain_registered_at": "1990-05-29",
"domain_is_free_provider": "yes",
"domain_is_custom": "yes",
"domain_is_disposable": "yes",
"top_level_domain_is_suspicious": "yes",
"linked_services": [
"apple"
]
},
"phone": {
"linked_services": [
"apple"
]
},
"devices": [
{
"ip_proxy_type": "none_detected",
"ip_spam_list_count": 1,
"ip_timezone_offset": "+06:00:00"
}
],
"identity_abuse_signals": {
"synthetic_identity": {
"score": 0
},
"stolen_identity": {
"score": 0
}
}
},
"verify_sms": {
"status": "success",
"verifications": [
{
"status": "success",
"attempt": 1,
"phone_number": "+12345678909",
"delivery_attempt_count": 1,
"solve_attempt_count": 1,
"initially_sent_at": "2020-07-24T03:26:02Z",
"last_sent_at": "2020-07-24T03:26:02Z",
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"watchlist_screening_id": "scr_52xR9LKo77r1Np",
"beacon_user_id": "becusr_42cF1MNo42r9Xj",
"user_id": "usr_dddAs9ewdcDQQQ",
"redacted_at": "2020-07-24T03:26:02Z",
"latest_scored_protect_event": {
"event_id": "ptevt_7AJYTMFxRUgJ",
"timestamp": "2020-07-24T03:26:02Z",
"trust_index": {
"score": 86,
"model": "trust_index.1.0.1",
"subscores": {
"device_and_connection": {
"score": 87
},
"bank_account_insights": {
"score": 85
}
}
},
"fraud_attributes": {
"fraud_attributes": {
"link_session.linked_bank_accounts.user_pi_matches_owners": true,
"link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582,
"session.challenged_with_mfa": false,
"user.bank_accounts.num_of_frozen_or_restricted_accounts": 0,
"user.linked_bank_accounts.num_family_names": 1,
"user.linked_bank_accounts.num_of_connected_banks": 1,
"user.link_sessions.days_since_first_link_session": 150,
"user.pi.email.history_yrs": 7.03,
"user.pi.email.num_social_networks_linked": 12,
"user.pi.ssn.user_likely_has_better_ssn": false
}
}
},
"request_id": "saKrIBuEB9qJZng"
}/identity_verification/list
List Identity Verifications
Filter and list Identity Verifications created by your account
Request fields
secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.template_idclient_user_id/link/token/create client_user_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client_user_id.user_iduser_id generated by Plaid for the client-provided client_user_id. This field is currently in beta. If both client_user_id and user_id are provided, client_user_id must match the value for the returned user.cursorconst request: ListIdentityVerificationRequest = {
template_id: 'idvtmp_52xR9LKo77r1Np',
client_user_id: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d',
};
try {
const response = await plaidClient.identityVerificationList(request);
} catch (error) {
// handle error
}
Response fields
identity_verificationsidclient_user_id/link/token/create client_user_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client_user_id.created_atdate-time completed_atdate-time previous_attempt_idshareable_urltemplateuserphone_numberdate_of_birthdate ip_addressemail_addressemail namegiven_namefamily_nameaddressAddresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
streetstreet2cityregioncountry field.postal_codecountryid_numbernull. Otherwise, both fields are guaranteed to be filled.valuetypear_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_idstatusactive - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed.success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification templatefailed - The user failed one or more steps in the session and was told to contact support.expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future.canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.active, success, failed, expired, canceled, pending_reviewstepsactive - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point.success - The Identity Verification attempt has completed this step.failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session.waiting_for_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback.not_applicable - This step will not be run for this session.skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped.expired - This step had not yet been completed when the Identity Verification attempt as a whole expired.canceled - The Identity Verification attempt was canceled before the user completed this step.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.manually_approved - The step was manually overridden to pass by a team member in the dashboard.manually_rejected - The step was manually overridden to fail by a team member in the dashboard.accept_tossuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedverify_smssuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedkyc_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedselfie_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedwatchlist_screeningsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedrisk_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationdocumentary_verification step. This field will be null unless steps.documentary_verification has reached a terminal state of either success or failed.statusdocumentary_verification step. This field will always have the same value as steps.documentary_verification.documentsdocumentary_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type.Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within
documents. If the overall documentary_verification is failed, the user has exhausted their retry attempts.statusdocumentary_verification.status that summarizes the verification outcome from one or more documents.success, failed, manually_approvedattemptattempt field begins with 1 and increments with each subsequent document upload.imagesGET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires.original_frontoriginal_backcropped_frontcropped_backfaceextracted_dataid_numbercategorydrivers_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privilegesid_card - A general national identification card, distinct from driver's licenses as it only establishes identitypassport - A travel passport issued by the associated country for one of its citizensresidence_permit_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside thereresident_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside therevisa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 monthsNote: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say
passportdrivers_license, id_card, passport, residence_permit_card, resident_card, visaexpiration_datedate issue_datedate issuing_countryissuing_regioncountry field.date_of_birthdate addressstreet, city, country. If any are missing or unable to be extracted, the address will be null.region, and postal_code may be null based on the addressing system. For example:Addresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document.
streetcityregioncountry field.postal_codecountrynamegiven_namefamily_nameanalysisanalysis object should help clarify why the document was rejected.authenticityFor example, most identity documents have formatting rules like the following:
The image of the person's face must have a certain contrast in order to highlight skin tone
The subject in the document's image must remove eye glasses and pose in a certain way
The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules
Security features like watermarks and background patterns must be present
So a
match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document.match, partial_match, no_match, no_dataimage_qualityFor example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks.
Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality.
high, medium, lowextracted_datanamematch, partial_match, no_match, no_datadate_of_birthmatch, partial_match, no_match, no_dataexpiration_dateNote: In the case where an expiration date is not present on the document or failed to be extracted, this value will be
no_data.not_expired, expired, no_dataissuing_countryNote: You can configure whether a
no_match on issuing_country fails the documentary_verification by editing your Plaid Template.match, no_matchaamva_verificationNote: This field is only available for U.S. driver's licenses issued by participating states.
is_verifiedid_numbermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_issue_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_expiration_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datastreetmatch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datacitymatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datapostal_codematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datadate_of_birthmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datagendermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataheightmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataeye_colormatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datafirst_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datamiddle_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datalast_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_dataredacted_atdate-time selfie_checkselfie_check step. This field will be null unless steps.selfie_check has reached a terminal state of either success or failed.statusselfie_check step. This field will always have the same value as steps.selfie_check.success, failedselfiesselfie_check step. Each entry represents one user submission.statusselfie_check.status that summarizes the verification outcome from one or more selfies.success, failedattemptattempt field begins with 1 and increments with each subsequent selfie upload.analysisanalysis object should help clarify why the selfie was rejected.document_comparisonmatch, no_match, no_inputliveness_checksuccess, failedkyc_checkkyc_check (Data Source Verification) step. This field will be null unless steps.kyc_check has reached a terminal state of either success or failed.statuskyc_check step. This field will always have the same value as steps.kyc_check.addressaddress field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputpo_boxyes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no_data when Plaid was not able to determine if the address is a P.O. box.yes, no, no_datatypeNote: This value will be
no_data when Plaid does not have sufficient data to determine the address's use.residential, commercial, no_datanamename field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputdate_of_birthdate_of_birth field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputid_numberid_number field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputphone_numberphone field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputarea_codematch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputrisk_checkrisk_check step.statussuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedbehaviorbehavior attributes of risk check, when available.user_interactionsgenuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely.neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome.risky indicates the user has low familiarity with the data they are providing, and that fraud is likely.no_data indicates there is not sufficient information to give an accurate signal.genuine, neutral, risky, no_datafraud_ring_detectedyes indicates that fraud ring activity was detected.no indicates that fraud ring activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_databot_detectedyes indicates that automated activity was detected.no indicates that automated activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_dataemailemail attributes of risk check.is_deliverableyes, no, no_databreach_countfirst_breached_atdate last_breached_atdate domain_registered_atdate domain_is_free _provideryes, no, no_datadomain_is_customyes, no, no_datadomain_is_disposableyes, no, no_datatop_level_domain_is _suspiciousyes, no, no_datalinked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohophonephone attributes of risk check.linked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohodevicesdevice attributes of risk check.ip_proxy_typenone_detected indicates the user is not on a detectable proxy network.tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network).vpn indicates the user is on a VPN (Virtual Private Network)web_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information.public_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance.none_detected, tor, vpn, web_proxy, public_proxyip_spam_list_countip_timezone_offsetidentity_abuse_signalsidentity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected.synthetic_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity.scorestolen_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity.scoreverify_smsverify_sms step.statusverify_sms step. This field will always have the same value as steps.verify_sms.success, failedverificationsverify_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications.statuspending, success, failed, canceledattemptphone_numberdelivery_attempt_countsolve_attempt_countinitially_sent_atdate-time last_sent_atdate-time redacted_atdate-time watchlist_screening_idbeacon_user_iduser_iduser_id generated by Plaid for the client-provided client_user_id. This field is currently in beta.redacted_atdate-time latest_scored_protect _eventevent_idtrust_indexfraud_attributesnext_cursorrequest_id{
"identity_verifications": [
{
"id": "idv_52xR9LKo77r1Np",
"client_user_id": "your-db-id-3b24110",
"created_at": "2020-07-24T03:26:02Z",
"completed_at": "2020-07-24T03:26:02Z",
"previous_attempt_id": "idv_42cF1MNo42r9Xj",
"shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f",
"template": {
"id": "idvtmp_4FrXJvfQU3zGUR",
"version": 2
},
"user": {
"phone_number": "+12345678909",
"date_of_birth": "1990-05-29",
"ip_address": "192.0.2.42",
"email_address": "user@example.com",
"name": {
"given_name": "Leslie",
"family_name": "Knope"
},
"address": {
"street": "123 Main St.",
"street2": "Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"id_number": {
"value": "123456789",
"type": "us_ssn"
}
},
"status": "success",
"steps": {
"accept_tos": "success",
"verify_sms": "success",
"kyc_check": "success",
"documentary_verification": "success",
"selfie_check": "success",
"watchlist_screening": "success",
"risk_check": "success"
},
"documentary_verification": {
"status": "success",
"documents": [
{
"status": "success",
"attempt": 1,
"images": {
"original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg",
"original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg",
"cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg",
"cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg",
"face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg"
},
"extracted_data": {
"id_number": "AB123456",
"category": "drivers_license",
"expiration_date": "2030-05-29",
"issue_date": "2020-05-29",
"issuing_country": "US",
"issuing_region": "IN",
"date_of_birth": "1990-05-29",
"address": {
"street": "123 Main St. Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"name": {
"given_name": "Leslie",
"family_name": "Knope"
}
},
"analysis": {
"authenticity": "match",
"image_quality": "high",
"extracted_data": {
"name": "match",
"date_of_birth": "match",
"expiration_date": "not_expired",
"issuing_country": "match"
},
"aamva_verification": {
"is_verified": true,
"id_number": "match",
"id_issue_date": "match",
"id_expiration_date": "match",
"street": "match",
"city": "match",
"postal_code": "match",
"date_of_birth": "match",
"gender": "match",
"height": "match",
"eye_color": "match",
"first_name": "match",
"middle_name": "match",
"last_name": "match"
}
},
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"selfie_check": {
"status": "success",
"selfies": [
{
"status": "success",
"attempt": 1,
"capture": {
"image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg",
"video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm"
},
"analysis": {
"document_comparison": "match",
"liveness_check": "success"
}
}
]
},
"kyc_check": {
"status": "success",
"address": {
"summary": "match",
"po_box": "yes",
"type": "residential"
},
"name": {
"summary": "match"
},
"date_of_birth": {
"summary": "match"
},
"id_number": {
"summary": "match"
},
"phone_number": {
"summary": "match",
"area_code": "match"
}
},
"risk_check": {
"status": "success",
"behavior": {
"user_interactions": "risky",
"fraud_ring_detected": "yes",
"bot_detected": "yes"
},
"email": {
"is_deliverable": "yes",
"breach_count": 1,
"first_breached_at": "1990-05-29",
"last_breached_at": "1990-05-29",
"domain_registered_at": "1990-05-29",
"domain_is_free_provider": "yes",
"domain_is_custom": "yes",
"domain_is_disposable": "yes",
"top_level_domain_is_suspicious": "yes",
"linked_services": [
"apple"
]
},
"phone": {
"linked_services": [
"apple"
]
},
"devices": [
{
"ip_proxy_type": "none_detected",
"ip_spam_list_count": 1,
"ip_timezone_offset": "+06:00:00"
}
],
"identity_abuse_signals": {
"synthetic_identity": {
"score": 0
},
"stolen_identity": {
"score": 0
}
}
},
"verify_sms": {
"status": "success",
"verifications": [
{
"status": "success",
"attempt": 1,
"phone_number": "+12345678909",
"delivery_attempt_count": 1,
"solve_attempt_count": 1,
"initially_sent_at": "2020-07-24T03:26:02Z",
"last_sent_at": "2020-07-24T03:26:02Z",
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"watchlist_screening_id": "scr_52xR9LKo77r1Np",
"beacon_user_id": "becusr_42cF1MNo42r9Xj",
"user_id": "usr_dddAs9ewdcDQQQ",
"redacted_at": "2020-07-24T03:26:02Z",
"latest_scored_protect_event": {
"event_id": "ptevt_7AJYTMFxRUgJ",
"timestamp": "2020-07-24T03:26:02Z",
"trust_index": {
"score": 86,
"model": "trust_index.1.0.1",
"subscores": {
"device_and_connection": {
"score": 87
},
"bank_account_insights": {
"score": 85
}
}
},
"fraud_attributes": {
"fraud_attributes": {
"link_session.linked_bank_accounts.user_pi_matches_owners": true,
"link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582,
"session.challenged_with_mfa": false,
"user.bank_accounts.num_of_frozen_or_restricted_accounts": 0,
"user.linked_bank_accounts.num_family_names": 1,
"user.linked_bank_accounts.num_of_connected_banks": 1,
"user.link_sessions.days_since_first_link_session": 150,
"user.pi.email.history_yrs": 7.03,
"user.pi.email.num_social_networks_linked": 12,
"user.pi.ssn.user_likely_has_better_ssn": false
}
}
}
}
],
"next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM",
"request_id": "saKrIBuEB9qJZng"
}/identity_verification/retry
Retry an Identity Verification
Allow a customer to retry their Identity Verification
Request fields
client_user_id/link/token/create client_user_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client_user_id.template_idstrategyreset - Restart the user at the beginning of the session, regardless of whether they successfully completed part of their previous session.incomplete - Start the new session at the step that the user failed in the previous session, skipping steps that have already been successfully completed.infer - If the most recent Identity Verification attempt associated with the given client_user_id has a status of failed or expired, retry using the incomplete strategy. Otherwise, use the reset strategy.custom - Start the new session with a custom configuration, specified by the value of the steps fieldNote:
The
incomplete strategy cannot be applied if the session's failing step is screening or risk_check.The
infer strategy cannot be applied if the session's status is still activereset, incomplete, infer, customuserEach of the following identity fields are optional:
email_addressphone_numberdate_of_birthnameaddressid_numberSpecifically, these fields are optional in that they can either be fully provided (satisfying every required field in their subschema) or omitted from the request entirely by not providing the key or value. Providing these fields via the API will result in Link skipping the data collection process for the associated user. All verification steps enabled in the associated Identity Verification Template will still be run. Verification steps will either be run immediately, or once the user completes the
accept_tos step, depending on the value provided to the gave_consent field.email_addressemail phone_numberdate_of_birthdate namegiven_namefamily_nameaddressFor more context on this field, see Input Validation by Country.
streetstreet2cityregioncountry field.postal_codecountryid_numbernull. Otherwise, both fields are guaranteed to be filled.valuetypear_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_idstepscustom retry strategy specifying which steps should be required or skipped.Note:
This field must be provided when the retry strategy is
custom and must be omitted otherwise.Custom retries override settings in your Plaid Template. For example, if your Plaid Template has
verify_sms disabled, a custom retry with verify_sms enabled will still require the step.The
selfie_check step is currently not supported on the sandbox server. Sandbox requests will silently disable the selfie_check step when provided.verify_smsverify_sms step.kyc_checkkyc_check (Data Source Verification) step.documentary _verificationdocumentary_verification step.selfie_checkselfie_check step. If a previous session has already passed the selfie_check step, the new selfie check will be a Selfie Reauthentication check, in which the selfie is tested for liveness and for consistency with the previous selfie.is_shareableis_shareable setting from the original verification attempt will be used.client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.const request: IdentityVerificationRetryRequest = {
client_user_id: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d',
template_id: 'idvtmp_52xR9LKo77r1Np',
strategy: 'reset',
user: {
email_address: 'acharleston@email.com',
phone_number: '+12345678909',
date_of_birth: '1975-01-18',
name: {
given_name: 'Anna',
family_name: 'Charleston',
},
address: {
street: '100 Market Street',
street2: 'Apt 1A',
city: 'San Francisco',
region: 'CA',
postal_code: '94103',
country: 'US',
},
id_number: {
value: '123456789',
type: 'us_ssn',
},
},
};
try {
const response = await plaidClient.identityVerificationRetry(request);
} catch (error) {
// handle error
}
Response fields
idclient_user_id/link/token/create client_user_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client_user_id.created_atdate-time completed_atdate-time previous_attempt_idshareable_urltemplateuserphone_numberdate_of_birthdate ip_addressemail_addressemail namegiven_namefamily_nameaddressAddresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
streetstreet2cityregioncountry field.postal_codecountryid_numbernull. Otherwise, both fields are guaranteed to be filled.valuetypear_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_idstatusactive - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed.success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification templatefailed - The user failed one or more steps in the session and was told to contact support.expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future.canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.active, success, failed, expired, canceled, pending_reviewstepsactive - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point.success - The Identity Verification attempt has completed this step.failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session.waiting_for_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback.not_applicable - This step will not be run for this session.skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped.expired - This step had not yet been completed when the Identity Verification attempt as a whole expired.canceled - The Identity Verification attempt was canceled before the user completed this step.pending_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review.manually_approved - The step was manually overridden to pass by a team member in the dashboard.manually_rejected - The step was manually overridden to fail by a team member in the dashboard.accept_tossuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedverify_smssuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedkyc_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedselfie_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedwatchlist_screeningsuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedrisk_checksuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejecteddocumentary _verificationdocumentary_verification step. This field will be null unless steps.documentary_verification has reached a terminal state of either success or failed.statusdocumentary_verification step. This field will always have the same value as steps.documentary_verification.documentsdocumentary_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type.Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within
documents. If the overall documentary_verification is failed, the user has exhausted their retry attempts.statusdocumentary_verification.status that summarizes the verification outcome from one or more documents.success, failed, manually_approvedattemptattempt field begins with 1 and increments with each subsequent document upload.imagesGET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires.original_frontoriginal_backcropped_frontcropped_backfaceextracted_dataid_numbercategorydrivers_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privilegesid_card - A general national identification card, distinct from driver's licenses as it only establishes identitypassport - A travel passport issued by the associated country for one of its citizensresidence_permit_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside thereresident_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside therevisa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 monthsNote: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say
passportdrivers_license, id_card, passport, residence_permit_card, resident_card, visaexpiration_datedate issue_datedate issuing_countryissuing_regioncountry field.date_of_birthdate addressstreet, city, country. If any are missing or unable to be extracted, the address will be null.region, and postal_code may be null based on the addressing system. For example:Addresses from the United Kingdom will not include a region
Addresses from Hong Kong will not include postal code
Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document.
streetcityregioncountry field.postal_codecountrynamegiven_namefamily_nameanalysisanalysis object should help clarify why the document was rejected.authenticityFor example, most identity documents have formatting rules like the following:
The image of the person's face must have a certain contrast in order to highlight skin tone
The subject in the document's image must remove eye glasses and pose in a certain way
The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules
Security features like watermarks and background patterns must be present
So a
match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document.match, partial_match, no_match, no_dataimage_qualityFor example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks.
Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality.
high, medium, lowextracted_datanamematch, partial_match, no_match, no_datadate_of_birthmatch, partial_match, no_match, no_dataexpiration_dateNote: In the case where an expiration date is not present on the document or failed to be extracted, this value will be
no_data.not_expired, expired, no_dataissuing_countryNote: You can configure whether a
no_match on issuing_country fails the documentary_verification by editing your Plaid Template.match, no_matchaamva_verificationNote: This field is only available for U.S. driver's licenses issued by participating states.
is_verifiedid_numbermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_issue_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataid_expiration_datematch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datastreetmatch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datacitymatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datapostal_codematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datadate_of_birthmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datagendermatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataheightmatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_dataeye_colormatch - The field is an exact match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, no_match, no_datafirst_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datamiddle_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_datalast_namematch - The field is an exact match with the state database.partial_match - The field is a partial match with the state database.no_match - The field is not an exact match with the state database.no_data - The field was unable to be checked against state databases.match, partial_match, no_match, no_dataredacted_atdate-time selfie_checkselfie_check step. This field will be null unless steps.selfie_check has reached a terminal state of either success or failed.statusselfie_check step. This field will always have the same value as steps.selfie_check.success, failedselfiesselfie_check step. Each entry represents one user submission.statusselfie_check.status that summarizes the verification outcome from one or more selfies.success, failedattemptattempt field begins with 1 and increments with each subsequent selfie upload.analysisanalysis object should help clarify why the selfie was rejected.document_comparisonmatch, no_match, no_inputliveness_checksuccess, failedkyc_checkkyc_check (Data Source Verification) step. This field will be null unless steps.kyc_check has reached a terminal state of either success or failed.statuskyc_check step. This field will always have the same value as steps.kyc_check.addressaddress field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputpo_boxyes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no_data when Plaid was not able to determine if the address is a P.O. box.yes, no, no_datatypeNote: This value will be
no_data when Plaid does not have sufficient data to determine the address's use.residential, commercial, no_datanamename field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputdate_of_birthdate_of_birth field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputid_numberid_number field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputphone_numberphone field matched.summarymatch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputarea_codematch indicates that the provided input data was a strong match against external data.partial_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name.no_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data.no_data indicates that Plaid was unable to find external data to compare against the provided input data.no_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user.match, partial_match, no_match, no_data, no_inputrisk_checkrisk_check step.statussuccess, active, failed, waiting_for_prerequisite, not_applicable, skipped, expired, canceled, pending_review, manually_approved, manually_rejectedbehaviorbehavior attributes of risk check, when available.user_interactionsgenuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely.neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome.risky indicates the user has low familiarity with the data they are providing, and that fraud is likely.no_data indicates there is not sufficient information to give an accurate signal.genuine, neutral, risky, no_datafraud_ring_detectedyes indicates that fraud ring activity was detected.no indicates that fraud ring activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_databot_detectedyes indicates that automated activity was detected.no indicates that automated activity was not detected.no_data indicates there was not enough information available to give an accurate signal.yes, no, no_dataemailemail attributes of risk check.is_deliverableyes, no, no_databreach_countfirst_breached_atdate last_breached_atdate domain_registered_atdate domain_is_free _provideryes, no, no_datadomain_is_customyes, no, no_datadomain_is_disposableyes, no, no_datatop_level_domain_is _suspiciousyes, no, no_datalinked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohophonephone attributes of risk check.linked_servicesaboutme, adobe, adult_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zohodevicesdevice attributes of risk check.ip_proxy_typenone_detected indicates the user is not on a detectable proxy network.tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network).vpn indicates the user is on a VPN (Virtual Private Network)web_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information.public_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance.none_detected, tor, vpn, web_proxy, public_proxyip_spam_list_countip_timezone_offsetidentity_abuse_signalsidentity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected.synthetic_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity.scorestolen_identityContains the following fields:
score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity.scoreverify_smsverify_sms step.statusverify_sms step. This field will always have the same value as steps.verify_sms.success, failedverificationsverify_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications.statuspending, success, failed, canceledattemptphone_numberdelivery_attempt_countsolve_attempt_countinitially_sent_atdate-time last_sent_atdate-time redacted_atdate-time watchlist_screening_idbeacon_user_iduser_iduser_id generated by Plaid for the client-provided client_user_id. This field is currently in beta.redacted_atdate-time latest_scored_protect _eventevent_idtrust_indexfraud_attributesrequest_id{
"id": "idv_52xR9LKo77r1Np",
"client_user_id": "your-db-id-3b24110",
"created_at": "2020-07-24T03:26:02Z",
"completed_at": "2020-07-24T03:26:02Z",
"previous_attempt_id": "idv_42cF1MNo42r9Xj",
"shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f",
"template": {
"id": "idvtmp_4FrXJvfQU3zGUR",
"version": 2
},
"user": {
"phone_number": "+12345678909",
"date_of_birth": "1990-05-29",
"ip_address": "192.0.2.42",
"email_address": "user@example.com",
"name": {
"given_name": "Leslie",
"family_name": "Knope"
},
"address": {
"street": "123 Main St.",
"street2": "Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"id_number": {
"value": "123456789",
"type": "us_ssn"
}
},
"status": "success",
"steps": {
"accept_tos": "success",
"verify_sms": "success",
"kyc_check": "success",
"documentary_verification": "success",
"selfie_check": "success",
"watchlist_screening": "success",
"risk_check": "success"
},
"documentary_verification": {
"status": "success",
"documents": [
{
"status": "success",
"attempt": 1,
"images": {
"original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg",
"original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg",
"cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg",
"cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg",
"face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg"
},
"extracted_data": {
"id_number": "AB123456",
"category": "drivers_license",
"expiration_date": "2030-05-29",
"issue_date": "2020-05-29",
"issuing_country": "US",
"issuing_region": "IN",
"date_of_birth": "1990-05-29",
"address": {
"street": "123 Main St. Unit 42",
"city": "Pawnee",
"region": "IN",
"postal_code": "46001",
"country": "US"
},
"name": {
"given_name": "Leslie",
"family_name": "Knope"
}
},
"analysis": {
"authenticity": "match",
"image_quality": "high",
"extracted_data": {
"name": "match",
"date_of_birth": "match",
"expiration_date": "not_expired",
"issuing_country": "match"
},
"aamva_verification": {
"is_verified": true,
"id_number": "match",
"id_issue_date": "match",
"id_expiration_date": "match",
"street": "match",
"city": "match",
"postal_code": "match",
"date_of_birth": "match",
"gender": "match",
"height": "match",
"eye_color": "match",
"first_name": "match",
"middle_name": "match",
"last_name": "match"
}
},
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"selfie_check": {
"status": "success",
"selfies": [
{
"status": "success",
"attempt": 1,
"capture": {
"image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg",
"video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm"
},
"analysis": {
"document_comparison": "match",
"liveness_check": "success"
}
}
]
},
"kyc_check": {
"status": "success",
"address": {
"summary": "match",
"po_box": "yes",
"type": "residential"
},
"name": {
"summary": "match"
},
"date_of_birth": {
"summary": "match"
},
"id_number": {
"summary": "match"
},
"phone_number": {
"summary": "match",
"area_code": "match"
}
},
"risk_check": {
"status": "success",
"behavior": {
"user_interactions": "risky",
"fraud_ring_detected": "yes",
"bot_detected": "yes"
},
"email": {
"is_deliverable": "yes",
"breach_count": 1,
"first_breached_at": "1990-05-29",
"last_breached_at": "1990-05-29",
"domain_registered_at": "1990-05-29",
"domain_is_free_provider": "yes",
"domain_is_custom": "yes",
"domain_is_disposable": "yes",
"top_level_domain_is_suspicious": "yes",
"linked_services": [
"apple"
]
},
"phone": {
"linked_services": [
"apple"
]
},
"devices": [
{
"ip_proxy_type": "none_detected",
"ip_spam_list_count": 1,
"ip_timezone_offset": "+06:00:00"
}
],
"identity_abuse_signals": {
"synthetic_identity": {
"score": 0
},
"stolen_identity": {
"score": 0
}
}
},
"verify_sms": {
"status": "success",
"verifications": [
{
"status": "success",
"attempt": 1,
"phone_number": "+12345678909",
"delivery_attempt_count": 1,
"solve_attempt_count": 1,
"initially_sent_at": "2020-07-24T03:26:02Z",
"last_sent_at": "2020-07-24T03:26:02Z",
"redacted_at": "2020-07-24T03:26:02Z"
}
]
},
"watchlist_screening_id": "scr_52xR9LKo77r1Np",
"beacon_user_id": "becusr_42cF1MNo42r9Xj",
"user_id": "usr_dddAs9ewdcDQQQ",
"redacted_at": "2020-07-24T03:26:02Z",
"latest_scored_protect_event": {
"event_id": "ptevt_7AJYTMFxRUgJ",
"timestamp": "2020-07-24T03:26:02Z",
"trust_index": {
"score": 86,
"model": "trust_index.1.0.1",
"subscores": {
"device_and_connection": {
"score": 87
},
"bank_account_insights": {
"score": 85
}
}
},
"fraud_attributes": {
"fraud_attributes": {
"link_session.linked_bank_accounts.user_pi_matches_owners": true,
"link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582,
"session.challenged_with_mfa": false,
"user.bank_accounts.num_of_frozen_or_restricted_accounts": 0,
"user.linked_bank_accounts.num_family_names": 1,
"user.linked_bank_accounts.num_of_connected_banks": 1,
"user.link_sessions.days_since_first_link_session": 150,
"user.pi.email.history_yrs": 7.03,
"user.pi.email.num_social_networks_linked": 12,
"user.pi.ssn.user_likely_has_better_ssn": false
}
}
},
"request_id": "saKrIBuEB9qJZng"
}Webhooks
STATUS_UPDATED
Fired when the status of an identity verification has been updated, which can be triggered via the dashboard or the API.
Properties
webhook_typeIDENTITY_VERIFICATIONwebhook_codeSTATUS_UPDATEDidentity_verification _idenvironmentsandbox, production{
"webhook_type": "IDENTITY_VERIFICATION",
"webhook_code": "STATUS_UPDATED",
"identity_verification_id": "idv_52xR9LKo77r1Np",
"environment": "production"
}STEP_UPDATED
Fired when an end user has completed a step of the Identity Verification process.
Properties
webhook_typeIDENTITY_VERIFICATIONwebhook_codeSTEP_UPDATEDidentity_verification _idenvironmentsandbox, production{
"webhook_type": "IDENTITY_VERIFICATION",
"webhook_code": "STEP_UPDATED",
"identity_verification_id": "idv_52xR9LKo77r1Np",
"environment": "production"
}RETRIED
Fired when identity verification has been retried, which can be triggered via the dashboard or the API.
Properties
webhook_typeIDENTITY_VERIFICATIONwebhook_codeRETRIEDidentity_verification _idenvironmentsandbox, production{
"webhook_type": "IDENTITY_VERIFICATION",
"webhook_code": "RETRIED",
"identity_verification_id": "idv_52xR9LKo77r1Np",
"environment": "production"
}