com um clique
plaid-account-verification
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.
Menu
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.
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.
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-account-verification |
| description | 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. |
| standards-version | 1.10.0 |
Use this skill when the user:
Instant Auth - the primary path. Covers ~80% of US depository accounts. Returns account and routing numbers immediately after Link:
import { Configuration, PlaidApi, PlaidEnvironments, Products, CountryCode } from "plaid";
// 1. Create Link token with auth product
const tokenResponse = await plaidClient.linkTokenCreate({
user: { client_user_id: uniqueUserId },
client_name: "My App",
products: [Products.Auth],
country_codes: [CountryCode.Us],
language: "en",
});
// 2. After user completes Link, exchange token
const exchangeResponse = await plaidClient.itemPublicTokenExchange({
public_token: publicTokenFromLink,
});
// 3. Retrieve account and routing numbers
const authResponse = await plaidClient.authGet({
access_token: exchangeResponse.data.access_token,
});
const achNumbers = authResponse.data.numbers.ach;
// Each entry: { account_id, account, routing, wire_routing }
Micro-deposit fallback - for institutions without Instant Auth support. Plaid deposits two small amounts (typically $0.01–$0.10) into the user's account:
// Create Link token requesting auth with micro-deposit fallback
const tokenResponse = await plaidClient.linkTokenCreate({
user: { client_user_id: uniqueUserId },
client_name: "My App",
products: [Products.Auth],
country_codes: [CountryCode.Us],
language: "en",
auth: {
automated_microdeposits_enabled: true,
},
});
The user completes Link, selects their institution, and enters credentials. If Instant Auth is unavailable, Plaid initiates micro-deposits automatically. The user must return 1–3 business days later to verify the amounts.
Same-day micro-deposits - micro-deposits that arrive on the same business day (if initiated before the cutoff):
const tokenResponse = await plaidClient.linkTokenCreate({
user: { client_user_id: uniqueUserId },
client_name: "My App",
products: [Products.Auth],
country_codes: [CountryCode.Us],
language: "en",
auth: {
same_day_microdeposits_enabled: true,
},
});
Database match - verifies account ownership by matching the account holder's identity against the institution's records, without any deposits:
const tokenResponse = await plaidClient.linkTokenCreate({
user: { client_user_id: uniqueUserId },
client_name: "My App",
products: [Products.Auth],
country_codes: [CountryCode.Us],
language: "en",
auth: {
database_match_enabled: true,
},
});
Auth number formats - the response includes different number formats depending on the country:
| Field | Format | Region |
|---|---|---|
numbers.ach | Account + routing + wire routing | US |
numbers.eft | Account + institution + branch | Canada |
numbers.international | IBAN + BIC | Europe |
numbers.bacs | Account + sort code | UK |
Handling verification status webhooks:
// VERIFICATION_EXPIRED - user didn't verify micro-deposits in time
// AUTOMATICALLY_VERIFIED - micro-deposits verified without user input
// DATABASE_MATCHED - database match succeeded
app.post("/api/plaid-webhook", async (req, res) => {
const { webhook_type, webhook_code, item_id } = req.body;
if (webhook_type === "AUTH") {
switch (webhook_code) {
case "VERIFICATION_EXPIRED":
// Prompt user to restart verification
break;
case "AUTOMATICALLY_VERIFIED":
// Fetch auth numbers - account is now verified
const authResponse = await plaidClient.authGet({
access_token: await getAccessToken(item_id),
});
break;
}
}
});
Test all verification flows in sandbox without waiting for real deposits:
// Set verification status directly in sandbox
await plaidClient.sandboxItemSetVerificationStatus({
access_token: accessToken,
account_id: accountId,
verification_status: "automatically_verified",
});
// Now authGet will return numbers for this account
const authResponse = await plaidClient.authGet({
access_token: accessToken,
});
Available sandbox verification statuses: automatically_verified, verification_expired.
User: "I need to get account and routing numbers for ACH payments using Plaid."
Agent:
Products.Auth via plaid_createLinkTokenplaid_getAuthNumbers to retrieve account and routing numbersnumbers.ach responseautomated_microdeposits_enabled as fallback."| Step | MCP Tool | Description |
|---|---|---|
| Create sandbox item | plaid_createSandboxItem | Create a test item with the auth product |
| Get accounts | plaid_getAccounts | List accounts to find depository account IDs |
| Get auth numbers | plaid_getAuthNumbers | Retrieve account and routing numbers |
| Get balances | plaid_getBalance | Check real-time balances before initiating transfers |
| Set verification | plaid_sandboxSetVerificationStatus | Set micro-deposit verification status in sandbox (coming v0.5.0) |
| Create Link token | plaid_createLinkToken | Create a Link token with auth product for testing |
automated_microdeposits_enabled, users at unsupported institutions see an error.VERIFICATION_EXPIRED webhooks and prompt users to restart.authGet returns numbers only after the user verifies the amounts. Check the verification status first.depository accounts before calling authGet.auth isn't in the products array during Link token creation, authGet will fail with PRODUCT_NOT_READY.