一键导入
plaid-identity-verification
Implement Plaid Identity and Identity Verification products for KYC flows, document verification, and match scores. Use when the user needs to verify account holder identity.
菜单
Implement Plaid Identity and Identity Verification products for KYC flows, document verification, and match scores. Use when the user needs to verify account holder identity.
Verify bank accounts using Plaid Auth, micro-deposits, same-day micro-deposits, and database match. Use when the user needs account and routing numbers or ACH payment verification.
Search and retrieve Plaid API endpoint documentation including parameters, authentication requirements, response shapes, and rate limits. Use when the user needs to call a Plaid API or wants to know available endpoints.
Map Plaid personal finance categories to your application's taxonomy. Covers the primary/detailed hierarchy, building custom mapping layers, and common category use cases. Use when the user needs to categorize or display transaction categories.
Detect, classify, and recover from Plaid API errors including ITEM_LOGIN_REQUIRED, INVALID_CREDENTIALS, INSTITUTION_NOT_RESPONDING, rate limits, and network failures. Use when the user needs to handle Plaid errors gracefully.
Search Plaid institutions by name, routing number, products supported, and country. Use when the user needs to find bank coverage, check institution availability, or look up institution details.
Track investment holdings, securities, and transactions using the Plaid Investments product. Covers holdings retrieval, security details, cost basis, and supported brokerages.
| name | plaid-identity-verification |
| description | Implement Plaid Identity and Identity Verification products for KYC flows, document verification, and match scores. Use when the user needs to verify account holder identity. |
| standards-version | 1.10.0 |
Use this skill when the user:
identity productConnect with the identity product. Request identity during Link:
const tokenResponse = await plaidClient.linkTokenCreate({
user: { client_user_id: uniqueUserId },
client_name: "My App",
products: [Products.Identity],
country_codes: [CountryCode.Us],
language: "en",
});
Retrieve identity data. Returns names, addresses, emails, and phone numbers for each account holder:
const response = await plaidClient.identityGet({
access_token: accessToken,
});
for (const account of response.data.accounts) {
for (const owner of account.owners) {
console.log(`Name: ${owner.names.join(", ")}`);
for (const addr of owner.addresses) {
console.log(
`Address: ${addr.data.street}, ${addr.data.city}, ` +
`${addr.data.region} ${addr.data.postal_code}`,
);
console.log(` primary: ${addr.primary}`);
}
for (const email of owner.emails) {
console.log(`Email: ${email.data} (${email.type}, primary: ${email.primary})`);
}
for (const phone of owner.phone_numbers) {
console.log(`Phone: ${phone.data} (${phone.type}, primary: ${phone.primary})`);
}
}
}
Handle multiple owners. Joint accounts return multiple owners entries. Always iterate rather than assuming a single owner:
const owners = account.owners;
if (owners.length > 1) {
// Joint account - match against any owner
const matched = owners.some((owner) =>
owner.names.some((name) =>
fuzzyMatch(name, userProvidedName),
),
);
}
Identity match scoring. Compare Plaid identity data against user-provided info using the Identity Match endpoint:
const matchResponse = await plaidClient.identityMatch({
access_token: accessToken,
user: {
legal_name: "Jane Doe",
phone_number: "+14155551234",
email_address: "jane@example.com",
address: {
street: "123 Main St",
city: "San Francisco",
region: "CA",
postal_code: "94105",
country: "US",
},
},
});
for (const account of matchResponse.data.accounts) {
const scores = account.legal_name;
// scores.score - 0-100, higher is better
// scores.is_nickname_match, scores.is_first_name_or_last_name_match
console.log(`Name match score: ${scores?.score}`);
console.log(`Address match: ${account.address?.score}`);
console.log(`Email match: ${account.email_address?.score}`);
console.log(`Phone match: ${account.phone_number?.score}`);
}
| Score Range | Interpretation | Action |
|---|---|---|
| 90–100 | Strong match | Auto-approve |
| 70–89 | Likely match | Review edge cases |
| 50–69 | Weak match | Request additional verification |
| 0–49 | Mismatch | Flag for manual review |
Identity Verification product (KYC). For full KYC with document and selfie verification, use the Identity Verification product - a separate Plaid product from Identity:
// Create an Identity Verification session via Link
const tokenResponse = await plaidClient.linkTokenCreate({
user: { client_user_id: uniqueUserId },
client_name: "My App",
products: [Products.IdentityVerification],
identity_verification: {
template_id: "idvtmp_xxxxxxxxx", // from Plaid Dashboard
},
country_codes: [CountryCode.Us],
language: "en",
});
// After the user completes the flow in Link, retrieve results
// via the IDENTITY_VERIFICATION webhook or /identity_verification/get
Document types supported: passport, driver's license, national ID, residence permit.
Sandbox testing. Sandbox items return synthetic identity data:
// Use plaid_createSandboxItem then plaid_getIdentity MCP tools
// Sandbox returns predictable test names and addresses
Identity data coverage varies by institution. Not all banks return all fields:
| Field | Coverage | Notes |
|---|---|---|
| Names | High | Almost always available |
| Addresses | High | May have multiple (current + previous) |
| Emails | Medium | Not all institutions return email |
| Phone numbers | Medium | May return landline or mobile |
| Date of birth | Low | Rare outside Identity Verification |
User: "I need to verify that the person connecting their bank account is who they say they are for KYC compliance."
Agent:
identity product via plaid_createSandboxItemplaid_getIdentity| Step | MCP Tool | Description |
|---|---|---|
| Create sandbox item | plaid_createSandboxItem | Create a test item with identity product |
| Get accounts | plaid_getAccounts | List accounts for the item |
| Get identity | plaid_getIdentity | Retrieve account holder names, addresses, emails, phones |
| Create Link token | plaid_createLinkToken | Create Link token with identity product |
| Search institutions | plaid_searchInstitutions | Find institutions supporting identity |
owners entries. Always iterate through all owners when matching.